目录
定场诗
道德三皇五帝,功名夏后商周。五霸七雄闹春秋,秦汉兴亡过手。
青史几行名姓,北邙无数荒丘。前人田地后人收,说甚龙争虎斗。
豪杰千年往事,渔樵一曲高歌。乌飞兔走疾如梭,眨眼风惊雨过。
妙笔龙韬虎略,英雄铁马金戈。争名夺利竟如何,必有收因结果。
引言
善守者,藏于九地之下;善攻者,动于九天之上。
Command Injetion,顾名思义,命令注入,即正常执行命令时,由于没有过滤或者过滤不严谨,可以通过一些分隔符技巧来一次执行多条指令查询一些非本权限的信息。
0x1 命令介绍
执行命令时,常用的连接符有&& & || | ;
&& | 只有当前项命令执行成功后,才会执行后项命令 |
& | 无论前项命令是否执行成功后,都会执行后项命令 |
|| | 只有当前项命令执行失败后,才会执行后项命令 |
| | 无论前项是否执行成功,只执行后项命令 |
; | 用于连接多个命令 |
0x2 环境介绍
服务器端:win7 ;phpstudy +DVWA;192.168.1.254
攻击端:kali;192.168.1.2
0x3 Low级别:小试牛刀
进入登录页面,这里使用账号的是admin,密码是password。
安全等级改为low。
点到Command Injected,发现让输入一个ip地址。那就输入一个192.168.1.254试试,这时发现竟然乱码了。
解决问题其实很简单,这是因为网站对中文的编码格式有问题,在dvwa的安装目录下改一下编码格式就能解决。
在C:\PhpStudy\PHPTutorial\WWW\DVWA\dvwa\includes中打开dvwaPage.inc.php,将306行这里的UTF-8改成GB2312就行啦。
刷新一下网页,发现正常啦,这是一个ping命令。
先尝试一下&&,输入192.168.1.254&&time,成功执行两条命令。
再输入192.168.1.254&time,也成功执行两条命令。
输入a||time,因为只有当前项命令执行失败的时候才会执行后项,这里成功执行后项命令。
输入192.168.1.254|time,无论前项是否执行成功,只执行后项命令。
到这里我们基本上可以判断,low级别对输入没有做任何的过滤和限制,查看网页源码,也确实是这样的。
0x4 Medium级别:聊胜于无
安全级别调成中级,看一眼网站源码,发现仅仅多了对&&和;的过滤,对于&,|和||没有过滤,low级别的操作依然有效,这里就不再重复了。
将&&转译成了空,;也转译成了空,那&;&这种组合刚好可以完美绕过,试一下,成功。
0x5 High级别:不过如此
看一眼High的网页源码,和medium没有什么本质区别,只是黑名单的数量增加了,但是思路不变,仍然是找到一些没有被转译的组合进行注入。
对于“|”符号后面加一个空格进行过滤,却没有对一个空格后面一个“|”和单独的“|”进行过滤,所以以此为突破口,分别尝试一下192.168.1.254 |time和192.168.1.254 || time。(注意空格)
0x6 Impossible:典范之作
看下Impossible的网页源码,此时的防御机制已经不再是采取简单的黑名单的方式,首先使用了token来核对请求,其次对ip的输入进行了严格限制,以及对输入的内容有严格的检查,是安全网站的典范之作。