PrivHunterAI/scan.go
2025-02-06 15:37:33 +08:00

108 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
"strings"
"time"
)
func scan() {
for {
time.Sleep(3 * time.Second)
logs.Range(func(key any, value any) bool {
// fmt.Println("The type of x is", reflect.TypeOf(value))
var r *RequestResponseLog
if rr, ok := value.(*RequestResponseLog); ok {
r = rr
} else {
fmt.Printf("Value is not of type RequestResponseLog\n")
}
// fmt.Println(r)
if r.Request.Header != nil && r.Response.Header != nil {
sendHTTPAndKimi(r) // 主要
logs.Delete(key)
return true // 返回true继续遍历返回false停止遍历
}
return true
})
}
}
func sendHTTPAndKimi(r *RequestResponseLog) {
resp1 := string(r.Response.Body)
fullURL := &url.URL{
Scheme: r.Request.URL.Scheme,
Host: r.Request.URL.Host,
Path: r.Request.URL.Path,
RawQuery: r.Request.URL.RawQuery,
}
// fmt.Println(fullURL.String())
if isNotSuffix(fullURL.String(), suffixes) {
req, err := http.NewRequest(r.Request.Method, fullURL.String(), strings.NewReader(string(r.Request.Body)))
if err != nil {
fmt.Println("创建请求失败:", err)
return
}
req.Header = r.Request.Header
req.Header.Set("Cookie", cookie2)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer resp.Body.Close()
bodyBytes, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response body:", err)
return
}
// 将响应体转换为字符串
resp2 := string(bodyBytes)
// 输出响应体字符串
fmt.Println("Response1 Body:", resp1)
fmt.Println("Response2 Body:", resp2)
result, err := detectPrivilegeEscalation(AI, resp1, resp2)
if err != nil {
fmt.Println("Error:", err)
} else {
log.Println("Result:", result)
}
}
}
func detectPrivilegeEscalation(AI string, resp1, resp2 string) (string, error) {
var result string
var err error
switch AI {
case "kimi":
result, err = kimi(resp1, resp2) // 调用 kimi 检测是否越权
case "deepseek":
result, err = deepSeek(resp1, resp2) // 调用 deepSeek 检测是否越权
default:
result, err = kimi(resp1, resp2) // 默认调用 kimi 检测是否越权
}
if err != nil {
return "", err
}
return result, nil
}
func isNotSuffix(s string, suffixes []string) bool {
for _, suffix := range suffixes {
if strings.HasSuffix(s, suffix) {
return false
}
}
return true
}