實驗吧——WriteUp&&漲姿勢(4)
阿新 • • 發佈:2018-12-30
WriteUp
- 最安全的管理系統
- 認真你就輸了
- so beautiful so white
漲姿勢
- 程式邏輯問題
- FALSE
最安全的管理系統
解題思路
找個合適的MD5,再來個序列化搞定
WriteUP
直接輸入沒有異常反應,那就右鍵原始碼
MD5後值和'0'弱型別相等的字串,網上隨便找個就行
str='240610708' md5(str)='0e462097431906509019562988736854'
提交後出現新的url,進去看看
先反序列化,然後判斷得到的陣列相應元素是否符合要求
是否符合要求只要用弱型別相等就行了,Bool型別的true 和字串弱型別相等
$arr = ['user'=>true,'pass'=>true] => a:2:{s:4:"user";b:1;s:4:"pass";b:1;}
Playload:
user = 240610708 pass = a:2:{s:4:"user";b:1;s:4:"pass";b:1;}
認真你就輸了
解題思路
打不開一般說明檔案型別有問題
WriteUp
HxD看看馬上發現好像是zip檔案
直接改字尾看看
直接在某個資料夾下找到flag
so beautiful so white
解題思路
圖片中找到密碼,解壓縮Zip得到殘缺的GIF,補全得flag
WriteUp
Stegsolve開啟圖片得到key
解壓縮Zip得到GIF
GIF打不開判斷是頭結構缺失,HxD看看,確實缺失,補全它
開啟GIF即可
程式邏輯問題
解題思路
在如下查詢語句失敗時會返回union後面的語句,即 'Hello'
SELECT username FROM admin where id =-1 union select concat('Hello')
WriteUp
慣例右鍵原始碼,發現程式碼檔案
程式碼審計後發現
1. pass被MD5處理
2. mysql_query()存在漏洞,無論使用者是否存在都返回成功
3. mysql_fetch_array($query,MYSQL_ASSOC)從查詢結果取一個關聯陣列
4. 傳入的pass和查詢的pass一樣則得到flag
1. 由4可知,我們能控制的只有自己提交的pass,所以我們需要查詢得到的pass和我們的pass一樣
2. 查詢得到的pass來自mysql_fetch_array($query,MYSQL_ASSOC),所以我們要控制查詢結果
3. 由2知查詢任意使用者都不會報錯
4. 關鍵點:Select語句失敗會返回Union後面的字串,這裡就可以控制查詢結果
Playload:user=1' union select '8b1a9953c4611296a827abf8c47804d7' #&pass=Hello
漲姿勢點
mysql_query()的任意查詢漏洞
select語句失敗時返回union後面的字串
FALSE
解題思路
SHA1函式的漏洞
WriteUP
因為SHA1函式在處理陣列時會報錯返回false,所以當'name'和'password'都是陣列時就返回兩個false,此時false==false。所以只需構造兩個不同的陣列
漲姿勢點
SHA1函式處理陣列時返回false
xxx[] = para可以控制提交的xxx為陣列型別