sql注入2-BugkuCTF平臺

sql注入2-BugkuCTF平臺

方法1

這道題是DS_Store源碼泄露,跑一下就出來了,自動生成了一個文件夾“123.206.87.240_8007”,打開找到flag文件即可得到答案。

昶
方法2

利用字符串與數字做運算時,字符串會轉爲數字再做運算,例如"abc"=""=0"12ab"=12>11,可看下圖示例,若是username=0-1=-1時就會報錯,但username=0-0=0時是不會報錯的,會回顯相應的信息。
這樣我們就能利用 admin'-0-' 來構造payload。因爲源代碼類似於 select * from xxx where username='輸入處'; 所以 admin'-0-' 輸入後就相當於username='admin'-0-'',也就是字符串與數字的運算問題了。
首先使用異或注入(不詳自行百度)判斷哪些被過濾了,手工測太麻煩,在Burp下跑字典(字典裏面就是常用的sql關鍵詞)。
發現題目給的“提示 !,!=,=,+,-,^,%”這些都是沒有被過濾的,而像“union,or,and,for,information,逗號,空格”等都被過濾了。

昶
昶

由於information都被過濾了,就不能使用information_schema來爆表、爆列了。這時想到源代碼的uname、passwd,猜測就是最後的字段名。
由於uname=admin已經確定,那麼寫腳本異或注入一下得出passwd的長度爲32,猜測是md5加密後的值,那就一位位爆出來。

昶
昶

發現“ascii(),substr(),mid()”都沒有被過濾,substr(database(),1,2)=substr(database() from 1 for 2),但由於for、逗號、空格被過濾,這裏考慮使用substr()mid()也完全一樣。
說明原理:若passwd=abc123。
substr((passwd)from(1))='abc123',substr((passwd)from(2))='bc123'
比較ascii值:ascii(substr((passwd)from(2)))=98    //只比較字符串得第一位,98即b得ascii值
當表達式爲真時,返回“username error!!@_@”;當表達式爲假時,返回“password error!!@_@”。
寫腳本跑一下即可。“0192023a7bbd73250516f069df18b500”這串字符取md5解密一下得到“admin123”。
使用用戶名“admin”和密碼“admin123”登錄後輸入ls執行即可得到flag。

昶
昶
昶
轉載請註明出處。
本文網址:https://blog.csdn.net/hiahiachang/article/details/105059489

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