1. 定义
在部分WEB应用里,应用程序会提供一些命令执行操作,如没有过滤好用户输入的数据,就有可能产生命令执行漏洞 从而执行有危害系统命令。
2. 漏洞类型
a. 代码审计方面的命令执行
一般涉及的函数如下:
${}执行代码
eval
assert
preg_replace
create_function()
array_map()
call_user_func()/call_user_func_array()
array_filter()
usort(),uasort()
b. 执行命令页面,需要绕过以执行命令
3. 命令衔接符
; 用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行。
| 上一条命令的输出,作为下一条命令参数。ctf里面:ping 127.0.0.1 | ls(只执行ls不执行前面的) 方式:command1 | command2
& ctf中用法 ping 127.0.0.1 & ls(先执行ls后执行ping) ,&放在启动参数后面表示设置此进程为后台进程 方式:command1 & 。默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作, 对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。
&& 命令之间使用 && 连接,实现逻辑与的功能。 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
|| 命令之间使用 || 连接,实现逻辑或的功能。 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。 这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
4. 绕过技巧
a. 绕过空格
{cat,flag.txt}
cat${IFS}flag.txt,此处的{IFS},可以改成(IFS)与<IFS>,都可以绕过空格,在linux中,IFS是分割符的意思,默认为空格
cat$IFS$9flag.txt
cat<flag.txt
cat<>flag.txt
浙公网安备 33010602011771号