ctfshow web5 php,CTF练习——WEB(5)

1、never   give  up

查看源代码,发现1p.html

ecfd6e1b2a37

进入1p.html看看

ecfd6e1b2a37

发现一串base64的密文,解密后

ecfd6e1b2a37

直接去访问f4l2a3g.txt

ecfd6e1b2a37

flag{tHis_iS_THe_fLaG}

2、welcome   to  bugkuctf

查看源代码

ecfd6e1b2a37

分析一下代码

1、三个传参

2、$user存在且不能为空

3、读取$user文件,内容为welcome   to  the  bugkuctf

4、$file要求为hint.php,将其导入

利用php://input:

当传进去的参数作为文件名变量去打开文件时,可以将参数php://传进,同时post方式传进去的值作为文件内容,供php代码执行时当作文件内容读取

ecfd6e1b2a37

发现并没有什么特别的,利用一下文件包含

ecfd6e1b2a37

base64解码得到

ecfd6e1b2a37

经典的_toString事件,但是没有触发条件,肯定是index.php还藏着东西,于是查看

ecfd6e1b2a37

解码

ecfd6e1b2a37

从上面获取的源码可得到以下信息:

(1)hint.php中提示flag.php,index.php中利用preg_match()正则表达式过滤掉了flag

(2)hint.php中定义了一个类Flag,其中有个__toString方法,这个方法可以理解为将这个类作为字符串执行时会自动执行的一个函数

(3)__toString方法执行时,将变量$file作为文件名输出文件内容,结合提示flag.php,猜测屏蔽的flag.php文件在这里打开

(4)在index.php源码中看到了$password的作用

这里应该是利用$password

前面提到Flag方法当作字符串执行时,会自动执行__toString方法,注意到echo函数,只能输出一个或多个字符串,所以只要$password为Flag类型的数据,且其中string类型的变量$file为flag.php

serialize——产生一个可存储的值的表示

unserialize——从已存储的表示中创建PHP的值

自己写个php文件:

ecfd6e1b2a37

执行后得到

ecfd6e1b2a37

将其作为参数$password传进去,抓包可得:

ecfd6e1b2a37

flag{php_is_the_best_language}

3、过狗一句话

ecfd6e1b2a37

猜测是直接利用一句话

根据题目提示应该是要给s赋值

尝试http://120.24.86.145:8010/?s=phpinfo()

说明s可以输出我们输入的结果

ecfd6e1b2a37

发现成功执行

于是尝试能否执行cmd命令

http://120.24.86.145:8010/?s=system(%27ls%27)

返回空白页面,没有任何信息说明执行失败

猜测是权限被控制了,于是用另一种方法来读取文件(php读取文件列表的方法)

ecfd6e1b2a37

发现flag.txt

然后读取flag.txt即可

ecfd6e1b2a37

http://120.24.86.145:8010/?s=show_source(%22flag.txt%22)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值