剛剛做了實驗吧的題目,現在整理一下
寫出解題思路,希望能夠幫助到那些需要幫助的人
所有的wp都是以一題一篇的形式寫出
主要是為了能夠讓讀者更好的閱讀以及查找,
希望你們不要責怪!!共勉!!!
永遠愛你們的————新寶寶
拐彎抹角分值:10
- 來源: cwk32
- 難度:易
- 參與人數:7523人
- Get Flag:2936人
- 答題人數:3047人
- 解題通過率:96%
如何欺騙伺服器,才能拿到Flag?
格式:CTF{}
解題連結:
http://ctf5.shiyanbar.com/indirection/

解題思路:這一題的代碼比較有意思,并且一開始看到代碼
并沒有多少思路,隻是看到一些大佬寫的解題思路之後就會發現
這個是屬于僞靜态,現在我們需要了解一下僞靜态的知識:
https://baike.baidu.com/item/%E4%BC%AA%E9%9D%99%E6%80%81/2234695?fr=aladdin就會發現這個百度,好像看的不太懂,我就總結一下下:
僞靜态:
url中含有xxxx.php/xx/x,那麼.php後的xx就會被當成參數名,x會被當成參數
http://ctf5.shiyanbar.com/indirection/index.php/user/index.php,雖然在index.php後面還加上了一些東西,
但是這個user會被解析成參數名,而index.php則會被解析成user的值
就是這個意思,接下來看看代碼就會發現,這個出題人很善良,畢竟解釋的很清楚:
<?php
// code by SEC@USTC
echo '<html><head><meta http-equiv="charset" content="gbk"></head><body>';
$URL = $_SERVER['REQUEST_URI'];
//echo 'URL: '.$URL.'<br/>';
$flag = "CTF{???}";
$code = str_replace($flag, 'CTF{???}', file_get_contents('./index.php'));
$stop = 0;
//這道題目本身也有教學的目的
//第一,我們可以構造 /indirection/a/../ /indirection/./ 等等這一類的
//是以,第一個要求就是不得出現 ./
if($flag && strpos($URL, './') !== FALSE){
$flag = "";
$stop = 1; //Pass
}
//第二,我們可以構造 \ 來代替被過濾的 /
//是以,第二個要求就是不得出現 ../
if($flag && strpos($URL, '\\') !== FALSE){
$flag = "";
$stop = 2; //Pass
}
//第三,有的系統大小寫通用,例如 indirectioN/
//你也可以用?和#等等的字元繞過,這需要統一解決
//是以,第三個要求對可以用的字元做了限制,a-z / 和 .
$matches = array();
preg_match('/^([0-9a-z\/.]+)$/', $URL, $matches);
if($flag && empty($matches) || $matches[1] != $URL){
$flag = "";
$stop = 3; //Pass
}
//第四,多個 / 也是可以的
//是以,第四個要求是不得出現 //
if($flag && strpos($URL, '//') !== FALSE){
$flag = "";
$stop = 4; //Pass
}
//第五,顯然加上index.php或者減去index.php都是可以的
//是以我們下一個要求就是必須包含/index.php,并且以此結尾
if($flag && substr($URL, -10) !== '/index.php'){
$flag = "";
$stop = 5; //Not Pass
}
//第六,我們知道在index.php後面加.也是可以的
//是以我們禁止p後面出現.這個符号
if($flag && strpos($URL, 'p.') !== FALSE){
$flag = "";
$stop = 6; //Not Pass
}
//第七,現在是最關鍵的時刻
//你的$URL必須與/indirection/index.php有所不同
if($flag && $URL == '/indirection/index.php'){
$flag = "";
$stop = 7; //Not Pass
}
if(!$stop) $stop = 8;
echo 'Flag: '.$flag;
echo '<hr />';
for($i = 1; $i < $stop; $i++)
$code = str_replace('//Pass '.$i, '//Pass', $code);
for(; $i < 8; $i++)
$code = str_replace('//Pass '.$i, '//Not Pass', $code);
echo highlight_string($code, TRUE);
echo '</body></html>';
這個我們可以根據他的要求:
根據這三個要求就會得到:
http://ctf5.shiyanbar.com/indirection/index.php/a/index.php
得到最後答案:CTF{PSEDUO_STATIC_DO_YOU_KNOW}
您可以考慮給部落客來個小小的打賞以資鼓勵,您的肯定将是我最大的動力。
作者:
落花四月出處:
https://www.cnblogs.com/lxz-1263030049/關于作者:潛心于網絡安全學習。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接.
特此聲明:所有評論和私信都會在第一時間回複。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!