攻防世界-web-ics-05

题目描述: 其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统
题目链接点进去如下:

可以看到界面上有一个设备维护中心,点击设备维护中心,跳转到如下界面

攻防世界-web-ics-05_第1张图片

再次点击,发现变成这样了

攻防世界-web-ics-05_第2张图片

1. 思路分析

从已知信息来看,就只有一个page参数可利用,且输入的参数如果是字符串和数字的话就会回显在界面上。尝试输入一些特殊字符,发现无回显,说明注入命令之类的方式大概率行不通。这种回显的问题和之前的一道题unserialize3有点类似,但是这里没有php源码。

前端也只有一个页面,没有其它额外的信息提供,到这里没有思路了,网上参考其它人的解法

攻防世界web进阶区ics-05详解_無名之涟的博客-CSDN博客

这里提到了使用php伪协议可以获取到源码(这个在知识面外了,了解这个充当知识积累)

攻防世界-web-ics-05_第3张图片

知道了关键点就ok了,获取到源码,然后根据源码逻辑进行绕过即可

2. 解题过程

2.1 先使用php伪协议获取源码 page=php://filter/convert.base64-encode/resource=index.php

攻防世界-web-ics-05_第4张图片

使用base64进行解码(Base64 编码/解码 - 在线工具),解码出来后关键代码如下:

攻防世界-web-ics-05_第5张图片 

2.2 分析源码,确定POC

不携带page参数的情况下,源码中存在几个点可以构造

a. X_FORWARDED_FOR头部字段必须是127.0.0.1

b. 会传入三个参数,pat, rep和sub,然后执行preg_replace函数进行字符串替换

我们先试试随机构造X-Forwarded-For以及pat, rep和sub,这个时候要去掉page,结果如下:

攻防世界-web-ics-05_第6张图片

既然进入到这里的逻辑了,那么该如何利用呢? 唯一的利用点就是preg_replace函数了,不过对这个函数不了解,不清楚该如何利用,搜索这个函数的漏洞(慎用preg_replace危险的/e修饰符(一句话后门常用)_php技巧_脚本之家),发现这个函数存在一个危险的/e修饰符,通过/e修饰符可以实现命令注入

攻防世界-web-ics-05_第7张图片

 2.3 通过preg_replace实现命令注入

既然知道了preg_replace有个/e参数,那么我们构造如下POC实现命令注入

GET /index.php?pat=/(\w )/e&rep=system('ls')&sub=abc

攻防世界-web-ics-05_第8张图片

从结果来看,存在回显,命令已经执行。

ok,既然存在命令执行,那没啥好说的,直接find我们的flag

GET /index.php?pat=/(\w )/e&rep=system('find / -name *flag*')&sub=abc

攻防世界-web-ics-05_第9张图片

这里第一行的应该就是我们要找的flag了,将其内容输出即可(经验证flag为第二个文件/var/www/html/s3chahahaDir/flag/flag.php)

GET /index.php?pat=/(\w )/e&rep=system('cat /var/www/html/s3chahahaDir/flag/flag.php')&sub=abc

攻防世界-web-ics-05_第10张图片

 最终获取到flag:cyberpeace{1ce2c80d4459c731bfe0fa97c2a007bf}

总结:这道题的关键点主要有三个,一个是通过php伪协议获取源码,一个是X-Forwarded-For头部字段伪造,还有一个是利用preg_replace的/e修饰符进行命令注入(PS:扩充了我的知识面)

你可能感兴趣的:(安全,web安全)