加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

技能接头 | 自动化Web渗出Payload提取技能

发布时间:2018-10-13 03:49:14 所属栏目:业界 来源:zhanghaoyil
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 一、写在前面 做Web安详已经三四年了,从最初的小白到本日的初探道路,小鲜肉已经熬成了油腻大叔。Web安详是一个日新月异的向阳规模,天天的互联网上都在产生着从未袒露的0 Day和N Day进攻。这时一个各人

一个Web会见记录的因素是较量牢靠的,每个部门(要领、路径、参数、HTTP头、Cookie等)都有较量好的布局化特点。因此可以把Web进攻辨认使命抽象为文天职类使命,并且这种思绪应用在了安详规模,若有监视的进攻辨认[1]、 XSS辨认[2] 等。文天职类使命中常用的向量化本领有词袋模子(Bag of Word,BOW)、TF-IDF模子、词向量化(word2vec)等,兜哥的文章[3]已经做了具体的讲授。

颠末对Web日记特点的说明,本文以为行使TF-IDF来对样本举办向量化结果更好。一是颠末尺度化后哀求参数的值仍会有很是多的也许性,这种环境下词袋模子天生的特性向量长度会很是大,并且没法紧缩;二是每个哀求中参数个数有大有小,绝大大都不高出10个,这个时辰词向量能表达的信息很是有限,并不能反应出参数value的非常性;三是TF-IDF可以表达出差异哀求统一参数的值是否更有特异性,尤其是IDF项。

举个例子, http://ip.taobao.com/ipSearch.html?ipAddr=8.8.8.8 是一个查询IP具体信息的页面(真实存在),在某一段时刻内收到了10000个哀求,个中9990个哀求中ipAddr参数值是切合xx.xx.xx.xx这个IP的名目标,通过0×2中提到的尺度化之后,也就是9990个哀求的ipAddr参数为n+.n+.n+.n+ (虽然这里做了简化,数字不必然为多位)。另外有10个哀求的ipAddr是形如alert('XSS')、'or '1' = '1之类的差异的进攻Payload。

颠末TF-IDF向量化后,那9900个哀求ipAddr=n+.n+.n+.n+这一项的TF-IDF值:

  1. TF-IDF normal = TF * IDF = 1 * log(10000/(9990+1)) = 0.001 

而呈现ipAddr=alert('XSS')的哀求的TF-IDF值:

  1. TF-IDF abnormal = TF * IDF = 1 * log(10000/(1+1)) = 8.517 

可以看出非常哀求参数value的TF-IDF是宏大于正常哀求的,因此TF-IDF可以很好地反应出参数value的非常水平。

认识TF-IDF的同窗必然有疑问了,你这TF-IDF的字典也会很大呀,假如样本量很大并且有各式百般的参数value,你的特性向量岂不是稀少得不可了?对付这个题目,我有一个办理方案,也就是将全部的TF-IDF进一步加以处理赏罚,对参数key沟通的TF-IDF项举办求和。设参数key荟萃为K={k1, k2, …, kn},TF-IDF字典为荟萃x={x1, x2, …, xm}。则每个参数key的特性值为:

  1. vn = ∑TF-IDFxn   xn∈{x | x startswith ‘kn=’} 

详细代码在vectorize/vectorizer.py中:

  1. for path, strs in path_buckets.items(): 
  2.         if not strs: 
  3.             continue 
  4.         vectorizer = TfidfVectorizer(analyzer='word', token_pattern=r"(?u)bSS+b") 
  5.         try: 
  6.             tfidf = vectorizer.fit_transform(strs) 
  7.             #putting same key's indices together 
  8.             paramindex = {} 
  9.             for kv, index in vectorizer.vocabulary.items(): 
  10.                 k = kv.split('=')[0] 
  11.                 if k in param_index.keys(): 
  12.                     param_index[k].append(index) 
  13.                 else: 
  14.                     param_index[k] = [index] 
  15.             #shrinking tfidf vectors 
  16.             tfidf_vectors = [] 
  17.             for vector in tfidf.toarray(): 
  18.                 v = [] 
  19.                 for param, index in param_index.items(): 
  20.                     v.append(np.sum(vector[index])) 
  21.                 tfidf_vectors.append(v) 
  22.             #other features 
  23.             other_vectors = [] 
  24.             for str in strs: 
  25.                 ov = [] 
  26.                 kvs = str.split(' ')[:-1] 
  27.                 lengths = np.array(list(map(lambda x: len(x), kvs))) 
  28.                 #param count 
  29.                 ov.append(len(kvs)) 
  30.                 #mean kv length 
  31.                 ov.append(np.mean(lengths)) 
  32.                 #max kv length 
  33.                 ov.append(np.max(lengths)) 
  34.                 #min kv length 
  35.                 ov.append(np.min(lengths)) 
  36.                 #kv length std 
  37.                 ov.append(np.std(lengths)) 
  38.                 other_vectors.append(ov) 
  39.             tfidf_vectors = np.array(tfidf_vectors) 
  40.             other_vectors = np.array(other_vectors) 
  41.             vectors = np.concatenate((tfidf_vectors, other_vectors), axis=1) 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读