1. 程式人生 > >實驗吧——WriteUp&&漲姿勢(4)

實驗吧——WriteUp&&漲姿勢(4)

WriteUp

  1. 最安全的管理系統
  2. 認真你就輸了
  3. so beautiful so white

漲姿勢

  1. 程式邏輯問題
  2. 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為陣列型別