第四屆上海大學生資訊保安比賽 web2

2022-08-17 22:30:18 字數 2576 閱讀 8880

這道題目是一道**審計題

原始碼:

題目思路是:變數覆蓋,反序列化漏洞

看到原始碼裡面有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 題目鏈結 題...