刷题 [网鼎杯 2018]Fakebook

解题思路

首先登陆页面发现是这样的:

查看源码

源码很正常,也没有什么特别的

web目录扫描

我用的是dirmap工具扫描,扫描结果保存在一个txt文件中,结果可知没什么后台。

robots.txt

发现有/user.php.bak

下载后

审计源码

直接是一个UserInfo类,三个属性,get函数中存在ssrf,且没有过滤。curl可用file协议,blog属性调用了get函数,所以这里使用file协议读取文件。file:///var/www/html/flag.php

正常解题

首先肯定要join,即注册一个用户

提示注册成功。

get注入

注册后发现可以点击自己的username,点击之后,观察url可能存在get注入。sqlmap跑一下。sqlmap跑不出来,手动检测,是数字型注入。union select 发现有waf,用/**/即可绕过。union /**/ select.回显位置是第二位,往下注注注。

数据库名:fakebook 表名:users 列名:data ,发现是序列化的数据,可知对我们注册的姓名,年龄,博客地址进行了序列化

并且发现爆出路径:/var/www/html/

反序列化

可以利用的变量在构造函数中,反序列化对象会自动执行构造函数。所以我们编写脚本,将需要构造的ssrf放在blog属性中,让其在反序列化时被调用

O:8:"UserInfo":3:{s:4:"name";s:1:"a";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

因为blog在第四位,所以paylaod:

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

注入后blog栏显示file:///var/www/html/flag.php,此时即代表注册成功。查看源码:

iframe标签中读取了flag.php中的内容。flag即出现

总结思路

核心思路:

  • 通过注入发现data的数据是序列化的
  • 通过后台获取源码,代码审计存在可利用的ssrf点
  • 结合反序列化和ssrf,保证bypass可以被利用,读取flag.php中的flag

知识点

  • ssrf
  • sql注入
  • 反序列化漏洞
原文地址:https://www.cnblogs.com/karsa/p/12652311.html