這道題目是一道**審計題
原始碼:
題目思路是:變數覆蓋,反序列化漏洞
看到原始碼裡面有parse_str()函式,這個函式如果沒有帶
array()
這個引數,將會導致變數被重新賦值
過first
過 var &a=var=give
過 bbb &a=var=give%26bbb=me
這裡用%26不能用
&是因為
bbb這些引數都要算是a的值
如果用&那麼
bbb就不算是
a的值,就會當作是乙個新的變數,那麼
$_get[『a』]就獲
取不到bbb的值,也就不能重新賦值了
過 ccc
&a=var=give%26bbb=me%26ccc=flag
下面post進去乙個值,然後將這個值反序列化,這裡就是反序列化漏洞的利用了
看class
反序列化漏洞就是對魔術方法的利用,這裡有__wake() function ,一旦進行反序列化,那麼就會執行這個函式,但是這個函式是可以繞過的,只要傳進去的反序列,屬性的數目比真正的數目多,那麼就會繞過這個
__wake()
,但是漏洞應該是受
php版本限制的,我
windows
下面的php
是 php7.0.7
的,可以成功繞過,直接執行
__destruct()
。但是我的
linux
下面的php
是php7.0.32
的,這個函式就不能繞過了。不知道比賽的環境是怎樣的,還是按正常流程來
魔術方法的執行順序這裡不說,前面已經寫過相關的筆記
看class 的流程
傳去的私有變數 args 要求是乙個
array()
,然後對傳進來的值進行
waf處理
對很多字元都進行了過濾
,不輸入這些字元就好,不影響
下面還對flag進行了過濾,但是只要重寫
flag
就可以了,
執行完之後,程式結束之前,會自動執行__destruct() function
這裡有乙個call_user_func_array(array($this, $this->method), $this->args),可以執行任意函式,但是上面判斷是
method
這個引數要等於
echo
,**也重寫了
echo
這個函式
call_user_func_array(array($this, $this->method), $this->args),這個函式要求
$this->args
是乙個陣列
引數$host的值就是
args
的值,如果
$host
的值是ls
,那麼就會直接輸出
echo ls
,因為它這裡將
ls當成乙個字串了,那麼可以用
` `
括起來(這兩個是
esc下面那個東東),就是
echo `ls` ,那麼就會先執行
ls,然後再執行
下面構造payload
注意變數是private,還是
public
private的變數,序列化之後是看不到的,所以要經過
urldecode
才能看到
輸入傳送過去就會將當前的目錄的檔案列出來
如果要檢視乙個檔案的內容就要 cat 1.php
但是空格被過濾了,這裡就要用到$ifs,
$ifs是
linux
下面的乙個環境變數,它的意思可以是空格,換行,
tab等
可以將原始碼讀出來了
結束了,為什麼要那樣子構建payload,在前面的筆記文章裡面有詳細的說,這裡不詳細說了
我自己搭建了乙個docker,名稱是nienie/ubuntu16_php7_apache2:3.0
裡面有包含了web1 web2 web3的環境,不是比賽的環境,可能有些小問題,請自行修改。
第四屆福建省大學生程式設計競賽(部分)
fzu 2140 題意 給你乙個數n,讓你找出n個點,滿足一下關係 任意兩點的距離不大於1.0 所有點到原點的距離不大於1.0 恰好有n對點的距離為1.0 由這些點構成的n邊形的面積不小於0.5 由這些點構成的n邊形的面積不大於0.75 思路 由於所有點到原點距離為1,那麼首先想到的是圓。假設輸入的...
湖南師範大學第四屆大學生計算機程式設計競賽練習
關係 time limit 3000ms,special time limit 7500ms,memory limit 65536kb total submit users 34,accepted users 29 problem 11312 no special judgement problem...
第四屆 2023年十月 福建省大學生程式設計競賽
g easy game 題目鏈結 題意 輸入乙個字串,判斷該字串長度的奇偶性。相當簡單。author liuwen include include include include using namespace std int main else return 0 h a b game 題目鏈結 題...