网鼎杯2018----fakebook(将数据序列化存储到数据库然后读出)

关于前期的信息收集:

 

源码泄漏user.php.bak和flag.php (如果有机会尝试读取这个文件)这两个有用的。

查看源码泄漏中对blog的过滤部分,然后通过join页面随便输入一个符合规定的blog完成我们的注册。

然后随便点击几下,发现http://61.147.171.105:61712/view.php?no=1这里进行了传参数。

对其进行sql注入测试。改为 ?no=2-1与原页面一样内容,说明是数字型注入。

然后就是测试哪些被过滤,哪些没被过滤,发现union/**/select没有被过滤。当然我在这里测试了盲注,最终以失败告终(这里就不说了),师傅们可以继续试试。

当然我们要进行判断字段数量,可以通过order by 或者直接union/**/select 1,2,3,4。-------发现2号回显位置。

解法1:由于我们知道flag.php的存在和位置,因此通过注入读取文件即可。

查权限啊,版本信息啊等等。发现我们是root用户,这样以来我们直接就可以读取文件内容了(flag.php)。payload:?no=-1 union/**/select 1,(load_file('/var/www/html/flag.php')),3,4 然后查看源码即可。flag.php的具体位置,我们看题目中有一些报错可以很明显的发现如下图

 

 解法2:

我们通过union/**/select往常注入方式,将里面的表名,字段名,字段具体值全部查询出来,发现了一个4号字段data的数据是序列化之后的

 

 结合源码泄漏中的get函数和getBlogContents函数,然后结合页面中的内容如下图,

 

可以推断出,该服务器将我们输入的数据进行了序列化存储在数据库当中的data字段中,然后调用了类中的函数将我们的blog内容进行反序列化读取,并且显示在页面当中。因此我们可以通过blog这个输入点进行一些协议的使用例如file协议读取文件。当然他的函数中对blog进行了严格过滤。

因此这里我们通过如下payload进行操作:

?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":1:{s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

然后打开源码即可看到结果。

 

 

总结:

1.sql注入 ----绕过过滤,读取文件。

2.反序列化

 

posted @ 2022-10-06 17:42  hithub  阅读(42)  评论(0编辑  收藏  举报