XCTF ics-05 wp

2021.1.11
菜鸡今天又来水题了
【狗头】
以后决定,先把题解写好,然后再总结知识点,不然战线拉得太长效率也不高。

Writeup

首先打开题目环境:
在这里插入图片描述
本以为很高大上,结果就是一个简陋的不能再简陋的前端页面,一个简单的图片,加上几个点都点不了的导航栏,点了一圈,发现只有设备维护中心能点进去。
在这里插入图片描述
也是一个简陋的页面,直接F12,看到了?page=index,可以GET传入名为page的参数。根据大佬wp的思路提醒我,应该自然的联想到可能存在利用文件包含读取网页源代码的漏洞,于是构造payload:
在这里插入图片描述
这时index.php文件的源代码就以base64编码的格式返回到页面上,我们查看源代码:
在这里插入图片描述
对其进行base64解码,即可得到PHP源码:

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
    
    

    echo "<br >Welcome My Admin ! <br >";

    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];

    if (isset($pattern) && isset($replacement) && isset($subject)) {
    
    
        preg_replace($pattern, $replacement, $subject);
    }else{
    
    
        die();
    }

查看源代码我们知道,有三个参数pat,rep,sub。简单的说就是再subject里查找是否有pattern格式的字符串或数组,然后用replacement代替。
这时候重点来了,就是preg_replace()这个函数,存在/e漏洞,会对PHP代码进行执行。
还有一个要注意的SERVER中,X-Forwarded-For这个请求头一定要是127.0.0.1。
在burpsuite中抓包,然后send to repater,先把http请求头加上,然后构造payload如图,先测一下ls
在这里插入图片描述

根据提示找到不一样的目录,因为flag可能藏在里面,所以我们查看s3chahahaDir这个目录,注意要对空格和and符号进行URL编码。
在这里插入图片描述
果然,看到了flag文件夹,然后进入flag
在这里插入图片描述
看到了flag.php,然后cat flag.php就能得到flag啦!
在这里插入图片描述
又到了每日艰难的知识点总结环节【狗头】

  • ?page=
  • 如何想到文件包含?nikto
  • 文件包含漏洞
  • php://filter
  • base64编码解码
  • X-Forwarded-For
  • preg_replace()的/e漏洞
  • system()函数书写

nikto

nikto是一个Web服务器扫描仪,适合短时间内对Web服务器进行目标扫描,并发现漏洞,但是他不是隐藏的扫描,意味着每次扫描都会被记录到对方的服务器日志的高级防火墙中。
在这里插入图片描述
最终发现了,形如这样的扫描结果,这个就比较好理解了,属于文件包含漏洞。
(小白没啥经验,得多看看工具咋用)
在这里插入图片描述

php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
简单的说,可以理解为经常用它进行base64编码,可以运用多种过滤器(字符串/转换/压缩/加密),经常用于读取文件或源码。

php://filter/read=convert.base64-encode/resource=file://文件路径

对应的知识应该还有文件包含漏洞PHP伪协议,但是这两个稍显重要,篇幅应该略长,日后专门写。【狗头】

preg_replace()

在这里插入图片描述
简单描述为:

preg_replace($pattern, $replacement, $subject)
//作用:搜索subject中匹配pattern的部分, 以replacement的内容进行替换。
$pattern:       要搜索的字符串或字符串数组,是一个正则。
$replacement:   用于替换的字符串或字符串数组。
$subject:       待替换的目标字符串或字符串数组。

一句话就是如果pattern中带着/e,并且pattern和subject的内容一致,则会直接执行repalcement的代码

base64编码

在这里插入图片描述
下面即为解码后的PHP源代码。

Guess you like

Origin blog.csdn.net/weixin_45253216/article/details/112473397