在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用 代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代 码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏 洞。同样调用系统命令处理,将造成命令执行漏洞。
各种绕过
常见管道符
windows
- “|”:直接执行后面的语句。
- “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
- “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
- “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
linux
- “;”:执行完前面的语句再执行后面的语句。
- “|”:显示后面语句的执行结果。
- “||”:当前面的语句执行出错时,执行后面的语句。
- “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
- “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
空格过滤
$
例如
cat flag.txt
cat${IFS}flag.txt
重定向符
例如
cat<>flag.txt
cat<flag.txt
黑名单绕过
拼接
例如
a=c;b=at;c=fla;d=g.txt;$a$b $c$d
base64编码
例如
`echo "Y2F0IGZsYWcudHh0Cg=="|base64 -d`
内敛执行绕过
`命令`和$(命令)都是执行命令的方式
反引号``是命令替换,命令替换是指Shell可以先执行``中的命令,将输出结果暂时保存,在适当的地方输出。语法:`command`
常见函数
代码执行函数
- eval():把字符串作为PHP代码执行
- assert():断言
- call_user_func():把第一个参数作为回调函数
- call_user_func_array():调用回调函数,并把第一个数组作为回调函数的参数
- array_map():为数组的每个元素应用回调函数
命令执行函数
- system():执行外部程序并显示输出
- exec():执行一个外部程序
- shell_exec():通过shell环境执行命令,并将完整的输出以字符串的方式返回
- passthru():执行外部命令并显示原始输出
- pcntl_exec():在当前进程空间执行指定程序
``反引号():实际调用的shell_exec()函数

Comments NOTHING