例行说明:
比赛过去很久了,才勉强有精力总结一下用到的知识点,主要是关于wp中一笔带过,讲的比较模糊的三个方面总结下。
0x01 comein题目关于parse_url函数漏洞(其实只是使用不当)
题目:
ini_set("display_errors",0);
$uri = $_SERVER['REQUEST_URI'];
if(stripos($uri,".")){
die("Unkonw URI.");
}
if(!parse_url($uri,PHP_URL_HOST)){
$uri = "http://".$_SERVER['REMOTE_ADDR'].$_SERVER['REQUEST_URI'];
}
$host = parse_url($uri,PHP_URL_HOST);
if($host === "c7f.zhuque.com"){
setcookie("AuthFlag","flag{*******");
1、先检测如果uri中 if(stripos($uri,".")) 就会结束,本意应该是不希望uri中出现点字符,但点在第0号位时,stripos函数返回值是0,if(0)不成立,就绕过了。。
2、第二个if是判断若这个uri不是个url,那么给它加上http://还有host还有uri,拼成一个url
3、用parse_url函数获取第二步拼接后$uri的Host,并判断是否等于特定值。
问题来了,怎么骗过parse_url函数,通过可控的uri部分,让整个被转换后识别出特定的host?
http://127.0.0.1/index.php
红色部分是可更改的uri,且第一个字符一定要是. 不然一开始就die了
(注意:改uri在burpsuite中改,不要在浏览器地址栏改,浏览器会把你的../自动忽略,可能有莫名bug)
我们先遵守第一条原则