《Python 黑帽子》第四章
代码托管:[https://github.com/jsjliyang/python3-Black.Hat/tree/master/chapter4)
教材《网络攻防技术》第十一、十二章学习
十一章 web应用程序安全攻防
11.1 web应用程序体系结构及其安全威胁
- 11.1.1 web应用体系结构
- 11.1.2 web应用安全威胁
- 针对浏览器和终端用户的Web浏览安全威胁
- 针对传输网络的网络协议安全威胁
- 系统层安全威胁
- Web服务器软件安全威胁
- Web应用程序安全威胁
- Web数据安全威胁
11.2 web应用安全攻防技术概述
- 11.2.1 web应用的信息收集
与系统和网络攻击类似,针对Web应用的攻击也需要首先进行信息情报的收集,对目标Web应用服务进行发现与剖析,标识出它的基本轮廓,具体包括服务器域名、IP地址和虚拟IP地址,Web服务器端口与其他开放服务,Web站点类型和版本,Web应用程序类型与版本,以及Web服务器和Web应用程序中存在的安全漏洞信息等。- 手工审查web应用程序结构与源代码
- 自动下载与镜像Web站点页面
- linux下工具:Lynx、wget
- Windows上工具:Teleport Pro、Offline Explorer
- 替代工具:迅雷、Flashget
- 使用Google Hacking技术审查与探测Web应用程序
- Web应用程序安全评估与漏洞探测
- 11.2.2 攻击web服务器软件
web服务器平台中的安全漏洞主要分为如下几类:- 数据驱动的远程代码执行安全漏洞
- 服务器功能扩展模块漏洞
- 样本文件安全漏洞
- 源代码泄露
- 资源解析攻击
- 11.2.3 攻击web应用程序
在Web应用各个层次上,目前安全最薄弱的环节在于Web应用程序。在2004年发布的《WASC Web安全威胁分类v1.0》将Web应用程序安全威胁从攻击技术角度分为如下6类。- 针对认证机制的攻击
- 授权机制的攻击
- 客户端攻击
- 命令执行攻击(包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入、SSL注入)
- 信息暴露
- 逻辑攻击(包括功能滥用、拒绝服务攻击、对抗自动程序不完善、处理验证过程不完善等)
- 11.2.4 攻击web数据内容
- 安全敏感数据泄漏
- 网站篡改
- 不良信息内容上传
- 11.2.5 web应用安全防范措施
- Web站点网络传输安全设防措施:
(1)尽量使用HTTPS来保障Web站点传输时的保密性、完整性与身份真实性,至少对登陆过程进行加密保护
(2)通过加密的连接通道来管理Web站点
(3)对关键的Web服务器,设置静态绑定MAC-IP映射 - Web站点操作系统及服务安全设防措施:
(1)对Web站点的操作系统与服务器软件进行及时的补丁更新
(2)对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描,在攻击者利用安全漏洞实施攻击之前发现和修补这些安全漏洞
(3)采用提升系统与服务安全性的一般性设防措施 - Web应用程序安全设防措施:
(1)提高安全认识,开发时兼顾安全性、访问性能与便捷性
(2)使用具有良好安全声誉及稳定技术支持力量的web应用软件包
(3)只在必要时候自主或外包开发web应用程序
(4)使用web服务器软件提供的日志功能 - Web站点数据安全设防措施:
(1)提高网站内容维护人员的数据安全意识
(2)对维护网站的数据安全实施日常监测和防护
- Web站点网络传输安全设防措施:
11.3 SQL注入
根据目标的不同分为:
- 恶意读取、修改与操纵数据库的SQL注入攻击,是最常见也是较为直观的一种攻击技术
- 在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻
- 在Web服务器端恶意执行操作系统命令的Shell注入攻击
- 其他多种多样的攻击如LDAP注入、邮件命令注入
11.4 xss跨站脚本攻击
XSS攻击的根源同样是Web应用程序对用户输入内容的安全验证与过滤不够完善,在许多流行的Web论坛、博客、留言本及其他允许用户交互的Web应用程序中,用户提交内容中可以包含HTML、JavaScript及其他脚本代码,而一旦Web应用程序没有对这些输入的合法性进行有效检查与过滤,就很有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。
而与代码注入不同的是,XSS攻击的最终目标并非Web服务器,Web服务器上的应用程序在XSS攻击场景中发挥的角色是“帮凶”,而非“受害者”,真正的“受害者”则是访问这些Web服务器的其他用户。攻击者可以利用Web应用程序中的安全漏洞,在服务器端网页中插入一些恶意的客户端脚本代码,在Web服务器上产生一些恶意攻击页面。
- 11.4.1 XSS攻击技术原理
与代码注入类似,XSS攻击的根源同样是Web应用程序对用户输入内容的安全验证与过滤不够完善。 - 11.4.2 XSS攻击类型
两种主要的XSS漏洞类型:- 持久性XSS漏洞(也称作存储型XSS漏洞,是危害最为严重的XSS漏洞)
- 非持久性XSS漏洞(也称为反射XSS漏洞)
除了传统的服务器端Web应用程序中存在的XSS漏洞及相应攻击之外,安全业界又发现了一种在客户端代码中存在的XSS漏洞及攻击技术,被称为基于DOM的XSS。
- XSS攻击步骤
(1)攻击者构造出一个包含恶意脚本的bank.com登录请求链接,并通过Email/HTTP等方式将该攻击链接发送给其他bank.com网站用户;
(2)受害用户点击攻击链接后,将会把恶意链接中包含的恶意脚本当做用户名参数提交给bank.com的登录处理网页;
(3)由于bank.com登录处理页面存在XSS漏洞,将会在反馈的欢迎页面中包含恶意客户端脚本;
(4)攻击者的恶意客户端脚本在受害用户浏览器中执行,通常会驱动浏览器向攻击者发送会话令牌,如会话ID、Cookie信息等;
(5)攻击者获得用户会话令牌之后,就可以劫持用户会话,或者伪造用户登录bank.com,并可实施进一步攻击。 - 11.4.4 XSS攻击防范措施
对XSS跨站脚本的防范分为服务器端和客户端两个方面。- 服务器端防范措施:①输入验证②输出净化③消除危险的输入点。
- 客户端防范措施:提升浏览器的安全设置。
十二章 Web浏览器安全攻防
12.1 web浏览器安全威胁
- Web浏览器软件安全困境三要素:复杂性、可扩展性、连通性。
(1)复杂性:现代浏览器软件的复杂性意味着更多的错误和安全缺陷,也就导致了目前浏览器软件中存在着可被渗透攻击所利用的大量安全漏洞。
(2)可扩展性:现代Web浏览器可能最突出可扩展特性支持的软件类型,目前几乎所有的现代浏览器软件都支持第三方插件扩展机制。而第三方扩展插件的开发过程缺乏安全保证,出现安全漏洞的情况更为普遍。
(3)连通性:现代Web浏览器本身就是为用户实现“随时随地浏览互联网”这一目标而存在的,因此浏览器软件始终工作在联网状态,一旦其中存在安全漏洞,就很容易被网络上的威胁源所利用与攻击。 - Web浏览安全威胁位置
- 针对传输网络的网络协议安全威胁
- 针对Web浏览端系统平台的安全威胁
- 针对Web浏览器软件及插件程序的渗透攻击威胁
- 针对互联网用户的社会工程学攻击威胁
12.2 Web浏览端渗透攻击威胁——网页木马
- 本质核心:利用脚本语言实现对web浏览端软件安全漏洞的渗透攻击,从而向客户端主机中植入恶意程序。
- 防范:提升操作系统与浏览端平台软件的安全性。
12.3 网络钓鱼(phishing)
- 网络钓鱼是社会工程学在互联网中广泛实施的一种典型攻击方式。
- 原理:通过大量发送声称来自于银行或其他知名机构的欺骗性垃圾邮件,意图引诱收信人给出个人敏感信息。
- 普遍技术流程:
(1)攻击者扫描网段,寻找存有漏洞的服务器;
(2)服务器被攻陷,并被安装一个rootkit或口令保护的后门工具;
(3)攻击者从加密的后门工具获得对服务器的访问权,并下载已经构建完毕的钓鱼网站内容,进行一些网站搭建配置与测试工作,使得钓鱼网站上线运行;
(4)攻击者下载群发电子邮件工具,并大规模散发垃圾邮件;
(5)网页浏览的流量开始到达钓鱼网站,受害者访问并给出个人敏感信息,攻击者通过后台脚本收集这些信息。 - 防范:增强安全意识、提高警惕性。
教材十一、十二章作业
SEED SQL注入实验
环境需求
vmware镜像SEEDUbuntu9-Aug-2010。下载地址http://www.cis.syr.edu/ ̃wedu/seed/
- 启动apache服务器
- 关闭防御SQL注入的保护,修改
/etc/php5/apache2/php.ini
- 重启apache服务器
- 使用URL:http://www.sqllabmysqlphpbb.com访问thephpBB2server
select注入
用户输入用户名和密码后,登录.phpprogram将使用用户提供的数据来确定它们是否与数据库中任何记录的用户名和用户密码字段匹配。 如果匹配,则表示用户提供了正确的用户名和密码组合,应该允许登录。 与大多数其他Web应用程序一样,PHP程序使用标准SQL语言与其后端数据库进行交互。 对于phpBB2,在login.php中构造以下SQL查询来验证用户:
SELECT user_id, username, user_password, user_active, user_level,user_login_tries, user_last_login_try
FROM USERS_TABLE
WHERE username = ’$username’ AND user_password = ’md5($password)’;
if (found one record)
then {allow the user to login}
在上面的SQL语句中,USERSTABLE是php中的宏,它将被用户名称替换为:phpbbusers,username是一个变量,用于保存在Usernametextbox中键入的字符串, password是一个变量,用于保存在thePasswordtextbox中键入的字符串。 用户在这两个文本框中的输入直接放在SQL查询字符串中。sql注入原理就在于此,通过字符串的直接插入,灵活运用单引号'
和注释符号#
可以做到一定程度上修改sql查询。
update注入
在不知道他/她的密码的情况下更改其他用户的个人资料。 例如,如果以Alice身份登录,则目标是使用此漏洞修改Ted的个人资料信息,包括Ted的密码。 攻击发生后,应该能够登录Ted的帐户。
- 在profile页面修改个人信息,想办法造成一个sql语法错误,如在某位置输入:
a'
,会返回sqldebug信息。 - 查看代码(/var/www/OriginalPhpbb/includes/usercp_register.php),发现密码字段是uesr_password
- 在memberlist界面发现ted用户的uid为6
- 对想要改的密码123456作md5,123456的md5值为E10ADC3949BA59ABBE56E057F20F883E。
- 在profile靠后一点的位置输入使用语句
a', user_password='E10ADC3949BA59ABBE56E057F20F883E' where user_id = 6 # '
修改密码(选择靠后一点是为了防止被注释) - 使用新密码修改成功
SEED XSS攻击实验
环境需求
同上,vmware镜像SEEDUbuntu9-Aug-2010。下载地址http://www.cis.syr.edu/ ̃wedu/seed/。
发布恶意消息以显示警报窗口
发布包含JavaScript的恶意消息以显示警报窗口,应在消息中提供JavaScript以及用户注释。 以下JavaScript将显示一个警告窗口:alert('XSS'); script>
。如果在留言板中发布此JavaScript以及评论,那么查看此评论的任何用户都将看到警报窗口。
发布恶意消息以显示Cookie
在包含JavaScript代码的留言板上发布恶意消息,这样每当用户查看此消息时,将打印出用户的cookie。使用以下包含JavaScript代码的消息。
Hello everybody, welcome to this message board.
kali视频学习
16.KaliSecruity-漏洞分析之数据库评估(一)
- BBQSql,是一个Python编写的盲注工具(blind SQL injection framework),当检测可疑的注入漏洞时会很有用。它也是一个半自动工具,允许客户自定义参数。
- DBPwAudit,数据库用户名密码破解工具,通过挂载字典对目标数据库进行密码暴力猜解,目前支持的数据库包括SQLServer、MySQL、Oracle、DB2。
命令示例如下(以mysql为例):./dbpwaudit.sh -s IP -d (数据库名称) -D mysql(数据库类型) -U username(字典) -P password(字典)
- HexorBase,图形化的密码破解与连接工具,支持MySQL、Oracle、PostgreSQL、SQLite和SQL Server五大主流数据库。允许安全人员指定用户字典和密码字典,然后实施字典攻击,并且允许安全人员使用破解出的用户名和密码,对数据库进行远程管理。
- jSQL,是一款Java开发的轻量级远程服务器数据库注入漏洞测试工具,且免费、开源、跨平台 (Windows, Linux, Mac OS X, Solaris)。将存在注入漏洞的URL贴进去即可进行响应的漏洞利用。
- MDBTools,是一组用于读取Microsoft Access数据库(MDB)文件的库和应用程序。
- Oracle Scanner,是基于Java开发的一个Oracle评估框架。
它有一个基于插件的架构并附带几个插件,目前可以实现:- Sid枚举
- 密码测试(常见&字典)
- 枚举Oracle版本
- 枚举账号权限
- 枚举账号哈希
- 枚举审计信息
- 枚举密码策略
- 枚举数据库链接
- SIDGuesser,是针对Oracle的SID进行暴力枚举的工具。
- SQLdict,是一个Windows程序,是一款用户名密码枚举工具,运行时会自动调用Kali Linux内置的Wine组件。渗透测试人员只要指定目标IP地址、账户名和密码字典,就可以实施密码爆破。
17.Kali漏洞分析之数据库评估
- tnscmd10g,允许向Oracle数据库注入数据。
- SQLSUS,一个开放源代码的MySQL注入和接管工具,使用perl编写,使用命令行界面。它可以获取数据库结构,注入自己的SQL语句,从服务器下载文件,爬行web站点可写目录,上传和控制后门,克隆数据库等。使用时,首先使用
sqlsus -g test.conf
生成一个配置文件。在配置文件中,设置注入路径以及注入的各项参数,如修改our $url_start = “”
,引号里写入输入注入点。然后使用sqlsus test.conf
命令加载该文件,实施渗透测试。get databases
获取数据库,set database
设定数据库,get tables
获取表。 - SQLninja,一款Perl编写的一个专门针对microsoft SQL server的SQL注入工具,侧重于获得一个shell。
- SQLMAP,是一个开源的渗透测试工具,它主要用于自动化的侦测和实施SQL注入以及渗透数据库服务器,SQLMAP配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,还可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。
18.Kali漏洞分析之WEB应用代理
- BurpSuite,用于攻击web应用程序集成平台。Burb Suite通过默认端口8080上运行,使用这个代理,可以截获并修改从客户端到web应用程序的数据包。
- OwaspZAP,OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。也可以说ZAP是一个中间人代理。它能够获取你对Web应用程序发出的所有请求以及你从中收到的所有响应。它即可以用于安全专家、开发人员、功能测试人员,甚至是渗透测试入门人员。它也是经验丰富的测试人员用于手动安全测试的绝佳工具。OwaspZAP像Burp suite一样使用代理的方式来截取网站。
- paros proxy,是一个对Web 应用程序的web漏洞评估的代理程序,即一个基于Java 的web 代理程序,可以评估Web 应用程序的漏洞。它支持动态地编辑/查看HTTP/HTTPS,从而改变cookies和表单字段等项目。它包括一个Web 通信记录程序,Web 圈套程序(spider),hash 计算器,还有一个可以测试常见的Web 应用程序攻击(如SQL注入式攻击和跨站脚本攻击)的扫描器。
- WebScarab,一款代理软件,包括HTTP代理,网络爬行、网络蜘蛛,会话ID分析,自动脚本接口,模糊测试工具, WEB格式的编码/解码,WEB服务描述语言和SOAP解析器等功能模块。WebScarab基于GNU协议,使用Java编写,是WebGoat中所使用的工具之一。
- Vega,是一个开放源代码的web应用程序安全测试平台,Vega能够帮助你验证SQL注入、跨站脚本(XSS)、敏感信息泄露和其它一些安全漏洞。 Vega使用Java编写,有GUI,可以在Linux、OS X和windows下运行。Vega类似于 Paros Proxy, Fiddler, Skipfish and ZAproxy。
19.Kali漏洞分析之BurpSuite
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 应用程序的情况下,这一要求通常会出现当你想快速识别两个应用程序的响应之间的差异(例如,入侵者攻击的过程中收到的两种反应之间之间,或登录失败的反应使用有效的和无效的用户名)之间,或两个应用程序请求(例如,确定不同的行为引起不同的请求参数)
Proxy代理模块是BurpSuite的核心功能,拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流。首先建立代理监听(Proxy–> Options功能下),可以看到默认值127.0.0.1,端口8080(可以点击Edit进行修改,或者添加新的监听端口)。然后打开浏览器,点击Preferences->Privacy->Advanced->Network->Settings,设置HTTP代理和端口。标签说明如下。
- intercept:用于显示和修改Http请求和相应,通过你的浏览器和web服务器之间拦截流量实现功能,在Proxy的选项中,可以配置拦截规则来确定是什么请求和相应被拦截(例如,范围内的项目,特定文件扩展名、项目要求与参数)
- forward:当你编辑之后,发送信息到服务器或浏览器
- Drop:当你不想发送这次信息可以点击drop放弃这个信息
- interceptionis on/off: 这个按钮用来切换和关闭所有拦截,如果按钮显示interceptions on,表示请求和相应将被拦截或自动转发,根据配置的拦截规则配置代理选项,如果按钮显示interception is off则显示拦截之后的所有信息将自动转发。
- Action:说明一个菜单可用的动作行为操作可以有哪些操作功能
- Http History:这个选项是来显示所有请求产生的细节,显示的有目标服务器和端口,Http方法,URL,以及请求中是否包含参数或被人修改,Http的相应状态吗,响应字节大小,响应的MIME类型,请求资源的文件类型,HTML页面的标题,是否使用ssl,远程IP地址,服务器设置的cookie,请求的时间。在记录表中,右击一个或多个选项,就会显示一个上下文菜单让你执行一些操作,包括修改目标范围,把这些选项发送到其他Burp工具中,或者删除这些项。而且还可以通过配置过滤器来确定哪些顶层的数据项显示在表格里。有效应用程序包含了大量的内容,如图像,CSS 等,这些有利于从视图上隐藏的。AJAX 应用程序产生大量相似的异步请求,你可能会想把他们从视图上过滤出来来查看一些感兴趣的项。在这个历史记录表的顶部有一个过滤栏。单击会有一个弹出窗口,让你来精准地配置显示哪些内容在表格里。
- options:该选项主要用于设置代理监听、请求和响应,拦截反应,匹配和替换,ssl等,其中有八大选项:Proxy Listeners、Intercept Client Requests、Intercept Server Responses、Intercept WebSockets Messages、Response Modification、Match and replace、SSL Pass Through、Miscellaneous。
20.Kali漏洞分析之Fuzz工具
在安全测试中,模糊测试(fuzz testing)是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。能够在一项产品投入市场使用之前对潜在的应当被堵塞的攻击渠道进行提示。
模糊测试的执行过程很简单,大致如下:
1、准备好随机或者半随机方式生成的数据;
2、将准备好的数据导入被测试的系统;
3、用程序打开文件观察被测试系统的状态;
4、根据状态判断是否存在漏洞。
- Bed,是一个纯文本协议的Fuzz工具,能够检查常见的漏洞,如缓冲区溢出,格式串漏洞,整数溢出等。BED通过加载插件,向目标主机发送攻击数据。如果发现目标无法响应,说明目标可能存在溢出区漏洞。经过多次测试验证,就可以判断漏洞出现的位置。然后通过手工执行验证,代码审核、反编译等方式,就可以找出漏洞具体触发机制,从而加以利用。
- ohrwurm,一个迷你的对RTP的fuzz工具,主要针对SIP通信的fuzz。
- PowerFuzzer,Kali Linux自带的一款Web模糊测试工具。该工具基于各种开源模糊测试工具构建,集成了大量安全信息。该工具高度智能化,它能根据用户输入的网址进行自动识别XSS、SQL注入、CRLF、HTTP500等漏洞。同时,用户可以指定用户和密码等身份验证信息,也可以指定Cookie信息。同时,用户可以直接指定该工具是否使用代理。由于该工具开发较早,对非ASCII编码(如包含中文的网站)网站支持不好,分析中文网站容易出现异常错误。
- Wfuzz,针对WEB应用的模糊测试工具,可以进行web应用暴力猜解,也支持对网站目录、登录信息、应用资源文件等的暴力猜解,还可以进行get及post参数的猜解,sql注入、xss漏洞的测试等。所有功能依赖于字典。
- XSSer,XSSer专门针对XSS漏洞,主要是对一个页面或点进行xss测试,判断是否有XSS的漏洞。
参考资料
- BurpSuite基础教程
- SEED实验系列:Collabtive系统SQL注入实验
- 网络攻防实验-XSS攻击-基于Elgg-Task1-4