zoukankan      html  css  js  c++  java
  • 从浏览器输入URL到页面渲染的过程

    零、背景



    一个web安全工程师在学习web安全和web渗透时候,非常有必要了解整个WEB工作过程。

    一、输入URL



    这里是最基本的知识:URL是URI的一种实际应用,URI统一资源表示符,URL统一资源定位符。URL举例: https://www.xxx.com:443/index.php 前面是协议 https 然后是主机www.xxx.com 然后是端口 443,最后是资源在该主机上针对web系统根目录(通常为www)的相对路径。所以可以想象,根据WEB访问就是获取资源,已经知道端口、路径、协议,唯独缺乏对方的IP了,毕竟HTTP下层是TCP/IP嘛,所以这里就用到从域名(或者是主机名)获取其对应的IP地址。

    二、解析IP地址



    这里为啥不用DNS呢,是因为在windows里面不一定是用DNS解析的IP地址哦,还可能是netbios哈

    DNS 解析顺序


    在linux中一般先解析/etc/hosts中的静态配置的解析,如果不行再利用dns递归请求解析域名。在windows中一般是先dns cache(dns缓存),然后再hosts文件,最后是dns递归解析。

    Netbios 解析顺序


    首先这个只有windows才会有,一般只在局域网或域内生效,其解析顺序域操作系统也就是windows的版本有关系。另外和配置的模式有关系。一般的NetBIOS cache (NetBIOS缓存),然后是WINS Server和广播,最后是LMHOSTS。如果模式不一样,WINS服务器解析和广播的顺序有调整。

    三、发送HTTP请求



    其实这里未必是HTTP协议或者HTTPS协议,有可能是其他协议,但是HTTP(HTTPS)协议非常典型,这里就是以此为例进行讲解。这里发送HTTP请求,表明请求的资源或者提交的资源,在头部字段里会带有相应的身份验证信息、回话信息、登录状态信息和控制信息等。

    四、服务器处理并返回响应报文



    HTTP请求到大服务器后,服务器会进行处理,然后根据处理结果返回相应的返回包,包括返回状态、返回内容,头部字段中的对应的控制信息等。

    五、浏览器渲染页面



    现代浏览器的渲染过程如下:

    • 1.解析HTML构建DOM树
    • 2.构建渲染树
    • 3.布局渲染树
    • 4.绘制渲染树

    最近在工作中还是遇到了一些攻击者追查等等事情,结合自己过去做过一年的安全分析师的经验,对几款比较好的追踪溯源网站的使用做一个简介。

    一、关联神器passivetotal

    1、网址:https://community.riskiq.com/

    2、简介:常用来搜索IP、Domain、URL、whois信息、ipwhois信息等,是一个存储数量比较全面,信息量较大,而且可以和时间关联分析。实现这些维度的互查反查是很重要的一个功能。需要注册哦。

    3、截图:

    二、样本神器virustotal

    1、网址:https://www.virustotal.com/#/home/upload

    2、简介:可以查询样本在多家杀毒引擎的扫描检测结果,另外可以查询IP、url、hash,这样可以关联下载downloadurl 、恶意域名、IP,以及恶意的样本hash。(注册之后可付费,在线样本可下载)

    3、截图:

    4、自己查看vt文档写的一个apilib库

    复制代码
      1 #!/usr/bin/env python
      2 #-*-coding:UTF-8-*-
      3 #引入头文件
      4 import os
      5 import sys
      6 import json
      7 import urllib
      8 import urllib2
      9 import hashlib
     10 import postfile
     11 import simplejson
     12 
     13 #全局变量
     14 #APIKEY = None
     15 APIKEY = '033e1a2ae071f8800d558a968717c2674f8eb728cfb6b470d4713dd744600fb7'
     16 MYVTOBJ = None
     17 CRONTOL_BIT = 0
     18 #创建VirusTotal类
     19 class VirusTotal:
     20     def __init__(self,apikey):
     21         self.virus_dict = {}
     22         self.apikey = apikey
     23         
     24     def get_virus_dict(self):
     25         return self.virus_dict
     26         
     27     def upload_one_check_file(self,check_file):
     28         check_host = "www.virustotal.com"
     29         selector = "https://www.virustotal.com/vtapi/v2/file/scan"
     30         fields = [("apikey",self.apikey)]
     31         file_name = os.path.basename(check_file)
     32         try:
     33             file_to_check = open(check_file,'rb').read()
     34         except Exception,ex:
     35             #log.log(ex,3,1)
     36             return (-1,ex)
     37         file_struct = [("file",file_name,file_to_check)]
     38         try:
     39             result_json = postfile.post_multipart(check_host,selector,fields,file_struct)
     40         except Exception,ex:
     41             #log.log(ex,3,2)
     42             return (-1,ex)
     43         return result_json
     44         
     45     def upload_check_files(self,files_list):
     46         result_json_list = []
     47         if len(files_list) <= 0:
     48             return (-1,'files_list error')
     49         for item in files_list:
     50             ret = self.quick_check(item)
     51             result_json_list.append(ret)
     52         return result_json_list
     53         
     54     def check_file_rescan(self,scanid):
     55         url = "https://www.virustotal.com/vtapi/v2/file/rescan"
     56         scanid_string = None
     57         if type(scanid) is list:
     58             for item in scanid:
     59                 scanid_string += str(item)+','
     60             scanid_string = scanid_string[0:-1]
     61             parameters = {"resource":scanid_string,"apikey":self.apikey}
     62             try:
     63                 data = urllib.urlencode(parameters)
     64                 check_request = urllib2.Request(url,data)  
     65                 response = urllib2.urlopen(check_request)  
     66                 result_json = response.read()
     67             except Exception,ex:
     68                 ##log.log(ex,3,2)
     69                 return (-1,ex)
     70             return result_json
     71         parameters = {"resource":scanid,"apikey":self.apikey}
     72         try:
     73             data = urllib.urlencode(parameters)  
     74             check_request = urllib2.Request(url,data)  
     75             response = urllib2.urlopen(check_request)  
     76             result_json = response.read()
     77         except Exception,ex:
     78             #log.log(ex,3,2)
     79             return (-1,ex)
     80         return result_json
     81     
     82     def quick_check(self,check_file):
     83         file_md5 = None
     84         print str(check_file)
     85         with open(str(check_file),'rb') as f:
     86             file_md5 = hashlib.md5()
     87             file_md5.update(f.read())
     88             file_md5 = file_md5.hexdigest()
     89         ret = self.upload_one_check_file(check_file)
     90         if ret.find('Error 400') >= 0:
     91             ret = self.check_file_rescan(file_md5)
     92         ret = simplejson.loads(ret)
     93         return ret["sha256"]
     94 
     95     def get_report(self,scanid):
     96         url = "https://www.virustotal.com/vtapi/v2/file/report"  
     97         parameters = {"resource":scanid,"apikey":self.apikey}
     98         try:
     99             data = urllib.urlencode(parameters)  
    100             report_requset = urllib2.Request(url,data)  
    101             response = urllib2.urlopen(report_requset)  
    102             result_json = response.read()
    103         except Exception,ex:
    104             #log.log(ex,3,2)
    105             return (-1,ex)
    106         return result_json
    107 
    108     def get_report_from_designated_company(self,company,scanid):
    109         url = "https://www.virustotal.com/vtapi/v2/file/report"  
    110         parameters = {"resource":scanid,"apikey":self.apikey}
    111         try:
    112             data = urllib.urlencode(parameters)  
    113             report_request = urllib2.Request(url,data)  
    114             response = urllib2.urlopen(report_request)  
    115             result_json = response.read()    
    116             response_dict = simplejson.loads(result_json)
    117         except Exception,ex:
    118             #log.log(ex,3,2)
    119             return (-1,ex)
    120         return response_dict.get("scans",{}).get(company,{}).get("result")
    121         
    122     def url_check(self,check_url):
    123         url = "https://www.virustotal.com/vtapi/v2/url/scan"
    124         check_urls = None
    125         if type(check_url) is list:
    126             for item in check_url:
    127                 check_urls += str(item)+'
    '
    128             check_urls = check_urls[0:-1]
    129             parameters = {"url":check_urls,"apikey":self.apikey} 
    130             try:
    131                 data = urllib.urlencode(parameters)  
    132                 url_check_request = urllib2.Request(url,data)  
    133                 response = urllib2.urlopen(url_check_request)  
    134                 result_json = response.read() 
    135             except Exception,ex:
    136                 #log.log(ex,3,2)
    137                 return (-1,ex)
    138             return result_json
    139         check_urls = str(check_url)
    140         parameters = {"url":check_urls,"apikey":self.apikey}  
    141         try:
    142             data = urllib.urlencode(parameters)  
    143             url_check_request = urllib2.Request(url,data)  
    144             response = urllib2.urlopen(url_check_request)  
    145             result_json = response.read()  
    146         except Exception,ex:
    147             #log.log(ex,3,2)
    148             return (-1,ex)
    149         return result_json  
    150         
    151     def get_url_report(self,check_url):
    152         url = "https://www.virustotal.com/vtapi/v2/url/report"
    153         check_urls = None
    154         if type(check_url) is list:
    155             for item in check_url:
    156                 check_urls += str(item)+','
    157             check_urls = check_urls[0:-1]
    158             parameters = {"resource": "http://www.sohu.com","apikey":self.apikey,"scan":"1"}  
    159             try:
    160                 data = urllib.urlencode(parameters)  
    161                 url_check_request = urllib2.Request(url,data)  
    162                 response = urllib2.urlopen(url_check_request)  
    163                 result_json = response.read()
    164             except Exception,ex:
    165                 #log.log(ex,3,2)
    166                 return (-1,ex)
    167             return result_json
    168         check_urls = str(check_url)
    169         parameters = {"resource":check_urls,"apikey":self.apikey}  
    170         try:
    171             data = urllib.urlencode(parameters)  
    172             url_check_request = urllib2.Request(url,data)  
    173             response = urllib2.urlopen(url_check_request)  
    174             result_json = response.read()
    175         except Exception,ex:
    176             #log.log(ex,3,2)
    177             return (-1,ex)
    178         return result_json
    179 
    180     def get_url_report_from_designated_company(self,check_url,company):
    181         url = "https://www.virustotal.com/vtapi/v2/url/report"
    182         check_urls = str(check_url)
    183         parameters = {"resource":check_urls,"apikey":self.apikey}  
    184         try:
    185             data = urllib.urlencode(parameters)  
    186             url_check_request = urllib2.Request(url,data)  
    187             response = urllib2.urlopen(url_check_request)  
    188             result_json = response.read()
    189         except Exception,ex:
    190             #log.log(ex,3,2)
    191             return (-1,ex)
    192         response_dict = simplejson.loads(result_json)  
    193         return response_dict.get('scans',{}).get(company).get('result')
    194     
    195     def ip_check(self,ip):
    196         url = 'https://www.virustotal.com/vtapi/v2/ip-address/report'  
    197         parameters = {'ip':ip,'apikey':self.apikey}  
    198         try:
    199             response = urllib.urlopen('%s?%s'%(url,urllib.urlencode(parameters))).read()  
    200             response_dict = json.loads(response)
    201         except Exception,ex:
    202             #log.log(ex,3,2)
    203             return (-1,ex)
    204         return response_dict 
    205         
    206     def domain_check(self,domain):
    207         url = 'https://www.virustotal.com/vtapi/v2/domain/report'  
    208         parameters = {'domain':domain,'apikey':self.apikey}
    209         try:
    210             response = urllib.urlopen('%s?%s'%(url,urllib.urlencode(parameters))).read()  
    211             response_dict = json.loads(response)  
    212         except Exception,ex:
    213             #log.log(ex,3,2)
    214             return (-1,ex)
    215         return  response_dict 
    216 
    217 
    218 #快速使用函数
    219 def vtocq():
    220     global APIKEY
    221     global MYVTOBJ
    222     global CRONTOL_BIT
    223     if CRONTOL_BIT != 0:
    224         return ('-2','ERROR')
    225     if APIKEY != None:
    226         MYVTOBJ = VirusTotal(APIKEY)
    227     else:
    228         return ('-1','APIKEY information set error!')
    229     CRONTOL_BIT = 1
    230     return MYVTOBJ
    231     
    232 def fcq(file_check,hash_sha1):
    233     global MYVTOBJ
    234     ret = MYVTOBJ.quick_check(file_check)
    235     ret = MYVTOBJ.get_report(hash_sha1) 
    236     ret = simplejson.loads(ret)
    237     vtnumber = ret['positives']
    238     av_macfee = ret['scans']['McAfee']['result']
    239     av_bkav = ret['scans']['Bkav']['result']
    240     av_360 = ret['scans']['Qihoo-360']['result']
    241     ret = { 
    242         "vtnumber":vtnumber,
    243         "av_360":av_360,
    244         "av_bkav":av_bkav,
    245         "av_macfee":av_macfee
    246     }
    247     return ret
    248     
    249 def vt_check(filecheck,hash_sha1):
    250     vtocq()
    251     ret = fcq(filecheck,hash_sha1)
    252     print ret
    253     return ret
    254     
    255 #vt_check('C://PuTTY//plink.exe')
    256 MYVTOBJ = VirusTotal(APIKEY)
    257 print MYVTOBJ.domain_check("lx.com")
    复制代码

    三、其他工具:

    1、站长之家--站长工具:做一些域名、IP、注册邮箱等信息的关联查询。

    2、www.ipip.net:做一些IP地理信息查询。

    博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:pigeon_code@163.com
  • 相关阅读:
    Makefile.am文件配置
    PHP之mb_check_encoding使用
    PHP之mb_internal_encoding使用
    MarkDown编辑使用指南
    test
    [MySQL]修改mysql的root密码
    开启IT之旅_真理不死,信念永恒
    Python pickle 模块
    python注意点
    GAT2.0使用文档(组合接口测试)
  • 原文地址:https://www.cnblogs.com/mutudou/p/14803353.html
Copyright © 2011-2022 走看看