本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
描述
由于业务需求,程序有可能要执行系统命令的功能,但如果执行的命令用户可控,业务上有没有做好限制,就可能出现命令执行漏洞。
相关工具
相关案例
writeup
空格在 bash 下,可以用以下字符代替空格
$IFS 在 linux 下表示分隔符,只有 cat$IFSa.txt 的时候, bash 解释器会把整个 IFSa 当做变量名,所以导致没有办法运行,然而如果加一个 {} 就固定了变量名,同理在后面加个 $ 可以起到截断的作用,而 $9 指的是当前系统 shell 进程的第九个参数的持有者,就是一个空字符串,因此 $9 相当于没有加东西,等于做了一个前后隔离。
比如测试 ping 功能的点,要求填写一个 ip 参数这样的题目,这个时候就需要测试截断符号,将你输入的 ip 参数和后面要执行的命令隔开。首先测试所有的截断符号:
利用截断符号配合普通命令简单问题基本就出来;例如:ip=127.0.0.1;cat /home/flag.txt 这样就可以达到同时执行两条命令的效果
这种绕过针对的是系统过滤敏感字符的时候,比如他过滤了cat命令,那么就可以用下面这种方式将cat先base64编码后再进行解码运行。
针对一些代码执行的场景,可以通过在 base64 中添加干扰字符的方式尝试绕过
php
python
linux 下创建文件的命令可以用 1>1
创建文件名为 1 的空文件
ls>1
可以直接把 ls 的内容导入一个文件中, 但是会默认追加
Linux
w 长度最短的命令
ls -t 以创建时间来列出当前目录下所有文件
文件列表以[ [ 换 行符] ]分割每个文件
引入 \
转义ls时的换行
换行不影响命令执行
成功构造任意命令执行,写入Webshell
避免命令用户可控
如需用户输入参数,则对用户输入做严格校验,如&&、|、;等