0x00 前言
这种命令行注入在pwn中出现的比较少,所以记录分享一下。
0x01 命令行注入介绍
熟悉web安全的话就知道,如果对特殊字符过滤不当,会引发sql注入或者xss等安全漏洞。其中,命令行注入较为严重,因为可以直接拿到漏洞程序当前权限的OSshell。
然而,命令行注入不仅在web中会出现,在C语言程序中,也会出现命令行注入的漏洞。比方说这道pwn题,就是调用system时,没有对输入数据进行\0截断以及对特殊字符处理不当而导致的。
命令行注入相对于其他二进制漏洞相比利用比较简单,比方说这道题,举个例子:
sprintf(&s, "du -sh lib/'%s'", v6);
system(&s);
其中设计初衷,v6应当是一个合法的文件名。但是如果攻击者恶意操控v6,比方说,让v6为:'&&/bin/sh'
进行sprintf拼接后,system所执行的命令为:
du -sh lib/''&&/bin/sh''
这里有两个linux命令行的知识:
&&,这是拼接两个命令,如果我们执行 command1&&command2,那么等价于先执行command1在执行command2。其中命令跟&&之间不必加空格。
在命令后不加空格的''(两个单引号)会被忽略,比如ls''等价于ls,/bin/sh'