一、《Python黑帽子》第四章
GitHub地址:Black_Hat_Python_Chapter4
二、《网络攻防技术》11、12章
第11章 Web应用程序安全攻防
微博、社交网络、云计算托管服务等一系列新型的互联网应用与Web技术紧密的交织在一起,这些新的Web技术为人们的生活带来大量便利的同时,却也带来了前所未有的巨大安全风险。本章从Web技术的服务端和浏览器端来分析Web安全攻防技术的轮廓,以及其中最为基础和重要的攻击技术与防范措施。
一、Web应用程序体系结构及其安全威胁
1、Web应用体系结构
2、Web应用安全威胁
- 针对浏览器和终端用户的web浏览安全威胁
- 针对传输网络的网络协议安全威胁
- 系统层安全威胁
- web服务器软件安全威胁
- web应用程序安全威胁
- web数据安全威胁
二、Web应用安全攻防技术概述
1、Web应用的信息收集
- 手工审查web应用程序结构和源代码
- 静态和动态生成的页面
- 目录结构
- 辅助性文件
- 输入表单
- 查询参数字符串
- 自动下载与镜像web站点页面
- 使用google hacking技术审查与探测web应用程序
- web应用程序安全评估与漏洞探测
2、攻击Web服务器软件
- 数据驱动的远程代码执行安全漏洞
- 服务器功能扩展模块漏洞
- 样本文件安全漏洞
- 源代码泄露
- 资源解析攻击
3、攻击Web应用程序
在2004年发布的《WASC Web安全威胁分类 v1.0》将Web应用程序安全威胁从攻击技术角度分为如下6类:
- 针对认证机制的攻击
- 授权机制的攻击
- 客户端攻击
- 命令执行攻击
- 信息暴露
- 逻辑攻击
OWASP组织公布的Top 10 Web应用程序安全威胁类型:
4、攻击Web数据内容
- 安全敏感数据泄露
- 网站篡改
- 不良信息内容上传
5、Web应用安全防范措施
- web站点网络传输安全防护措施
- 尽量使用https协议,至少对登陆过程进行加密保护
- 通过加密的连接通道来管理web站点
- 对关键的web服务器设置静态绑定MAC-IP映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵监测系统对web服务器实施保护与安全检测,采用冗余等机制来应对拒绝服务攻击
- web站点操作系统及服务安全设防措施
- 对web站点的操作系统与服务器软件进行及时的补丁更新。
- 对服务器的操作系统及开放服务进行远程安全漏洞扫描
- 采用提升系统与服务安全性的一般性设防措施
- web应用程序安全设防措施
- 谨慎考虑是否采用动态页面技术、是否支持客户端执行代码、是否允许接收用户输入。
- 尽量使用具有良好安全声誉及稳定技术支持力量的web应用软件包,并定期更新、扫描漏洞。
- 只在必要是自主或外包开发web应用程序
- 使用日志功能
- web站点数据安全设防措施
- 提高网站内容维护人员的数据安全意识
- 对维护网站的数据安全实施日常监测和防护
三、SQL注入
代码注入根据攻击目标的不同又分为:
- 恶意读取、修改与操纵数据库的SQL注入攻击;
- 在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻击;
- 在Web服务器恶意执行操作系统命令的Shell注入攻击;
- 其他多种多样的注入攻击,如LDAP注入、邮件命令注入、空字节注入、SSI注入、XPath注入、XML注入、XQuery注入等。
在这多种类型的代码注入攻击中,SQL注入是目前最常见的,也是较为直观的一种攻击技术。
1、SQL注入攻击原理
SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。这类被攻击的漏洞被称为SQL注入漏洞,是由于用于输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如引号(')、双引号(")、反引号(`)、分号(;)、百分号(%)、井号(#)、双减号(--)、双下画线(__)等,或者没有进行严格的类型判断,如未判断输入参数是否合法整数类型等,从而使得用户可以输入并执行一些非预期的SQL指令代码。
SQL注入攻击的原理是向Web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。
2、SQL注入攻击步骤和过程
- 发现sql注入点
- 判断后台数据库类型
- 后台数据库管理员用户口令字猜解
- 上传ASP后门,得到默认账户权限
- 本地权限提升
- 利用数据库扩展存储过程执行shell命令
3、SQL注入攻击工具
- 国外工具
- wposion
- wieliekoek.pl
- SPIKE Proxy
- SPI Toolkit
- 国内工具
- CSC
- NBSI
- HDSI
- 阿D注入工具
- WED
- Domain
- Pangolin
4、SQL注入攻击防范措施
- 使用类型安全的参数编码机制
- 凡是来自外部的用户输入,必须进行完备检查
- 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
- 加强SQL数据库服务器的配置与连接
四、XSS跨站脚本攻击
XSS跨站脚本漏洞存在于Web应用程序中,使得攻击者可以在web页面中插入恶意的HTML或JavaScript代码,当用户浏览该网页时,客户端浏览器就会解析和执行这些插入的代码,从而造成获取用户敏感信息、客户端渗透攻击等危害后果。
1、XSS攻击技术原理
XSS攻击的根源同样是Web应用程序对用户输入内容的安全验证与过滤不够完善,在许多流行的Web论坛、博客、留言本及其他允许用户交互的Web应用程序中,用户提交内容中可以包含HTML、JavaScript及其他脚本代码,而一旦Web应用程序没有对这些输入的合法性进行有效检查与过滤,就很有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。
而与代码注入不同的是,XSS攻击的最终目标并非Web服务器,Web服务器上的应用程序在XSS攻击场景中发挥的角色是“帮凶”,而非“受害者”,真正的“受害者”则是访问这些Web服务器的其他用户。攻击者可以利用Web应用程序中的安全漏洞,在服务器端网页中插入一些恶意的客户端脚本代码,在Web服务器上产生一些恶意攻击页面。
2、XSS攻击类型
- 持久性XSS攻击
- 非持久性XSS攻击
- 攻击者构造出一个包含恶意脚本的bank.com登录请求链接,并通过Email/HTTP等方式将该攻击链接发送给其他bank.com网站用户;
- 受害用户点击攻击链接后,将会把恶意链接中包含的恶意脚本当做用户名参数提交给bank.com的登录处理网页;
- 由于bank.com登录处理页面存在XSS漏洞,将会在反馈的欢迎页面中包含恶意客户端脚本;
- 攻击者的恶意客户端脚本在受害用户浏览器中执行,通常会驱动浏览器向攻击者发送会话令牌,如会话ID、Cookie信息等;
- 攻击者获得用户会话令牌之后,就可以劫持用户会话,或者伪造用户登录bank.com,并可实施进一步攻击。
3、XSS攻击防范措施
- 服务器端防范措施
- 输入验证
- 输出净化
- 消除危险的输入点
- 客户端防范措施
- 提高浏览器访问非受信网站时的安全等级
- 关闭Cookie功能或设置Cookie只读
- 使用安全浏览器
第12章 Web浏览器安全攻防
一、Web浏览器的技术发展与安全威胁
1、Web浏览器战争与技术发展
2、Web浏览的安全问题与威胁
二、Web浏览端的渗透攻击威胁---网页木马
网页木马的定义特征
通过对网页木马起源背景和存在技术基础的分析,我们可以认知到网页木马从本质特征上利用了现代Web浏览器软件中所支持的客户端脚本执行能力,针对Web浏览端软件安全漏洞实施客户端渗透攻击,从而取得在客户端主机的远程代码执行权限来植入恶意程序。
网页挂马机制
- 内嵌HTML标签
- 恶意Script叫脚本
- 内嵌对象链接
- ARP欺骗挂马
混淆机制
除了引入中间跳转节点进行嵌套链接,并集成多种渗透攻击代码之外,网页木马攻击网络中往往采用了大量的混淆技术,来对抗反病毒软件的检测,并提高反病毒工程师的分析难度,从而使得网页木马攻击网络更难被检测和摧毁,这些混淆技术也被称为“免杀”。
网页木马的检测与分析技术
- 基于特征码匹配的传统检测方法
- 基于统计与机器学习的静态分析方法
- 基于动态行为结果判定的检测分析方法
- 基于模拟浏览器环境的动态分析检测方法
网页木马防范措施
- 操作系统本身提供和第三方软件提供的在线更新
- 安装并实时更新一款反病毒软件
- 养成良好的上网浏览习惯
- 使用Mac OS/Linux系统,使用Chrome、Safari、Opera等浏览器上网
三、教材实践练习
SEED SQL注入实验
环境及准备
攻击环境使用SEEDUbuntu-Aug-2010。在SEED中需要用到:FireFox、Apache服务器、phpBB2(本地服务器的攻击测试页面,SEED中已经安装)。
phpBB2环境本地目录位于/var/www/SQL/SQLLabMysqlPhpbb/。
首先启动SEED自带的Apache服务器
- PHP提供了对抗SQL注入的机制Magic Quote,我们需要把这个机制关闭:
- Go to/etc/php5/apache2/php.ini.
- Find the line:magicquotesgpc = On.
- Change it to this:magicquotesgpc = Off.
- Restart the apache server by running"sudo service apache2 restart".
任务一:Select语句攻击
进入http://www.sqllabmysqlphpbb.com访问phpBB2。
在进入phpBB之前系统会要求你登陆。这个登陆认证由服务器上的login.php实现,需要用户输入用户名和密码来通过认证。
用户键入用户名和密码后,login.php会将它们与mysql数据库中的username和user_password字段进行比较,如果匹配就登陆成功。和其他大多数web应用程序一样,PHP程序使用SQL语言与背后的数据库交互。我们进入phpBB2环境目录,查看login.php,找到关于checkpassword的源代码:
username是一个变量,用于保存在Usernametextbox中键入的字符串, password是一个变量,用于保存在thePasswordtextbox中键入的字符串。 用户在这两个文本框中的输入直接放在SQL查询字符串中。
sql注入原理就在于此,通过字符串的直接插入,灵活运用单引号'和注释符号#可以做到一定程度上修改sql查询。
我们返回phpBB2的主页,点击Memberlist,查看当前的注册用户,我们选择bob进行实验:
在用户名处输入bob’ #
,#是mysql中的注释符号,他把上面源码中AND后面检查密码的条件给注释掉使其不执行,实现不用输入密码即可登陆此用户,实现SQL注入操作。实现效果如下:
任务二:Update语句注入
在不知道他/她的密码的情况下更改其他用户的个人资料。 例如,如果以bob身份登录,则目标是使用此漏洞修改Ted的个人资料信息,包括Ted的密码。 攻击发生后,应该能够登录Ted的帐户。
- 在profile页面修改个人信息,想办法造成一个sql语法错误,如在某位置输入:
a'
,会返回sqldebug信息。
看到当前我使用bob的账户登入,在报错处user_id为4,再返回memberlist看到ted的编号是5,推测ted的user_id为6,所以构造a' where user_id = 6#
来修改ted的密码。但需要知道bob目前账户的密码。
SEED XSS攻击实验
环境及准备
同上
任务一:发布恶意消息以显示警报窗口
发布包含JavaScript的恶意消息以显示警报窗口,应在消息中提供JavaScript以及用户注释。 以下JavaScript将显示一个警告窗口:<script>alert('XSS'); </ script>
。如果在留言板中发布此JavaScript以及评论,那么查看此评论的任何用户都将看到警报窗口。
任务二:发布恶意消息以显示Cookie
在包含JavaScript代码的留言板上发布恶意消息,这样每当用户查看此消息时,将打印出用户的cookie。使用以下包含JavaScript代码的消息。
<script>alert(document.cookie);</script>
弹出cookie信息:
四、Kali Security
数据库评估
1、BBQSql
BBQSQL是用Python编写的一个盲目的SQL注入框架(盲注SQL)。在攻击棘手的SQL注入漏洞时非常有用。BBQSQL也是一种半自动化工具,可以让那些难以触发SQL注入发现的用户进行相当多的定制。该工具的建立是数据库不可知的,非常通用。它还有一个直观的UI,使设置攻击更容易。Python gevent也被实现,使得BBQSQL非常快。
2、DBPwAudit
DBPwAudit是一个Java数据库密码审计工具,是一个可以执行在线审计密码质量的数据库引擎。该应用程序可以通过复制新的JDBC驱动程序到JDBC目录来添加额外的数据库驱动程序。使用方法如下:
3、HexorBase
图形化的密码破解与连接工具,开源。该工具是少有的图形界面工具,它支持MySQL、Oracle、PostgreSQL、SQLite和SQL Server五大主流数据库。它允许安全人员指定用户字典和密码字典,然后实施字典攻击。同时,它还提供对应的图形界面客户端,允许安全人员使用破解出的用户名和密码,对数据库进行远程管理。
4、Jsql Injection
jsql是一款轻量级安全测试工具,可以检测SQL注入漏洞。它跨平台(Windows,Linux,Mac OS X,Solaris)、开源且免费。将存在注入漏洞的URL贴进来即可进行相应的漏洞利用。图形化界面比较亲民,但是使用效果有待改善。
5、MDBTools
包括MDB-Export(Export data in an MDB databse table to CSV format),以及MDB-Dump,MDB-Parsecsv,MDB-SQL,MDB-tables等子工具,具体环境具体使用。
6、Oracle Scanner
Oscanner是一个用Java开发的Oracle评估工具。
7、SIDGusser
同样是针对Oracle的SID进行暴力枚举的工具。SID为Oracle实例名,Oracle连接字符串,通过实例名+用户+密码连接。
8、SQLDict
是一个用户名密码枚举工具,本是一个Windows下程序,通过Wine在linux中模拟运行。
9、tnscmd10g
允许向Oracle数据库中注入命令。
10、sqlsus
sqlsus是一个开放源码的MySQL注入和接管工具,sqlsus使用perl编写,基于命令行界面。sqlsus可以获取数据库结构,注入你自己的SQL语句,从服务器下载文件,爬行web站点可写目录,上传和控制后门,克隆数据库等等。最好用的两点就是注射获取数据速度非常快,另外一个最大的特点就是自动搜索可写目录。
11、sqlninja
sqlninja是一款perl编写的一个专门针对Microsoft SQL Server的sql注入工具。和其他注入工具不同,sqlninja没有将精力用在跑数据库上,而是侧重于获得一个shell。
12、sqlmap
是sql注入界的神器。SQLMAP是一个开源的渗透测试工具,它主要用于自动化地侦测和实施SQL注入攻击以及渗透数据库服务器。SQLMAP配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,还可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。
Web应用代理
1、BurpSuite
用于攻击web应用程序集成平台。
2、OwaspZAP
OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。OWASP-ZAP主要拥有以下重要功能:本地代理、主动扫描、被动扫描、Fuzzy、暴力破解。
3、paros proxy
是一个对Web 应用程序的web漏洞评估的代理程序,即一个基于Java 的web 代理程序,可以评估Web 应用程序的漏洞。它支持动态地编辑/查看HTTP/HTTPS,从而改变cookies和表单字段等项目。
4、Webscarab
一款代理软件,包括HTTP代理,网络爬行、网络蜘蛛,会话ID分析,自动脚本接口,模糊测试工具, WEB格式的编码/解码,WEB服务描述语言和SOAP解析器等功能模块。WebScarab基于GNU协议,使用Java编写,是WebGoat中所使用的工具之一。
5、Vega
是一个开放源代码的web应用程序安全测试平台,Vega能够帮助你验证SQL注入、跨站脚本(XSS)、敏感信息泄露和其它一些安全漏洞。 Vega使用Java编写,有GUI,可以在Linux、OS X和windows下运行。
BurpSuite
打开浏览器,点击Preferences->Privacy->Advanced->Network->Settings,默认情况下,设置本地服务器,设置HTTP代理127.0.0.1和端口8080。
下面在burp suite窗口中检查本地服务运行情况,在burp suite窗口中,点击选项卡中的'proxy',然后点击下一级的‘Options’。在上面的Proxy Listeners栏中看到本地的127.0.0.1和8080端口的选项,左侧的running中已经选定,就可以开始使用Burp Suite捕获流量了。
BurpSuite具有以下模块:
- Target:包含了SiteMap,用你的目标应用程序的详细信息。它可以让你定义哪些对象在范围上为你目前的工作,也可以让你手动测试漏洞的过程,Target分为site map和scope两个选项卡。
- Proxy:Proxy相当于BurpSuite的心脏,通过拦截,查看和修改所有的请求和响应您的浏览器与目标Web服务器之间传递。
- Spider:通过跟踪 HTML 和 JavaScript以及提交的表单中的超链接来映射目标应用程序,它还使用了一些其他的线索,如目录列表,资源类型的注释,以及robots.txt文件。结果会在站点地图中以树和表的形式显示出来,提供了一个清楚并非常详细的目标应用程序视图。Burp Spider 能使你清楚地了解到一个 web 应用程序是怎样工作的,让你避免进行大量的手动任务而浪费时间,在跟踪链接,提交表单,精简 HTNL 源代码。可以快速地确人应用程序的潜在的脆弱功能,还允许你指定特定的漏洞,如 SQL 注入,路径遍历。
- Scanner:是一个进行自动发现web应用程序的安全漏洞的工具。它是为渗透测试人员设计的,并且它和你现有的手动执行进行的 web 应用程序半自动渗透测试的技术方法很相似。
- intruder:是burp 套件的优势,他提供一组特别有用的功能。它可以自动实施各种定制攻击,包括资源枚举、数据提取、模糊测试等常见漏洞等。在各种有效的扫描工具中,它能够以最细化、最简单的方式访问它生产的请求与响应,允许组合利用个人智能与该工具的控制优点。
- sequencer: 对会话令牌,会话标识符或其他出于安全原因需要随机产生的键值的可预测性进行分析。
- Decoder: 转化成规范的形式编码数据,或转化成各种形式编码和散列的原始数据。它能够智能识别多种编码格式,使用启发式技术。
- Compare: 是一个简单的工具,执行比较数据之间的任何两个项目(一个可视化的“差异”)。在攻击一个Web 应用程序的情况下,这一要求通常会出现当你想快速识别两个应用程序的响应之间的差异(例如,入侵者攻击的过程中收到的两种反应之间之间,或登录失败的反应使用有效的和无效的用户名)之间,或两个应用程序请求(例如,确定不同的行为引起不同的请求参数)
Fuzz工具
模糊测试(Fuzz testing)是一种自动化软件测试技术,涉及提供无效,意外或随机数据作为计算机程序的输入。 然后监视程序是否存在异常,例如崩溃,内置代码断言失败或潜在的内存泄漏。 通常,模糊器用于测试采用结构化输入的程序。
模糊测试的执行过程很简单,大致如下:
1、准备好随机或者半随机方式生成的数据;
2、将准备好的数据导入被测试的系统;
3、用程序打开文件观察被测试系统的状态;
4、根据状态判断是否存在漏洞。
Fuzz常用的工具有:Bed、ohrwurm、PowerFuzzer、Wfuzz、XSSer。
1、Bed
是一个纯文本协议的Fuzz工具,能够检查常见的漏洞,如缓冲区溢出,格式串漏洞,整数溢出等。BED通过加载插件,向目标主机发送攻击数据。如果发现目标无法响应,说明目标可能存在溢出区漏洞。经过多次测试验证,就可以判断漏洞出现的位置。然后通过手工执行验证,代码审核、反编译等方式,就可以找出漏洞具体触发机制,从而加以利用。
2、ohrwurm
一个迷你的对RTP的fuzz工具,主要针对SIP通信的fuzz。
3、PowerFuzzer
Kali Linux自带的一款Web模糊测试工具。该工具基于各种开源模糊测试工具构建,集成了大量安全信息。该工具高度智能化,它能根据用户输入的网址进行自动识别XSS、SQL注入、CRLF、HTTP500等漏洞。同时,用户可以指定用户和密码等身份验证信息,也可以指定Cookie信息。同时,用户可以直接指定该工具是否使用代理。由于该工具开发较早,对非ASCII编码(如包含中文的网站)网站支持不好,分析中文网站容易出现异常错误。
4、Wfuzz
wfuzz不仅仅是一个web扫描器,Wfuzz是一个为暴力破解Web应用程序而设计的工具,它可以用于查找未链接的资源(目录,servlet,脚本等),暴力GET和POST参数以检查不同类型的注入(SQL,XSS,LDAP等),强力表单参数(用户/密码),Fuzzing等。
5、XSSer
XSSer专门针对XSS漏洞,主要是对一个页面或点进行xss测试,判断是否有XSS的漏洞。