用户
搜索
回帖奖励 25 魔法币 回复本帖可获得 5 魔法币奖励! 每人限 1 次(中奖概率 90%)
  • TA的每日心情
    奋斗
    2018-10-28 17:38
  • 签到天数: 235 天

    连续签到: 1 天

    [LV.7]常住居民III

    管理员

    Supreme玩家

    Rank: 9Rank: 9Rank: 9

    78

    主题

    2289

    帖子

    1万

    魔法币
    收听
    0
    粉丝
    138
    注册时间
    2016-2-5

    楚核心白帽i春秋签约作者白帽传说春秋游侠秦燕魏赵齐突出贡献

    发表于 2018-7-8 21:28:08 2944389
    本文原创作者:阿甫哥哥,本文属i春秋原创奖励计划,未经许可禁止转载
    0.jpg
    0x01 前言
    在采集到URL之后,要做的就是对目标进行信息资产收集了,收集的越好,你挖到洞也就越多了............当然这一切的前提,就是要有耐心了!!!由于要写工具较多,SO,我会分两部分写......
    0x02 端口扫描脚本编写

    1507644204901.png
    端口扫描的原理:
    端口扫描,顾名思义,就是逐个对一段端口或指定的端口进行扫描。通过扫描结果可以知道一台计算机上都提供了哪些服务,然后就可以通过所提供的这些服务的己知漏洞就可进行攻击。其原理是当一个主机向远端一个服务器的某一个端口提出建立一个连接的请求,如果对方有此项服务,就会应答,如果对方未安装此项服务时,即使你向相应的端口发出请求,对方仍无应答,利用这个原理,如果对所有熟知端口或自己选定的某个范围内的熟知端口分别建立连接,并记录下远端服务器所给予的应答,通过查看一记录就可以知道目标服务器上都安装了哪些服务,这就是端口扫描,通过端口扫描,就可以搜集到很多关于目标主机的各种很有参考价值的信息。例如,对方是否提供FPT服务、WWW服务或其它服务。

    代理服务器还有很多常用的端口
    比如HTTP协议常用的就是:80/8080/3128/8081/9080,FTP协议常用的就是:21,Telnet协议常用的是23等等
    来个较全的...
    [AppleScript] 纯文本查看 复制代码
    代理服务器常用以下端口:
    ⑴. HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
    ⑵. SOCKS代理协议服务器常用端口号:1080
    ⑶. FTP(文件传输)协议代理服务器常用端口号:21
    ⑷. Telnet(远程登录)协议代理服务器常用端口:23
    HTTP服务器,默认的端口号为80/tcp(木马Executor开放此端口);
    HTTPS(securely transferring web pages)服务器,默认的端口号为443/tcp 443/udp;
    Telnet(不安全的文本传送),默认端口号为23/tcp(木马Tiny Telnet Server所开放的端口);
    FTP,默认的端口号为21/tcp(木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口);
    TFTP(Trivial File Transfer Protocol),默认的端口号为69/udp;
    SSH(安全登录)、SCP(文件传输)、端口重定向,默认的端口号为22/tcp;
    SMTP Simple Mail Transfer Protocol (E-mail),默认的端口号为25/tcp(木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口);
    POP3 Post Office Protocol (E-mail) ,默认的端口号为110/tcp;
    WebLogic,默认的端口号为7001;
    Webshpere应用程序,默认的端口号为9080;
    webshpere管理工具,默认的端口号为9090;
    JBOSS,默认的端口号为8080;
    TOMCAT,默认的端口号为8080;
    WIN2003远程登陆,默认的端口号为3389;
    Symantec AV/Filter for MSE,默认端口号为 8081;
    Oracle 数据库,默认的端口号为1521;
    ORACLE EMCTL,默认的端口号为1158;
    Oracle XDB(XML 数据库),默认的端口号为8080;
    Oracle XDB FTP服务,默认的端口号为2100;
    MS SQL*SERVER数据库server,默认的端口号为1433/tcp 1433/udp;
    MS SQL*SERVER数据库monitor,默认的端口号为1434/tcp 1434/udp;
    QQ,默认的端口号为1080/udp
    等等,更具体的去百度吧,啊哈哈

    端口的三种状态
    OPEN  --端口是开放的,可以访问,有进程
    CLOSED  --端口不会返回任何东西..可能有waf
    FILTERED  --可以访问,但是没有程序监听

    这里用一个工具--nmap举下栗子吧...
    [AppleScript] 纯文本查看 复制代码
    C:\Users\Administrator>nmap -sV localhost
    Starting Nmap 7.70 ( [url]https://nmap.org[/url] ) at 2018-07-03 17:10 ?D1ú±ê×?ê±??
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.00053s latency).
    Other addresses for localhost (not scanned): ::1
    Not shown: 990 closed ports
    PORT      STATE SERVICE           VERSION
    80/tcp    open  http              Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45)
    135/tcp   open  msrpc             Microsoft Windows RPC
    443/tcp   open  ssl/https         VMware Workstation SOAP API 14.1.1
    445/tcp   open  microsoft-ds      Microsoft Windows 7 - 10 microsoft-ds (workgroup: WorkGroup)
    903/tcp   open  ssl/vmware-auth   VMware Authentication Daemon 1.10 (Uses VNC, SOAP)
    1080/tcp  open  http-proxy        Polipo
    3306/tcp  open  mysql             MySQL 5.5.53
    8088/tcp  open  radan-http?
    10000/tcp open  snet-sensor-mgmt?
    65000/tcp open  tcpwrapped

    说的差不多了,咱们开始用Python实现它....端口扫描在Python中可以用的模块有很多,本文用socket模块演示单线程的在之前的文章有说过,具体传送门:
    一个精壮的代购骗子被我彻底征服
    [Python] 纯文本查看 复制代码
    #-*- coding: UTF-8 -*-
    import socket
     
    def Get_ip(domain):  
        try:  
            return socket.gethostbyname(domain)  
        except socket.error,e:  
            print '%s: %s'%(domain,e)  
            return 0 
     
    def PortScan(ip):
        result_list=list()
        port_list=range(1,65535)
        for port in port_list:
            try:
                s=socket.socket() 
                s.settimeout(0.1)
                s.connect((ip,port))
                openstr= " PORT:"+str(port) +" OPEN "
                print openstr
                result_list.append(port)
                s.close()
            except:
                pass
        print result_list
    def main():
        domain = raw_input("PLEASE INPUT YOUR TARGET:")
        ip = Get_ip(domain)
        print 'IP:'+ip
        PortScan(ip)
    if __name__=='__main__':  
        main()

    速度是不是巨慢,既然是告别脚本小子,写个单线程的。。肯定是不行的,啊哈哈
    放出多线程版本
    [Python] 纯文本查看 复制代码
    #-*- coding: UTF-8 -*-
    import socket
    import threading
    
    lock = threading.Lock()
    threads = []
    def Get_ip(domain):  
        try:  
            return socket.gethostbyname(domain)  
        except socket.error,e:  
            print '[-]%s: %s'%(domain,e)  
            return 0 
     
    def PortScan(ip,port):
        try:
            s=socket.socket() 
            s.settimeout(0.1)
            s.connect((ip,port))
            lock.acquire()
            openstr= "[-] PORT:"+str(port) +" OPEN "
            print openstr
            lock.release()
            s.close()
        except:
            pass
    def main():
        banner = '''
                          _                       
         _ __   ___  _ __| |_ ___  ___ __ _ _ __  
        | '_ \ / _ \| '__| __/ __|/ __/ _` | '_ \ 
        | |_) | (_) | |  | |_\__ \ (_| (_| | | | |
        | .__/ \___/|_|   \__|___/\___\__,_|_| |_|
        |_|                                       
    
                '''
        print banner
        domain = raw_input("PLEASE INPUT YOUR TARGET:")
        ip = Get_ip(domain)
        print '[-] IP:'+ip
        for n in range(1,76):
            for p in range((n-1)*880,n*880):
                t = threading.Thread(target=PortScan,args=(ip,p))
                threads.append(t)
                t.start()     
    
            for t in threads:
                t.join()
        print ' This scan completed !'
    if __name__=='__main__':  
        main()
    79.gif
    很简单的,我都不知道该怎么讲。。。如果你基础知识还不够牢固,请移步至初级篇
    Python大法从入门到编写POC
    0x03 子域名采集脚本编写
    15167864381212.png
    采集子域名可以在测试范围内发现更多的域或子域,这将增大漏洞发现的几率。采集的方法也有很多方法,本文就不再过多的叙述了,采集方法的方法可以参考这篇文章
    子域名搜集思路与技巧梳理
    其实lijiejie大佬的subdomainbrute就够用了.....当然了,i春秋也有视频教程的。。。
    Python安全工具开发应用
    本文就演示三种吧
    第一种是通过字典爆破,这个方法主要靠的是字典了....采集的多少取决于字典的大小了...
    演示个单线程的吧
    [Python] 纯文本查看 复制代码
    #-*- coding: UTF-8 -*-
    import requests
    import re
    import sys
    
    def writtarget(target):
            print target
            file = open('result.txt','a')
            with file as f:
                    f.write(target+'\n')
    
            file.close()
    
    
    def targetopen(httptarget , httpstarget):
    
    
            header = {
                            'Connection': 'keep-alive',
                            'Pragma': 'no-cache',
                            'Cache-Control': 'no-cache',
                            'Upgrade-Insecure-Requests': '1',
                            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
                            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
                            'DNT': '1',
                            'Accept-Encoding': 'gzip, deflate',
                            'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'
                    }
    
            try:
                    reponse_http = requests.get(httptarget, timeout=3, headers=header)
                    code_http = reponse_http.status_code
    
    
                    if (code_http == 200):
                            httptarget_result = re.findall('//.*', httptarget)
    
                            writtarget(httptarget_result[0][2:])
    
                    else:
                            reponse_https = requests.get(httpstarget, timeout=3, headers=header)
                            code_https = reponse_https.status_code
                            if (code_https == 200):
                                    httpstarget_result = re.findall('//.*', httpstarget)
    
                                    writtarget(httpstarget_result[0][2:])
    
    
            except:
                    pass
    
    def domainscan(target):
    
            f = open('domain.txt','r')
            for line in f:
                    httptarget_result = 'http://'+ line.strip() + '.'+target
                    httpstarget_result = 'https://'+ line.strip() + '.'+target
    
                    targetopen(httptarget_result, httpstarget_result)
    
            f.close()
    
    if __name__ == "__main__":
            print ' ____                        _       ____             _       '
            print '|  _ \  ___  _ __ ___   __ _(_)_ __ | __ ) _ __ _   _| |_ ___ '
            print "| | | |/ _ \| '_ ` _ \ / _` | | '_ \|  _ \| '__| | | | __/ _ \  "
            print "| |_| | (_) | | | | | | (_| | | | | | |_) | |  | |_| | ||  __/"
            print '|____/ \___/|_| |_| |_|\__,_|_|_| |_|____/|_|   \__,_|\__\___|'
                                                                  
    
    
            file = open('result.txt','w+')
            file.truncate()
            file.close()
            target = raw_input('PLEASE INPUT YOUR DOMAIN(Eg:ichunqiu.com):')
            print 'Starting.........'
            domainscan(target)
            print 'Done ! Results in result.txt'

    80.gif
    第二种是通过搜索引擎采集子域名,不过有些子域名不会收录在搜索引擎中.....

    参考这篇文章
    工具| 手把手教你信息收集之子域名收集器
    我觉得这篇文章介绍的还可以的....我也懒得写了,直接贴过来吧
    [Python] 纯文本查看 复制代码
    #-*-coding:utf-8-*-
    import requests
    import re
    key="qq.com"
    sites=[]
    match='style="text-decoration:none;">(.*?)/'
    for i in range(48):
       i=i*10
       url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=%s"%i
       response=requests.get(url).content
       subdomains=re.findall(match,response)
       sites += list(subdomains)
    site=list(set(sites))   #set()实现去重
    print site
    print "The number of sites is %d"%len(site)
    for i in site:          
       print i

    第三种就是通过一些第三方网站..实现方法类似于第二种
    在之前的文章中介绍过,我就直接引用过来了
    不会的话,就看这篇文章,很详细...
    Python大法之从HELL0 MOMO到编写POC(五)
    [Python] 纯文本查看 复制代码
    import requests
    import re
    import sys
     
    def get(domain):
            url = 'http://i.links.cn/subdomain/'
            payload = ("domain={domain}&b2=1&b3=1&b4=1".format(domain=domain))
            r = requests.post(url=url,params=payload)
            con = r.text.encode('ISO-8859-1')
            a = re.compile('value="(.+?)"><input')
            result = a.findall(con)
            list = '\n'.join(result)
            print list
    if __name__ == '__main__':
            command= sys.argv[1:]
            f = "".join(command)
            get(f)

    0x04 CMS指纹识别脚本编写
    15005554983760.png
    现在有很多开源的指纹识别程序,w3af,whatweb,wpscan,joomscan等,常见的识别的几种方式:
    1:网页中发现关键字
    2:特定文件的MD5(主要是静态文件、不一定要是MD5)
    3:指定URL的关键字
    4:指定URL的TAG模式

    i春秋也有相应的课程
    Python安全工具开发应用
    本着买不起课程初心,啊哈哈,我就不讲ADO老师讲的方法了。。。啊哈哈
    不过写的都差不多,只是用的模块不同。。。
    本文我介绍两种方法,一种是通过API的。。另一种就是纯粹的指纹识别了,识别的多少看字典的大小了。。。
    先说第一种。。。
    说白了,就是发送个post请求,把关键字取出来就ok了,完全没有难度。。
    我用的指纹识别网站是:http://whatweb.bugscaner.com/look/,我怎么感觉有种打广告的感觉。。。抓个包。。然后就一顿老套路
    81.png
    [Python] 纯文本查看 复制代码
    #-*- coding: UTF-8 -*-
    import requests
    import json
    
    def what_cms(url):
            headers = {
                    'Connection': 'keep-alive',
                    'Pragma': 'no-cache',
                    'Cache-Control': 'no-cache',
                    'Upgrade-Insecure-Requests': '1',
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
                    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
                    'DNT': '1',
                    'Accept-Encoding': 'gzip, deflate',
                    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'
                        }
            post={
                    'hash':'0eca8914342fc63f5a2ef5246b7a3b14_7289fd8cf7f420f594ac165e475f1479',
                    'url':url,
            }
            r=requests.post(url='http://whatweb.bugscaner.com/what/', data=post, headers=headers)
            dic=json.loads(r.text)
            if dic['cms']=='':
                    print 'Sorry,Unidentified........'
            else:
                    print 'CMS:' + dic['cms']
    if __name__ == '__main__':
            url=raw_input('PLEASE INPUT YOUR TARGET:')
            what_cms(url)
    
    

    cool。。
    82.png


    接下来,就是CMS指纹识别的第二种方法了。。。
    我用的匹配关键字的方法。。。
    找了个dedecms的匹配字典
    [AppleScript] 纯文本查看 复制代码
    范例:链接||||关键字||||CMS别称
    /data/admin/allowurl.txt||||dedecms||||DedeCMS(织梦)
    /data/index.html||||dedecms||||DedeCMS(织梦)
    /data/js/index.html||||dedecms||||DedeCMS(织梦)
    /data/mytag/index.html||||dedecms||||DedeCMS(织梦)
    /data/sessions/index.html||||dedecms||||DedeCMS(织梦)
    /data/textdata/index.html||||dedecms||||DedeCMS(织梦)
    /dede/action/css_body.css||||dedecms||||DedeCMS(织梦)
    /dede/css_body.css||||dedecms||||DedeCMS(织梦)
    /dede/templets/article_coonepage_rule.htm||||dedecms||||DedeCMS(织梦)
    /include/alert.htm||||dedecms||||DedeCMS(织梦)
    /member/images/base.css||||dedecms||||DedeCMS(织梦)
    /member/js/box.js||||dedecms||||DedeCMS(织梦)
    /php/modpage/readme.txt||||dedecms||||DedeCMS(织梦)
    /plus/sitemap.html||||dedecms||||DedeCMS(织梦)
    /setup/license.html||||dedecms||||DedeCMS(织梦)
    /special/index.html||||dedecms||||DedeCMS(织梦)
    /templets/default/style/dedecms.css||||dedecms||||DedeCMS(织梦)
    /company/template/default/search_list.htm||||dedecms||||DedeCMS(织梦)

    全的字典去百度吧,小弟不才......小弟用的是deepin,win的报错太鸡肋,实在懒得解决。。。。
    [Python] 纯文本查看 复制代码
    #-*- coding: UTF-8 -*-
    import os
    import threading
    import urllib2
    
    identification = False
    g_index = 0
    lock = threading.Lock()
    
    def list_file(dir):
        files = os.listdir(dir)
        return  files
    
    def request_url(url='', data=None, header={}):
        page_content = ''
        request = urllib2.Request(url, data, header)
    
        try:
            response = urllib2.urlopen(request)
            page_content = response.read()
        except Exception, e:
            pass
    
        return page_content
    
    def whatweb(target):
        global identification
        global g_index
        global cms
    
        while True:
            if identification:
                break
    
            if g_index > len(cms)-1:
                break
    
            lock.acquire()
            eachline = cms[g_index]
            g_index = g_index + 1
            lock.release()
    
            if len(eachline.strip())==0 or eachline.startswith('#'):
                pass
            else:
                url, pattern, cmsname = eachline.split('||||')
                html = request_url(target+url)
                rate = float(g_index)/float(len(cms))
                ratenum = int(100*rate)
    
                if pattern.upper() in html.upper():
                    identification = True
                    print " CMS:%s,Matched URL:%s" % (cmsname.strip('\n').strip('\r'), url)
                    break
        return
    
    
    if __name__ == '__main__':
        print '''
              __        ___           _    ____ __  __ ____  
              \ \      / / |__   __ _| |_ / ___|  \/  / ___| 
               \ \ /\ / /| '_ \ / _` | __| |   | |\/| \___ \ 
                \ V  V / | | | | (_| | |_| |___| |  | |___) |
                 \_/\_/  |_| |_|\__,_|\__|\____|_|  |_|____/ 
        '''
        threadnum = int(raw_input(' Please input your threadnum:'))
        target_url = raw_input(' Please input your target:')
    
        f = open('./cms.txt')
        cms = f.readlines()
        threads = []
    
        if target_url.endswith('/'):
            target_url = target_url[:-1]
    
        if target_url.startswith('http://') or target_url.startswith('https://'):
            pass
        else:
            target_url = 'http://' + target_url
    
        for i in range(threadnum):
            t = threading.Thread(target=whatweb, args=(target_url,))
            threads.append(t)
    
        print ' The number of threads is %d' % threadnum
        print 'Matching.......'
        for t in threads:
            t.start()
    
        for t in threads:
            t.join()
    
        print " All threads exit"

    83.png
    cool。。。这样就简单的实现CMS识别。。。
    最近好久不写文章,手法生疏了,各位dalao见谅。。。。
    最后,分享一首歌。。Kris Wu的天地
    天地
    特别喜欢‘江湖人说我不行,古人说路遥知马力,陪我走陪我闯天地,我从不将就我的命运’这块。。
    另外,小弟没钱吃饭了,各位dalao,救救孩子吧
    1531056433293.jpg
    本集完

    本帖被以下淘专辑推荐:

    一位特爱收藏Supreme的大哥哥....
    发表于 2018-7-16 16:50:39

    回帖奖励 +5 魔法币

    饺子铭 发表于 2018-7-10 20:21
    给大佬打call,内容很实用,每章都会仔细学习,动手练习,python进步很快

    给大佬打call,内容很实用,每章都会仔细学习,动手练习,python进步很快
    使用道具 举报 回复
    发表于 2018-8-14 18:03:06

    回帖奖励 +5 魔法币

      File "J:\曾经的梦\Tools\information gathering\Ports scan\Ps.py", line 10
        except socket.error,e:报错了
    使用道具 举报 回复

    回帖奖励 +5 魔法币

    为什么会这样子,代码是跟你一样打的,为什么一直都是这样?就是那个代码那里有颜色的
    QQ截图20180824222000.png
    QQ截图20180824222012.png
    使用道具 举报 回复
    发表于 2018-7-17 14:06:49

    回帖奖励 +5 魔法币

    给大佬打call,内容很实用,每章都会仔细学习,动手练习,python进步很快
    使用道具 举报 回复

    回帖奖励 +5 魔法币


    给大佬打call,内容很实用,每章都会仔细学习,动手练习,python进步很快
    使用道具 举报 回复
    发表于 2018-7-9 08:16:46

    回帖奖励 +5 魔法币


    给大佬打call,内容很实用,每章都会仔细学习,动手练习,python进步很快

    评分

    参与人数 1魔法币 +30 收起 理由
    Exp1ore + 30 cool,加油

    查看全部评分

    苟非吾之所有,虽一毫而莫取
    使用道具 举报 回复

    回帖奖励 +5 魔法币

    给大佬打call,内容很实用,每章都会仔细学习,动手练习,python进步很快
    使用道具 举报 回复
    发表于 2018-7-11 08:33:37

    回帖奖励 +5 魔法币

    大佬的Python 多线程写的溜啊。佩服佩服
    使用道具 举报 回复
    发表于 2018-7-8 21:36:57
    沙发自占,啊哈哈哈
    一位特爱收藏Supreme的大哥哥....
    使用道具 举报 回复
    发表于 2018-7-8 22:24:08

    回帖奖励 +5 魔法币

    哇,阿甫哥哥终于更新了

    评分

    参与人数 1魔法币 +50 收起 理由
    Exp1ore + 50 啊哈哈哈哈,久等了

    查看全部评分

    使用道具 举报 回复

    回帖奖励 +5 魔法币

    过来瞧瞧先 自此一下
    使用道具 举报 回复
    发表于 2018-7-9 08:14:00

    回帖奖励 +5 魔法币

    霸总你好,霸总再见
    111111111
    使用道具 举报 回复
    发表于 2018-7-9 10:45:08

    回帖奖励 +5 魔法币

    活捉大佬一枚,文章写得贼666
    使用道具 举报 回复
    发表于 2018-7-9 10:57:31

    回帖奖励 +5 魔法币

    牛逼  文章很给力
    使用道具 举报 回复
    发表于 2018-7-9 21:02:44

    回帖奖励 +5 魔法币

    救救孩子吧 哈哈 皮
    使用道具 举报 回复
    z7788520 i春秋作家 ← 假 真➡i春秋打杂员 核心白帽 i春秋签约作者 积极活跃奖
    10#
    发表于 2018-7-10 02:14:56

    回帖奖励 +5 魔法币

    不惹事,不生事,妖魔鬼怪快走开
    使用道具 举报 回复

    回帖奖励 +5 魔法币

    我也去试试
    使用道具 举报 回复
    发表于 2018-7-10 18:05:11

    回帖奖励 +5 魔法币

    感谢大佬的分享
    使用道具 举报 回复

    回帖奖励 +5 魔法币

    魔磨魔魔魔法币  感谢分享
    使用道具 举报 回复
    12下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册