ics-06
进去以后发现只有报表中心可以进,然后看网址发现传递了id=1,试一下id=2没变化,想到用burp_suite中的intruder模块爆破一下。
在1-5000中爆破一下id试试,发现id=2333时长度不同。得到flag。
intruder模块四种攻击类型的介绍:
可以选择攻击类型(Attack type),共有四种类型可以选择,分别是:Sniper型、Battering ram型、Pitchfork型和Cluster bomb型。这里以两个要爆破的变量为例进行说明,只有一个要爆破的变量对于这四种攻击类型来说是没有区别的。
(1)Sniper型
只需要设置一个Payload set,在两个变量的位置逐一替换Payload,每次只替换一个位置,先替换前面再替换后面,如果你的Payload set中有两个Payload,那么在爆破时会发送四次请求。
(2)Battering ram型
只需要设置一个Payload set,在两个变量的位置同时替换相同的Payload,如果你的Payload set中有两个Payload,在爆破时会发送两次请求。
(3)Pitchfork型
需要设置两个Payload set,这时候两个变量的位置和两个Payload set是一一对应的关系。
(4)Cluster bomb型
需要设置两个Payload set,这时候每个位置的Payload将在Payload set中进行排列组合。在爆破时共要发送2*2=4个请求。
upload1
这是一个很明显的文件上传漏洞。
进去查看源码发现,需要上传后缀为.jpg或者.png的图片,我们创立一个新文件改后缀为jack.jpg,上传burp_suite抓包一下。
改包,插入一句话php木马,并且注意把filename改为jack.php,这样php代码才能执行。
上传成功后用蚁剑连接一下。得到flag。
ics-05
进去页面后发现只有设备维护中心可以打开,ctrl+u查看源码后得知存在page参数。
LFI漏洞的黑盒判断方法: 单纯的从URL判断的话,URL中path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼的时候,可能存在文件包含漏洞
联想到可能存在利用文件包含读取网页源码的漏洞, 利用php内置filter协议读取文件的代码。
解码后得到php代码:
代码审计得知,要修改X-Forwarded-For为127.0.0.1 。用burp抓包修改一下。
然后可以利用preg_replace函数的\e漏洞进行代码执行。
首先简单介绍一下preg_replace()函数
preg_replace($pattern, $replacement, $subject)
作用:搜索subject中匹配pattern的部分, 以replacement的内容进行替换。
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
关于/e漏洞
/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向
引用替换完之后)。
提示:要确保 replacement 构成一个合法的 PHP 代码字符串,
否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。
即:只要在subject中有要搜索的pattern的内容,当pre_replace的参数pattern输入/e的时候 ,参数replacement的代码当作PHP代码执行。
构造payload:?pat=/abc/e&rep=system("find%20-name%20flag")&sub=abcde
发现flag在./s3chahahaDir/flag。之后再使用cd命令,看看flag文件里内容 system("cd%20./s3chahahaDir/flag%26%26ls")。
注:%20代表空格,%26%26就是&&代表当前面命令执行成功时,继续执行后面的命令,读取s3chahahaDir文件夹内容.
发现了flag.php。
再次构造 system("cat%20./s3chahahaDir/flag/flag.php")
得到flag。
此题考查:
(1)用php伪协议里filter协议读取文件的代码.
(2)伪造XFF头.
(3)preg_replace函数\e模式的漏洞
(4)php中system()函数的正确用法