sycsec的一道審計題目

2021-08-09 01:47:27 字數 1853 閱讀 2020

首先題目給出了源**

[php]view plain

copy

print?

<?php   

if(isset(

$_get

) && !

empty

($_get

))else

if(strpos

($path

,'..'

) > -1)  if(

strpos

($url

,'') === 0)else  

這個題目首先get方式獲取file和path引數,然後將file引數賦值給$url,path的值和upload/拼接後賦值給$path

其中$url的限制是在字串的開始必須出現

$path不能出現 ..

然後兩個引數傳遞進本題目的關鍵函式 

[php]view plain

copy

print?

file_put_contents

($path

, file_get_contents

($url

));  

這個**的意思是,從$url獲取內容然後寫入$path中

通過訪問 http://localhost/index.php?file=&path=2.php

頁面返回:console.log(upload/2.php update successed!)

同時在http://localhost/upload/2.php寫入了乙個php檔案,php的內容是:

可以看出,$url訪問了,然後把讀取到的內容寫入到了2.php裡面

因為返回的頁面可以被引數$path控制,所以我想到用ssrf在伺服器上寫個shell

我們先做個實驗,先訪問:http://localhost/index.php?file=&path=<?php phpinfo(); ?>

看返回的頁面:

可以看出返回的頁面有<?php phpinfo(); ?>

想想我們能不能把這個頁面寫入到upload乙個檔案裡面?

利用ssrf的原理訪問這樣的鏈結http://localhost/index.php?file=index.php?file=%26path=<?php phpinfo(); ?>&path=2.php

這裡我們利用$url這個變數訪問了index.php?file=&path=<?php phpinfo(); ?>

注意在url中&要變成%26

下面我們看看http://localhost/upload/2.php被寫入了什麼:

似乎沒有成功,因為是ssrf做了二次訪問,所以放在$path的引數也要做url二次編碼

然後這樣構造引數就好:

再訪問一次http://localhost/upload/2.php

一道this的題目

請問下面 中的this值指向的是全域性物件還是物件o?function f return c var o new f console.log o.constructor.name object這裡的this指向全域性物件,因為 c call without new。這裡用正常的方式呼叫的函式 c 所...

一道題目 intel

從序列中找四個四字子串形成十進位制數使之乘積最大 就是求四個最大的?我目前只想到如下辦法。這個題並不是關於複雜的演算法,其本意是要利用並行處理,但目前尚未考慮到 除了其中比較求最小值部分有希望用simd include int g teststring int main void int picke...

一道題目 移位

csdn上一道面試題 十進位制整數,計算對應的二進位制數包含多少個1,用位操作。int n 95625 int m 1 int num 0 for int i 0 i sizeof int 8 i cout num endl 讓1不斷移位去判斷與其對應位置是否為1 若是有符號整數 負數 原碼的補碼 ...