您当前的位置:首页 > 电脑百科 > 安全防护 > 数据安全

一张图片也能SQL注入?

时间:2022-03-11 16:29:59  来源:  作者:合天网安实验室

作者:Lxxx

声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天网安实验室及原作者无关,本文为合天网安实验室原创,如需转载,请注明出处!

前言

最近在复盘SQL注入,看到有一个trick挺有意思的,这个trick主要利用后端程序会将文件exif信息插入数据库进行SQL注入

因此本篇文章会从题目解题,源码分析,底层调试这几个方面入手,如有纰漏,请多包涵。

什么是exif?

为了方便后面文章介绍这个trick,首先我们需要了解什么是exif?

其实exif是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。

例如生活中利用手机相机或者数码相机拍照的时候,exif会记录拍照时的一些属性,例如:光圈,焦距,拍照时间,拍照设备等等属性

题目解题

题目地址:你没见过的注入

题目地址获取:后台回复“注入”

首先打开题目,前面一些与本文无关的解题步骤就不赘述了,简要的概括一下就是:扫目录扫到robots.txt,进入修改密码页面,修改完成密码之后进入后台。

后台还是比较简单的,就是一个上传的页面

一张图片也能SQL注入?

 

选择文件进行上传即可,并且进行测试后发现,上传的文件都没有被过滤,即使是上传同一个文件,文件名也是不一样的,因此猜测这里使用了随机数md5的方式进行文件命名

一张图片也能SQL注入?

 

这一题文件名被随机数md5重命名,并且,所以文件名不是注入点,但是分析一下上方的列目录的文件,首先肯定是有数据库存储相关文件信息(上图中的filetype),因此查询一下php有哪些函数或者方法会有这样的功能,查询PHP官方手册后可以发现,其中finfo对象以及finfo_file函数是有这个功能的

一张图片也能SQL注入?

 

因此就可以大胆猜测在filetype会存在SQL注入,并且SQL语句应该是insert开头的插入语句

那么如何控制这个filetype呢?

我们可以使用file命令查看一个文件的信息,如下图所示

一张图片也能SQL注入?

 

这一个命令一出是不是就发现和上面那个页面的filetype十分相似了呢?

那么是否有工具可以控制这个filetype呢?有的,那就是exiftool

安装完成后,我们尝试在一个图片里加入SQL语句,这里我们假设题目的SQL语句如下(这个很需要经验,不过这里我就直接给出来了,做题的时候还是需要慢慢fuzz)

insert into columns('字段1','字段2','字段3') value('值1','值2','值3')

因此注入语句

123"';select if(1,sleep(5),sleep(5));--+

具体的exiftool的命令为

exiftool -overwrite_original -comment="123"');select if(1,sleep(5),sleep(5));--+" avatar.jpg

利用exiftool添加comment之后,使用file命令查看文件信息

一张图片也能SQL注入?

 

可以看到,命令已经成功注入到了comment中,上传该图片,就可以发现明显有延迟,所以命令注入成功。

之后拿flag就很简单了,利用into outfile写入一句话木马即可,这里就不赘述了。

那么,究竟是什么函数会导致这样的SQL注入呢?

抱着深究的心态把题目源代码拷贝下来进行分析(所有可以getshell的题目都可以把题目拿下来进行分析,可以学到更多的东西)

题目源代码分析

首先一些登录文件就不看了,直接看最重要的,会造成SQL注入的那几个文件(为了防止篇幅过长,我这里仅将关键代码进行展示)

$filename = md5(md5(rand(1,10000))).".zip";
$filetype = (new finfo)->file($_FILES['file']['tmp_name']);
$filepath = "upload/".$filename;
$sql = "INSERT INTO file(filename,filepath,filetype) VALUES ('".$filename."','".$filepath."','".$filetype."');";
  • 上方代码第一行就是前面说的,将随机数md5存储文件
  • 第二行这里使用到了finfo::file,这里便是我们的注入点
  • 第三行是目录的拼接
  • 第四行就是存在SQL注入的SQL语句
 if(MySQLi_num_rows($result)>0){
  while($row=mysqli_fetch_assoc($result)){
   echo "<li>";
   echo "filename:<a href='".$row["filepath"]."'>".$row["filename"]."</a> filetype:".$row["filetype"]."<br>";
  }
 echo "</li>";
}

这一段代码就比较简单,就是将存储的文件名列出来

那么造成注入的罪魁祸首就是这一行代码:

$filetype = (new finfo)->file($_FILES['file']['tmp_name']);

这里使用finfo::file方法,这个方法在PHP手册介绍如下,但是并不是很详细,后半部分将会对这一个函数进行底层代码跟踪分析。

一张图片也能SQL注入?

 

finfo::file底层跟进

finfo::file方法在ext/fileinfo/fileinfo.c中

其中finfo中有这么几个方法:

class finfo
{
    /** @alias finfo_open */
    public function __construct(int $flags = FILEINFO_NONE, ?string $magic_database = null) {}

    /**
     * @param resource|null $context
     * @return string|false
     * @alias finfo_file
     */
    public function file(string $filename, int $flags = FILEINFO_NONE, $context = null) {}

    /**
     * @param resource|null $context
     * @return string|false
     * @alias finfo_buffer
     */
    public function buffer(string $string, int $flags = FILEINFO_NONE, $context = null) {}

    /**
     * @return bool
     * @alias finfo_set_flags
     */
    public function set_flags(int $flags) {}
}

我们跟进finfo::file

我们在下方图中位置下三个断点

一张图片也能SQL注入?

 

将前面题目拉下来的源文件放在一个文件夹中进行调试

源文件如下:

将upload.php修改如下

$filename = md5(md5(rand(1,10000))).".zip";
$filetype = (new finfo)->file($_FILES['file']['tmp_name']);
$filepath = "upload/".$filename;
var_dump($filetype);
die(0);

开启调试,上传注入文件后程序便会停止在断点处

第一个断点处,421行,这个断点处调用包装器打开资源并返回流对象

一张图片也能SQL注入?

 

第二个断点处,431-432行,进入magic_stream,单步调试,监视ms以及ret_val

进入file_or_stream

一张图片也能SQL注入?

 

直接看file_or_stream的return

一张图片也能SQL注入?

 

跟进file_getbuffer,下方其实就可以看到ms->o.buf已经获取到了exif信息

一张图片也能SQL注入?

 

后面的就不继续跟进了,但是可以肯定的是file()方法可以检测图片的EXIF信息,并且作为题目中的filetype传入数据库造成注入

$filetype = (new finfo)->file($_FILES['file']['tmp_name']);

总结

虽然是几年前的trick,但是每弄清楚一个trick,攻击面就会更广。

参考文章

  • CTFshow 36D Web Writeup – 颖奇L'Amore (gem-love.com)
  • PHP回顾之流 - SegmentFault 思否


Tags:SQL注入   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
SQL注入漏洞的检测及防御方法
SQL注入(SQL Injection)是一种广泛存在于Web应用程序中的严重安全漏洞,它允许攻击者在不得到授权的情况下访问、修改或删除数据库中的数据。这是一种常见的攻击方式,因此数据库...【详细内容】
2023-12-01  Search: SQL注入  点击:(120)  评论:(0)  加入收藏
从零到SQL注入防护大师,打造安全的Python应用程序
当涉及到与数据库交互时,防止SQL注入攻击是非常重要的。SQL注入是一种常见的网络安全漏洞,攻击者通过在用户输入的数据中注入恶意的SQL代码,从而可以执行未经授权的数据库操作...【详细内容】
2023-11-13  Search: SQL注入  点击:(258)  评论:(0)  加入收藏
Django SQL注入漏洞 CVE-2022-28347
漏洞简介在Django 2.2 的 2.2.28 之前版本、3.2 的 3.2.13 之前版本和 4.0 的 4.0.4 之前版本中的 QuerySet.deexplain 中发现了SQL注入问题。这是通过传递一个精心编制的字...【详细内容】
2023-05-18  Search: SQL注入  点击:(254)  评论:(0)  加入收藏
WordPress插件多个SQL注入漏洞
漏洞0x00 漏洞概述2023年1月12日,Tenable Research的研究人员公开披露了多个WordPress 插件中的SQL注入漏洞,成功利用这些漏洞可以修改或删除网站数据、注入恶意脚本或获得对...【详细内容】
2023-01-16  Search: SQL注入  点击:(300)  评论:(0)  加入收藏
无列名SQL注入攻击
写在前面1.InnoDb引擎从MYSQL5.5.8开始,InnoDB成为其默认的存储引擎。而在MYSQL5.6以上的版本中,mysql数据库中的inndb增加了innodb_index_stats和innodb_table_stats两张表,这...【详细内容】
2022-12-14  Search: SQL注入  点击:(212)  评论:(0)  加入收藏
网站有SQL注入漏洞导致被入侵怎么修复
什么是SQL注入攻击?SQL注入是一种网站的攻击方法。它将SQL代码添加到网站前端GET POST参数中,并将其传递给mysql数据库进行分析和执行语句攻击。如何生成SQL注入漏洞的?1。网站...【详细内容】
2022-10-24  Search: SQL注入  点击:(391)  评论:(0)  加入收藏
网络安全:SQL注入,XSS攻击,CSRF攻击
端口扫描技术1、SQL注入Web安全三板斧之首,大名鼎鼎的SQL注入。 SQL注入攻击的核心在于让Web...【详细内容】
2022-08-11  Search: SQL注入  点击:(563)  评论:(0)  加入收藏
Web渗透_SQL注入3
如果无权读取information schema库 / 拒绝union、order by语句,只能通过猜测的方式: 猜列名 &#39; and asd is null--+ (+代表空格) 当我们执行之后,通过报错可看出来没有这...【详细内容】
2022-08-03  Search: SQL注入  点击:(305)  评论:(0)  加入收藏
记一次艰难的SQL注入(过安全狗)
前言最近在挖补天的src,然后挖出了不少SQL注入,完了出了数据库名就不管那么多提交了。今天挖了个报错注入的,突然一激灵,说我不能这样颓废下去了,刚好是个后台登录的界面,我决心要...【详细内容】
2022-04-19  Search: SQL注入  点击:(324)  评论:(0)  加入收藏
一张图片也能SQL注入?
作者:Lxxx声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天网安实验室及原作者无关,本文为合天网安实验室原创,如需转载,请注明出处!前言最...【详细内容】
2022-03-11  Search: SQL注入  点击:(365)  评论:(0)  加入收藏
▌简易百科推荐
保护隐私,从微信朋友圈开始
在这个信息化高速发展的时代,微信已经成为了我们生活中不可或缺的一部分。无论是工作沟通、亲友联络,还是日常的消遣娱乐,微信都扮演着重要的角色。而微信朋友圈,更是成为了我们...【详细内容】
2024-04-08    松鼠宝贝  Tags:微信朋友圈   点击:(14)  评论:(0)  加入收藏
加密领域的热门概念和创新应用
在当下快速发展的加密货币领域,BTC Layer 2(二层)概念、比特币商业场景型的应用、DePIN以及AI领域的全球GPU算力调度网等项目备受关注,被视为具有巨大潜力的创新方向。让我们一...【详细内容】
2024-03-20  曜楠科技    Tags:加密   点击:(21)  评论:(0)  加入收藏
让隐私数据不再裸奔!一文掌握加密技术,让你的隐私高枕无忧
随着互联网的普及和数字化进程的加速,加密技术已经成为我们生活中不可或缺的一部分。从保护个人隐私到保障国家安全,加密技术都发挥着至关重要的作用。今天,我们就来一起盘点一...【详细内容】
2024-02-19  媺媺熊    Tags:隐私数据   点击:(5)  评论:(0)  加入收藏
人人都该懂密码学,通用密码学原理与应用实战|完结无密
来百度APP畅享高清图片//下栽のke:http://quangneng.com/4061/标题:人人都该懂密码学:通用密码学原理与应用实战在当今数字化的世界中,密码学已经成为了信息安全的核心。不论是...【详细内容】
2024-02-06  阿小白    Tags:密码学   点击:(52)  评论:(0)  加入收藏
笔记本电脑如何设置开机密码
在信息化时代,笔记本电脑已经成为我们工作、学习和生活中不可或缺的工具。然而,与此同时,信息安全问题也日益突出。为了保护个人隐私和重要数据,设置开机密码成为了必不可少的一...【详细内容】
2024-01-30  雨后海棠    Tags:开机密码   点击:(38)  评论:(0)  加入收藏
什么是密钥扩展?如何确保密码安全?
译者 | 陈峻审校 | 重楼为了访问自己的数字账户,我们通常需要用到密码或口令。不过,正如现实生活中开锁的钥匙可能并不总是牢靠一样,并非所有的密码都是安全的。为了加强在线防...【详细内容】
2023-12-22    51CTO  Tags:密码   点击:(92)  评论:(0)  加入收藏
SQL注入漏洞的检测及防御方法
SQL注入(SQL Injection)是一种广泛存在于Web应用程序中的严重安全漏洞,它允许攻击者在不得到授权的情况下访问、修改或删除数据库中的数据。这是一种常见的攻击方式,因此数据库...【详细内容】
2023-12-01  兰花豆说网络安全  微信公众号  Tags:SQL注入   点击:(120)  评论:(0)  加入收藏
网络安全秘籍:打造隐私防护墙,保卫您的个人信息!
随着互联网的普及,越来越多的个人信息被储存在网络上。这些信息包括我们的通讯地址、购物记录、银行账号等,一旦被黑客窃取,后果将不堪设想。那么,如何保护个人隐私免受网络攻击...【详细内容】
2023-11-21  白面知识铺    Tags:网络安全   点击:(200)  评论:(0)  加入收藏
在数字时代,如何确保您的个人数据安全
随着我们生活中越来越多的信息数字化,个人隐私保护成为一个不容忽视的重要话题。无论是网络购物、社交媒体还是在线银行,我们的大量个人数据都在网络上流动。那么,如何保护我们...【详细内容】
2023-10-30  万花筒娱圈    Tags:个人数据   点击:(276)  评论:(0)  加入收藏
密码的末路!谷歌将密钥设为所有用户的默认登录方式
作者丨Carly Page编译丨诺亚近日,谷歌宣布,密钥正在成为所有用户的默认登录方法。因此,密钥也被这家科技巨头吹捧为密码“终结的开始”。密钥是一种防网络钓鱼的密码替代品,允许...【详细内容】
2023-10-19    51CTO  Tags:密钥   点击:(238)  评论:(0)  加入收藏
站内最新
站内热门
站内头条