[ACTF2020 新生赛]Exec
坚持第7天了吧,这个题看的像命令注入,打开靶机

先是去看看源码

没啥问题与提示,那看来应该就是命令注入了,ping这个地方是命令注入漏洞最常出现的点,因为有ping就需要使用系统函数,有输入框,输入就可控,稍不注意就命令注入了,先尝试基础的,az,这么容易就注入了?

那说明过滤很少,这里先说明一下Linux命令连接操作符
- 和号操作符 (&) ‘&’的作用是使命令在后台运行。只要在命令后面跟上一个空格和 ‘&’。你可以一口气在后台运行多个命令。
- 分号操作符 (; ) 分号操作符使你可以一口气运行几个命令,命令顺序执行。
- 与操作符 (&&) 如果第一个命令执行成功,与操作符 (&&)才会执行第二个命令,也就是说,第一个命令退出状态是0,后面的才会执行。在UNIX里面,0表示无错误,而所有非0返回值都是各种错误。
- 或操作符 (||) 或操作符 (||)很像编程中的else语句。上面的操作符允许你在第一个命令失败的情况下执行第二个命令,但第一个命令成功则第二个不会执行
- 非操作符 (!) 非操作符 (!)很像except语句。这个命令会执行除了提供的条件外的所有的语句。这个是纯逻辑操作符,注入很少用
- 管道操作符 (|) PIPE在将第一个命令的输出作为第二个命令的输入时很有用。
- 优先操作符 () 指定优先级
- 连接符 () 连接符 ()如它名字所说,被用于连接shell中那些太长而需要分成多行的命令。可以在输入一个“\”之后就回车,然后继续输入命令行,直到输入完成。
由此可见,这个前面的ping命令显然是失败的,因为用&&注入无回显,使用&或者||有回显,我们现在的工作就是找flag的位置。因为直接ls发现没有flag,经过上面的连接符学习,我们可以构造如下payload去看根目录
payload=xxx||(cd ../../../&&ls)

可以看到正好有个flag在根目录下,使用cat命令去读就行

出了,这题主要是没过滤,连关键字过滤都没有,噢还看到一种更简单的方法
payload=111;cat /flag
利用多语句执行,知道路径之后直接带绝对路径读就行了,形似堆叠注入,总之这种题没过滤就是八仙过海各显神通,过滤一严格就是各种不会
之前看到的最严格的过滤是输入必须符合以下格式
xxx.xxx.xxx.xxx //这里xxx必须为数字
这样真的是一点办法都没有了,附上源码,其实好简单,但是注入一难也是非常难的,这也算是个入门题吧


浙公网安备 33010602011771号