40行代码打造自己的xxxeye -- wolf

来源:互联网 发布:c语言找出数组最多的数 编辑:程序博客网 时间:2024/05/02 00:35

用于检测无法直接回显或者特定情况下漏洞利用时需要用到的漏洞。
例如这几天爆出的ImageMagick,FFMpeg漏洞,之前的反序列化漏洞等各种类型的代码执行、SSRF等等,具体可查看http://zone.wooyun.org/search/eye
http://wooyun.org/searchbug.php 搜cloudeye

代码:
import socket,thread,datetime
query_history = []
url_history = []
def web_server():
    web = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    web.bind(('0.0.0.0',80))
    web.listen(10)
    while True:
        try:
            conn,addr = web.accept()
            data = conn.recv(4096)
            req_line = data.split("\r\n")[0]
            path = req_line.split()[1]
            route_list = path.split('/')
            html = "NO"
            if len(route_list) == 3:
                if route_list[1] == 'add':
                    url_history.append(route_list[2])
                elif route_list[1] == 'check':
                    if route_list[2] in url_history:
                        html = 'YES'
            else:
                query_str = route_list[1]
                for query_raw in query_history:
                    if query_str in query_raw:html = "YES"
            print datetime.datetime.now().strftime('%m-%d %H:%M:%S') + ' web query: ' + path
            raw = "HTTP/1.0 200 OK\r\nContent-Type: application/json; charset=utf-8\r\nContent-Length: %d\r\nConnection: close\r\n\r\n%s" %(len(html),html)
            conn.send(raw)
            conn.close()
        except:
            pass
if __name__=="__main__":
    dns = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    dns.bind(('0.0.0.0',53))
    thread.start_new_thread(web_server,())
    while True:
        recv,addr = dns.recvfrom(1024)
        query_history.append(recv)
        print datetime.datetime.now().strftime('%m-%d %H:%M:%S') + ' Dns Query: ' + recv

运行sudo python dns_log.py(监听80与53端口需root权限)
无需安装任何外库,可直接运行,控制台即时输出请求内容供分析并提供web接口可用于脚本自动化验证

触发:
各种方式的dns请求均可(因dns的协议特性,验证的随机字符串不要包含.号)
  例 nslookup wolf 66.66.66.66
各种方式的http请求均可
  例 curl http://66.66.66.66/add/wolf
判断:
dns: http://66.66.66.66/wolf
http: http://66.66.66.66/check/wolf
返回YES即此数据存在,也就是存在漏洞触发了验证请求操作。

感谢(0)
分享到:0
10 个回复
  1. 1# whynot (print '学习中') |2016-05-09 18:15

    先顶再看抢一楼

  2. 2# 齐迹 (sec.zbj.com 欢迎来撸) |2016-05-09 18:19

    如果只是检查问题是否存在 直接wget 一下自己的网站即可 然后看看日志就O了

  3. 3# wolf (@伏宸安全) |2016-05-09 18:23

    @齐迹 恩 没错 这个脚本的http验证功能就是用socket实现这种功能 直接运行即可 方便 不用去架设或者安装一些庞大的外库。简单来说就是杀鸡不用宰牛刀。

  4. 4# 猪猪侠 (每次有人骂我是猪我都说自己是猪猪侠) |2016-05-09 18:35

    看12楼,这需要一个服务器+一个域名,重复得没有新意了。
    http://zone.wooyun.org/content/27119

  5. 5# LoveSnow (我要努力,争取开发自己的神器) |2016-05-09 21:04

    @猪猪侠 猪哥就是12楼 哈哈

  6. 6# wolf (@伏宸安全) |2016-05-09 21:28

    @猪猪侠 可以不需要域名的,这个脚本主要是在于提供扫描器的漏洞插件方便验证漏洞,分享给大家。猪哥那个脚本的功能只是记录,只能用于手工测试,而且还得安装额外的第三方裤,相比同样效果nc命令更方便一些。当然,相比cloudeye之类的在线平台这个粗糙很多。

  7. 7# cf_hb (10000定律<=>实践ing) |2016-05-09 23:15

    @wolf 很赞,打开了思路.

  8. 8# loopx9 |2016-05-09 23:26

    有个域名还是好些,毕竟在有些场景内网机器出不了网,但内网的dns server可以。

  9. 9# Terry (reset) |2016-05-09 23:44

    这种场景主要还是针对远程命令检测 倒不如再加个ping 三种协议都有了

  10. 10#
    回复此人感谢
    wolf (@伏宸安全) |2016-05-09 23:54

    @Terry icmp的就交给你来加入啦

0 0
原创粉丝点击