pikachu sql注入 通关手册

本文详细介绍了SQL注入的流程,包括注入点探测、信息获取(如数据库信息和表结构)、权限获取方法,以及不同类型注入(数字型、字符型、搜索型)的实战示例,最后讲解了宽字节注入的原理和应用。
摘要由CSDN通过智能技术生成

SQL注入流程

注入点探测


手动方式:手工构造SQL语句进行注入点发现
自动方式:采用自动扫描工具,自动进行注入点发现


信息获取


通过注入点取得想要得到的数据环境信息:数据库名称、类型、版本、用户信息等
数据库信息:数据库表、表字段、字段内容等(加密内容破解)

获取权限


获取操作系统权限:通过数据库执行shell,上传木马

注入点类型


分类依据:输入的变量传入到SQL语句是以什么类型进行拼接的

数字型:user_id=$id
字符型:user_id='$id'(区别就是有双引号或者单引号,构造语句闭合的时候也应根据这个特点确定类型)
搜索型:text LIKE '%{$_GET['search']}%'


第一关:数字型注入(post)

 根据规定的数字返回名称和邮箱,说明和数据库有交互,接受的数据类型为数字型

由于是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)

可以看到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#回显不正常,说明存在注入且语句闭合正常,接下来就和第一关一样注入即可

 

第四关:xx型闭合

提示关tmd的什么型,只要能闭合就是本事。先尝试吧

试了一会发现不行,只能去看看源代码了55

可以看到这个 sql语句是 username=('$name')  没想到是这个样子查询,这下知道了就可以闭合了

 输入kobe') union select 1,2# 正常显示输入kobe') union select 1,2,3#不正常,说明有两个显示位

 接下来注意闭合就和其他的一样了

第五关:insert/update注入

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' 可以查询表名

 第六关:delete注入

这一关和上一关原理相同,点击删除的时候抓包

 抓到的包长这样?id后面是注入点在这里构建payload

 ' or extractvalue(1,concat(0x7e,(select database()))) or '

 第七关:http头注入

这里需要先登录,发现 网站请求我们的客户端信息,那么这些信息点就是注入点

这里刷新一下然后抓包

 在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#

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值