[GXYCTF2019]BabySQli

看了大佬的博客,勉強整出來了,詳細的寫一下我的思路。


錯誤思路:
觀察發現是post傳值,想用sqlmap一把嗦,BP抓包=>sqlmap
得到數據庫:web_sqli
表:user
字段:passwd
得到密碼是cdc9c819c7f8be2628d4180669009d28
在這裏插入圖片描述
得到passwd以後想爆一下username:admin
在這裏插入圖片描述
爆是爆出來了,沒啥亂用。撞庫也撞不出來,沒轍了。


正確思路:
利用sqli的特性:在聯合查詢並不存在的數據時,聯合查詢就會構造一個虛擬的數據。
說人話,上實例:
在聯合查詢之前,數據庫是和樣子的。
在這裏插入圖片描述
執行聯合查詢:select * from 'users' where name='person' union select 1,'admin','e10adc3949ba59abbe56057f20f883e',4,5

執行後:
在這裏插入圖片描述
按照我們的輸入,sqli在數據庫中寫入數據,相當於僞造了一個身份,就可以用這個身份登錄了。

經過前面錯誤的試探,我們發現字段是id,username,passwd。
但是不知道三個的順序是怎麼樣的,進行試探:
在這裏插入圖片描述
如果輸入是'admin',1,1#,報錯wrong user。
而我們是知道有admin這個賬號的,那麼證明順序不是這個。
再試:
在這裏插入圖片描述
輸入變爲1,'admin',1時,就報wrong pass,證明admin的位置對了,id跟passwd的位置先隨便試吧。

已知123的md5值是202cb962ac59075b964b07152d234b70

構造
name=1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#&pw=123

執行之後,盲猜後臺的數據:

id username passwd
1 admin 202cb962ac59075b964b07152d234b70

而執行sqli的同時,我們還同時傳入了一個passwd = 123
系統將這個passwdmd5哈希後與數據庫中的數據進行對比,True後返回flag。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章