欢迎新同学的光临
… …
人若无名,便可专心练剑
我不是一条咸鱼,而是一条死鱼啊!
0x01 前言
XCTF Web 练习题地址:https://adworld.xctf.org.cn/
难度系数: 一星
题目来源: Cyberpeace-n3k0
题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗?
常见命令拼接符:
• && :执行两个命令,若前面出错,后面不会执行
• & : 执行两个命令,若前面出错,后面还是会执行
• || : 执行正确的那个命令,前面的失败,后面也会执行,前面成功,后面不会执行
• | : 只会执行后面的命令
常见连接符 | 举例 | 效果 |
---|---|---|
; | A;B | 先执行A,再执行B |
& | A&B | 简单拼接,A B之间无制约关系 |
| | A|B | 显示B的执行结果 |
&& | A&&B | A执行成功,然后才会执行B |
|| | A||B | A执行失败,然后才会执行B |
命令执行漏洞是什么?
当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。
该题中,直接把用户输入的参数不经过过滤直接放在ping命令之后,而恶意攻击者可以在输入的参数中用&&或|或||截断,而执行下一个恶意命令
注:%0A 是换行符的url编码形式,有的时候可以用来绕过对以上常见的连接符过滤了的情况
0x02 解题思路
1)打开解题URL地址,给出如下图的内容,貌似是一个具有Ping 功能的页面
2)那么如下,输入127.0.0.1,Ping 一下本地的IP 看看能不能成功执行,并查看命令执行结果
如上图,发现能成功返回信息,而且开局就提示过没有WAF,此时大家应该也联想到能否使用命令拼接的方式来执行其它命令的思路了吧?
3)咋们打开浏览器,在文本框内输入127.0.0.1 | find / -name "flag*" (将 | 替换成 & 或 && 都可以)
,查找flag所在位置,尝试一下看看能否成功
4)执行成功,得到flag.txt存放的地址,我们如下,输入127.0.0.1 | cat /home/flag.txt
获取Flag
cyberpeace{6d947e9ef8352104082e9d173396ae60}
2.1 HackBar 工具POST提交方式获得Flag
首先获取文本框的参数的值是多少,然后再用POST 提交方式一步步获得Flag,我这里是直接输入了Flag 的地址直接获取的,你也可以一步步按照上述的操作步骤在HackBar 里面用POST 方式来查询试试
执行成功,获得Flag
或用Burp 抓包放到重放里,慢慢调试获得Flag的地址,或自己写一个import request 脚本去跑获得Flag的地址
我自横刀向天笑,去留肝胆两昆仑