攻防世界-Web高手进阶区-ics-05

前言

不知道网上谁说的攻防世界里的题目对萌新很友好,我只能说友好你mmp。我现在做攻防世界已经从每天一个 新姿势 变成每题一个新姿势。我已经好久没有在不看WP的情况下把题目做出来了,真的是每一题的WP都能教会我不同的知识点。虽然做不出题的挫败感很强,但是学到了新姿势还是很nice的。

WP

首先按照题目的意思进入设备维护中心,看到了数据接口请求异常,这时候心里多少有些感觉,可能和输入有些关系,但是并没有发现输入框,这时候高手多少已经想到URL里的输入,甚至想到了文件上传,而我这样的萌新还在傻傻的dirsearch扫目录,最后一无所获。
偶然我点了左上角的云平台设备维护中心,但是页面没有变化,这时候发现URL发生了变化,出现了?page=index,这时候发现了输入点。
然后我尝试了一些输入,在经过大量输入的尝试下,我发现不支持符号,只有数字和字母,这打消了我SQL注入,XSS,甚至直接system(“ls”)的想法。然后我就陷入了迷茫之中,也就止步于此了。

看完WP才知道我又没有碰触到这题真正的考点。我们在出现?page=index之后可以尝试?page=index.php,发现页面出现了ok。这时候高手多少已经联想到了文件包含。联想到文件包含,就会想到使用php封装协议。先使用php://filter。

php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字,filter,可以很容易想到这个协议可以用来过滤一些东西;
具体的使用可以参考https://blog.csdn.net/destiny1507/article/details/82347371

我们构造?page=php://filter/read=convert.base64-encode/resource=index.php,就可以获得index.php的源代码的base64编码形式。之后再解码,就可以获得index.php的源码,进行代码审计。

还是那句话,代码审计是硬伤。我在知道了x-forwarded-for为127.0.0.1是一个漏洞之后,更改请求之后又不知道该怎么办。虽然输入了pat,rep,sub,但是只是进行了替换,然后就没有代码执行了呀,这又该怎么利用呢?

这里其实又是一个很关键的知识点,就是preg_replace()这个函数。
在这里插入图片描述
表面上看就是简单的按照pat的正则表达式来进行替换,但是这个函数有一个危险的地方:

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

示例:

preg_replace("/test/e",$_GET["h"],"jutst test");

如果我们提交?h=phpinfo(),phpinfo()将会被执行(使用/e修饰符,preg_replace会将 replacement 参数当作 PHP 代码执行)。这个正则被正确的匹配到,在进行替换的过程中,需要将$_GET[“h”]传入的String当作函数来运行,因此phpinfo()被成功执行。

代码如下:

<?php
preg_replace("/test/e",$_GET["h"],"jutst test");
?>

访问的url:?h=phpinfo()就会触发phpinfo()的执行。

知道了这个点之后,构造就很简单了。

http://220.249.52.133:37214/index.php?pat=/feng/e&rep=system("ls")&sub=feng
http://220.249.52.133:37214/index.php?pat=/feng/e&rep=system("cd s3chahahaDir;ls")&sub=feng
http://220.249.52.133:37214/index.php?pat=/feng/e&rep=system("cd s3chahahaDir;cd flag;ls")&sub=feng
http://220.249.52.133:37214/index.php?pat=/feng/e&rep=system("cd s3chahahaDir;cd flag;cat flag.php")&sub=feng

最后需要注意的是,需要用burp抓包来看响应,因为最后的flag是在php的注释里面的,你在网站里打开后会没有,查看源代码也只是前端源代码,看不到flag。

后记

这题的知识点,一个是php://filter,一个是preg_replace的安全问题。又学会了新姿势!

猜你喜欢

转载自blog.csdn.net/rfrder/article/details/108419699