php eval ctf,ctfhub技能树_web_RCE之eval、文件包含

这次我们来看看RCE(远程代码/命令执行)吧。由于篇幅限制,这篇文章不包含命令注入,命令注入我会在另一篇文章中详细的记录。

eval执行

82b588594a9dec643aafadc8376091ef.png

打开题目,可以看到网页的源代码

e6f6c392e79e523db6f7369a7d7bebfc.png

通过代码可以看到,这就是典型的web后门,配置中国蚁剑

de71dac26cd1aa6bf39087a57cd936b4.png

进入后台,获取flag

0b593d286b62c518bb238734894a5ad3.png

文件包含

c107313f81b96251cfb7f190e1ed4d4f.png

看看代码:

ef8282e64bd0fa492b055b64ff29ac4e.png

strpos(string,find,start) 函数查找字符串在另一字符串中第一次出现的位置

参数

描述

string

必需。规定要搜索的字符串。

find

必需。规定要查找的字符串。

start

可选。规定在何处开始搜索。

返回值:

返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。

注释:字符串位置从 0 开始,不是从 1 开始。

可以看到如果get传入参数file的值开头不为xflag(x为任意字符),则执行include()函数。

include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。

服务器后台有一句话木马shell.txt,因此我们的目标就是让服务器执行shell.txt中的语句。所以file的值为shell.txt

看看shell:

3842cc731984842a644a301178b1e275.png

则shell要传的参数是ctfhub:

5c538d9393d9e9ec9e303251e06ee348.png

查找flag:

find / -name flag*

2dc95f9f510c798f045ad4ace7962397.png

得到flag:

300fbf14ade943ec049e8235521c3a96.png

php://input

4e0aa1126119fb24a6273a11de5a34a8.png

首先看代码:

8c80c4e248e4006a06233ad54a6257cf.png

可以看到如果get的参数file前六个字符为”php://“则执行include函数

看看phpinfo

b79cc98956ecae2772bcdf0feec56444.png

可以看到allow_url_include是On,说明可以使用php://input伪协议。

php://input 是个可以访问请求的原始数据的只读流。其实说白了它就是用来获取post内容的,但是其实只要你把内容写到请求包中,post和get都能获取。

那我们就通过这个伪协议和精心构造的请求包来获取我们想要的信息(注意此时虽然我是get请求而不是post,但由于我的包中有内容,所以伪协议依然是接收到了):

1d6feed3d351fd818ec8056dd97a599c.png

这样我们就可以来找我们要的flag了

2fc90bf0e3e78f7f0407ca34aa46adb0.png

有了flag的路径,就可以得到flag了。

df9d2187e102cb880cccb5b57bb73df6.png

远程包含

3d36413cc54600f8431b3d1f8750fde8.png

看代码:

8f25938d58cf4cb16dbe632240058e93.png

这个题的解法和上一题php://input一模一样,不再赘述。

249c6cdb05185d1fc9b744ccc2846732.png

读取源代码

9be8e49d3f5618a2d2b303815fd2dc7c.png

代码审计:

bea35a7c96b3b20b6545391765fa7f2d.png

首先尝试php://input,发现没有返回结果

a238a21a4f5cfb41504334e6c7f59bc5.png

测试了好多遍都无果,那看来是没法用input了。再看题目,题目告诉我们了flag的路径,于是我们可以用另一条伪指令php://filter来进行读取

php://filter是一种元封装器, 设计用于数据流打开时的筛选过滤应用。简单理解就是个可以读取数据的过滤器。我们可以用它选择想要进行操作并读取的内容。

php://filter 目标使用以下的参数作为它路径的一部分。 复合过滤链能够在一个路径上指定。详细使用这些参数可以参考具体范例。

名称

描述

resource=

这个参数是必须的。它指定了你要筛选过滤的数据流。

read=

该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。

write=

该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。

任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

关于php://filter更多的妙用可以看这个大佬的文章。

知道了php://filter的用法,我们就可以读取flag了。

df43ce4fa735e48ec6e69120b9ba21e7.png

关于伪协议部分,这里是官方的文档。

至此,我们初步了解了文件包含和eval执行,解锁了对应的技能树,下一步,我们就来看看命令注入吧。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值