- 搭建靶场
前提条件:主机上已搭建好docker环境
docker pull mcc0624/cmd:latest
sudo docker run -p 18022:22 -p 18080:80 -p 18081:81 -p 18082:82 -p 18085:85 -i -t mcc0624/cmd:latest bash -c '/etc/rc.local; /bin/bash'
二、先了解一些用于命令执行的函数
1.System:2.Exec:3.Passthru:4.Shell_exec:5.``:6.Popen:7.Proc_open:8.Pcntl_exec:
0x01 常见命令执行危险函数
system函数:
其余命令在操作上和system使用方式大致相同但是其函数的具体使用方式还需要自己具体了解
Exec:的回显方式是数组
Popen:返回的是一个变量需要将变量打印出来才能看到结果
注:pcntl_exec函数需要linux 的插件需要在Linux先将插件进行配置
2.0x02 过滤命令执行函数
虽然过滤了部分函数但是可以使用passthru进行命令执行
3.0x02 过滤命令执行函数这是一个是(lixx_81文件下的)
修改配置文件进行命令拼接
LD_PRELOAD它可以影响程序的运行时的远程连接可以修改LD_PRELOAD文件来生成木马进行命令执行
根据提示将能用的代码都禁用了
进入题有一个后门可以用蚁剑中的插件进行一键getshell
因为这个靶场没有限制权限所以可以看到根目录下的文件但是如果使用命令查看却不行
但是在蚁剑中有一个可以直接绕过这个函数的插件
得到flag
3.0x03 命令连接符
命令拼接符有:; & && | ||
&&要求前面的命令执行成功
|将前面输出的内容作为后面函数的执行参数,前面和后面的参数都会执行但是只输出后面的函数
||和if函数相同如果前面函数执行成功则后面函数就不会执行
;前面函数不影响后面函数的执行情况
4.0x04 过滤空格
绕过方法
- 用大括号绕过如{cat,flag.php}
- $IFS和${IFS}以及$IFS$9来绕过
- 重定向字符绕过>,<>
- %09,%20绕过
5.0x05 文件名过滤
绕过方法:
- 通配符绕过?,*
- ‘’和””绕过
- 反斜杠绕过
- 特殊变量$1到$9、$@和$*
- 内联执行
- 环境变量
6.0x06 文件读取命令过滤
可以从其他资料中了解命令过滤
grep:在文本中查找指定字符串
passthru("grep fla /fla*");
8.0x08 命令盲注
直接使用poc进行爆破
9.0x09 长度过滤
直接使用poc进行爆破
10.0x10 无参数命令执行
用getallheaders()注意此函数用于php7.+然后
Poc=?code=eval(pos(getallheaders()))
Getallheaders()会返回当前请求的数据可以通过修改请求包来进行命令执行
11.0x11 无字母数字
- 异或运算
- 自增运算
- 取反运算