实验吧-拐弯抹角
拐彎抹角
原題鏈接
http://ctf5.shiyanbar.com/indirection/
分析
<?php // code by SEC@USTCecho '<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;//這道題目本身也有教學(xué)的目的 //第一,我們可以構(gòu)造 /indirection/a/../ /indirection/./ 等等這一類的 //所以,第一個(gè)要求就是不得出現(xiàn) ./ if($flag && strpos($URL, './') !== FALSE){$flag = "";$stop = 1; //Pass }//第二,我們可以構(gòu)造 \ 來代替被過濾的 / //所以,第二個(gè)要求就是不得出現(xiàn) ../ if($flag && strpos($URL, '\\') !== FALSE){$flag = "";$stop = 2; //Pass }//第三,有的系統(tǒng)大小寫通用,例如 indirectioN/ //你也可以用?和#等等的字符繞過,這需要統(tǒng)一解決 //所以,第三個(gè)要求對(duì)可以用的字符做了限制,a-z / 和 . $matches = array(); preg_match('/^([0-9a-z\/.]+)$/', $URL, $matches); if($flag && empty($matches) || $matches[1] != $URL){$flag = "";$stop = 3; //Pass }//第四,多個(gè) / 也是可以的 //所以,第四個(gè)要求是不得出現(xiàn) // if($flag && strpos($URL, '//') !== FALSE){$flag = "";$stop = 4; //Pass }//第五,顯然加上index.php或者減去index.php都是可以的 //所以我們下一個(gè)要求就是必須包含/index.php,并且以此結(jié)尾 if($flag && substr($URL, -10) !== '/index.php'){$flag = "";$stop = 5; //Pass }//第六,我們知道在index.php后面加.也是可以的 //所以我們禁止p后面出現(xiàn).這個(gè)符號(hào) if($flag && strpos($URL, 'p.') !== FALSE){$flag = "";$stop = 6; //Pass }//第七,現(xiàn)在是最關(guān)鍵的時(shí)刻 //你的$URL必須與/indirection/index.php有所不同 if($flag && $URL == '/indirection/index.php'){$flag = "";$stop = 7; //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>';題目的意思就是通過改變URL地址欄訪問index.php,但是限制了條件不能使用 ./ ../ \\ 而且只能使用小寫字母,不可以在php后加點(diǎn),
關(guān)鍵是不能直接是http://ctf5.shiyanbar.com/indirection/index.php
這里我們可以利用偽靜態(tài)技術(shù),使用http://ctf5.shiyanbar.com/indirection/index.php/index.php,index.php后的index.php會(huì)被當(dāng)做參數(shù)處理,所以服務(wù)器只會(huì)解析第一個(gè)index.php,滿足條件成功繞過。
URL偽靜態(tài)就是通過對(duì)動(dòng)態(tài)網(wǎng)頁(yè)進(jìn)行URL處理(重寫),從而實(shí)現(xiàn)看起來像是靜態(tài)URL頁(yè)面(而實(shí)際網(wǎng)頁(yè)目錄或路徑中沒有該頁(yè)面)的方法,表現(xiàn)形式主要是去掉動(dòng)態(tài)網(wǎng)頁(yè)QUERY參數(shù),還有可以讓URL看起來更加有序條理。舉個(gè)例子:
http://www.example.com/test.php?cate=soft&page=2,這是典型的動(dòng)態(tài)頁(yè)面。
經(jīng)過偽靜態(tài)處理,可能變成http://www.example.com/test/soft/index/2.html,如果有多個(gè)類似頁(yè)面,URL看起來就會(huì)更加舒服。
偽靜態(tài)技術(shù)在Wordpress、Discuz、Z-BLOG及各種CMS中都有運(yùn)用,偽靜態(tài)的目的無非是看起來更加舒服,據(jù)說對(duì)搜索引擎更加友好,天緣不懂SEO就不說了。
flag
CTF{PSEDUO_STATIC_DO_YOU_KNOW}
知識(shí)點(diǎn)
URL 偽靜態(tài)技術(shù)
總結(jié)
- 上一篇: 计算机软件安装检查工具,pc healt
- 下一篇: IT岗位说明书(岗位职责)