[0CTF 2016]piapiapia1

知识点: 1. php代码审计

             2. php序列化字符串长度逃逸

开局进到这个页面,看着像sql注入,注入无果😅,不应该是sql注入吗_啊喂🙄.

扫一下他的目录吧~

有网站的源码,下载一下~

 

先看一下config.php.

出现了flag,可能后面会用到.

依次打开这些php文件,看看有什么敏感函数~

profile.php里有2处敏感函数.

update.php里有一处.

所以我们的思路就是通过file_get_contents()这个函数获取,config.php里的内容~

所以$profile['photo'] 这个内容就要为config.php

而$profile又是通过$user->show_profile($username)这个函数获得的

继续向前推~

$user这个对象在class.php里,是user的一个类.

这个对象调用的show_profile()这个function同时又继承了mysql类的filter方法和select方法.

filter 方法呢对 单引号 , \\ 进行替换为 下划线 , 其次又对 select , insert ... 替换为了 hacker

select 方法就是一个查询语句,并且返回第一行的结果.

那么我们就明白了,我们需要使查询的内容中对用的 photo 的内容为config.php.

profile.php的file_get_contents -> show_profile() -> class.php里的select() -> 数据库 -> class.php里的update() -> update_profile() -> update.php里调用传参。

既然知道了要查询到的内容,那么就找地方该插入数据了.

刚好有一个叫update.php 的文件

又指向了user类去看一下吧~

又调用了mysql类的update方法,去看一下~

是一个update的mysql语句~

再看一下我们插入数据经过下面代码处理

结果发现 photo 被md5 加密了, 我的天,那该怎么办?

于是我又盯上了photo前面的nickname, 由于我们传入的参数是经过序列化之后的,所以我们可以通过序列化的键值对逃逸来完成它.

再看一下update.php 对 nickname 有什么过滤的地方~

上面2个限制都可以通过数组来进行绕过~

我们就可以输入如下内容~

nickname[]=where";}s:5:"photo";s:10:"config.php";}

唉~

为什么构造的内容前面还有一个 " } " 呢?

 因为我们加的是数组看下面这个实例就明白了.

那么,此时我们的数组长度为39除了 where 多了34 位,我们要想办法把那 34 位去掉,这个时候就用到了filter.

由于where为5 为 ,而他会被替换成hacker为6位,所以我们只需要添加34个where就可以变成34个hacker刚好多处34位~

开始构造payload~

wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}

开始实操,首先访问register.php 注册一个账户~

 登录账户~

开始注入~

别忘了给nickname加上[]. 

点击Your Profile~

内容就是这个图片,用查看器看一下,由于进行了base64编码,还需要进行解码~

src="data:image/gif;base64,PD9waHAKJGNvbmZpZ1snaG9zdG5hbWUnXSA9ICcxMjcuMC4wLjEnOwokY29uZmlnWyd1c2VybmFtZSddID0gJ3Jvb3QnOwokY29uZmlnWydwYXNzd29yZCddID0gJ3F3ZXJ0eXVpb3AnOwokY29uZmlnWydkYXRhYmFzZSddID0gJ2NoYWxsZW5nZXMnOwokZmxhZyA9ICdmbGFnezUxYzY4MmE0LTRhODktNGJjMC1hOGM3LWMwMDY2YWEyYjdmOH0nOwo/Pgo="

解完之后出现flag~

求出flag,游戏结束~ 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值