20199126 2019-2020-2 《网络攻防实践》第11周作业
前言
这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里:https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10737
我在这个课程的目标是:学习网络攻防技术相关知识,掌握相关技能。
这个作业在哪个具体方面帮助我实现目标 :初步学习Web应用程序安全攻防。
1.实践内容
1.1 Web应用程序体系结构及其安全威胁
1.1.1 Web应用体系结构
Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(JavaScript、HTML)所编写,或能够在浏览器控制的环境中运行(如Java Applet),依赖于浏览器来对应用程序进行渲染与执行。
- 浏览器(Browser)
- Web服务器(Web Server):
- Web应用程序(Web Application)
- 数据库(Database)
- 传输协议HTTP/HTTPS
1.1.2 Web应用安全威胁
- 针对浏览器和终端用户的Web浏览安全威胁
- 针对传输网络的网络协议安全威胁
- 系统层安全威胁
- Web服务器软件安全威胁
- Web应用程序安全威胁
- Web数据安全威胁
1.2 Web应用安全攻防技术概述
1.2.1 Web应用的信息收集
-
手工审查Web应用程序结构与源代码
- 静态和动态生成的页面
- 目录结构
- 辅助性文件
- 输入表单
- 查询参数字符串
-
自动下载与镜像Web站点页面
-
使用Google Hacking技术审查与探测Web应用程序
-
Web应用程序安全评估与漏洞探测
1.2.2 攻击Web服务器软件
- 数据驱动的远程代码执行安全漏洞
- 服务器功能扩展模块漏洞
- 样本文件安全漏洞
- 源代码泄露
- 资源解析攻击
1.2.3 攻击Web应用程序
2004年发布《WASC Web安全威胁分类 v1.0》将Web应用程序安全威胁分为六类:
- 针对认证机制的攻击
- 授权机制的攻击
- 客户端攻击
- 命令执行攻击
- 信息暴露
- 逻辑攻击
1.2.4 攻击Web数据内容
- 安全敏感数据泄露
- 网站篡改
- 不良信息内容上传
1.2.5 Web应用安全防范措施
- Web站点网络传输安全设防措施
- Web站点操作系统及服务安全设防措施
- Web应用程序安全设防措施
- Web站点数据安全设防措施
1.3 SQL注入
代码注入根据攻击目标的不同分为:
- 恶意读取、修改与操作数据库的SQL注入攻击
- 在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻击
- 在Web服务器端恶意执行操作系统命令的Shell注入攻击
- 其他多种注入攻击,如LDAP注入、邮件命令注入、空字节注入、SSI注入、XPath注入、XML注入、XQuery注入等。
1.3.1 SQL注入攻击原理
SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。这类被攻击的漏洞被称为SQL注入漏洞,是由于用户输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如('、"、`、;、%、#、--、_)等,或者没有进行严格的类型判断,如为判断输入参数是否合法整数类型等,从而使得用户可以输入并执行一些非预期的SQL指令代码。
1.3.2 SQL注入攻击步骤和过程
攻击者真正对万维网上的一些Web应用站点实施SQL注入攻击时,往往是按照如下的攻击步骤与过程:
- 发现SQL注入点
- 判断后台数据库类型
- 后台数据库中管理员用户口令字猜解
- 上传ASP后门,得到默认账户权限
- 本地权限提升
- 利用数据库扩展存储过程执行Shell命令
1.3.3 SQL注入攻击工具
-
国外的有:Wposion、wieliekoek.pl、SPIKE Proxy、SPI Toolkit中的SQL Injector等
-
国内的有:CSC、NBSI、HDSI、阿D注入工具、WED、Domain、Pangolin等
1.3.4 SQL注入攻击防范措施
- 使用类型安全(type-safe)的参数编码机制
- 凡是来自外部的用户输入,必须进行完备检查
- 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
- 加强SQL数据库服务器的配置与连接
1.4 XSS跨站脚本构建
1.4.1 XSS攻击技术原理
XSS攻击的根源同样是Web应用程序对用户输入内容的安全验证与过滤不够完善,一旦Web应用程序没有对用户提交内容的合法性进行有效检查与过滤,就很有可能让其中包含的HTML、JavaScript及其他脚本代码逻辑包含在服务器动态产生或更新的网页中。
1.4.2 XSS攻击类型
- 持久性XSS漏洞(Persistent Cross Site Scripting):通常出现于一些可以将用户输入持久性地保存在web服务器端,并在一些“正常”页面中持续性地显示,从而能够影响所有访问这些页面的其他用户,因此该类XSS漏洞也被称作存储性(stored)XSS漏洞。
- 非持久性XSS漏洞:当Web浏览器在HTTP请求参数或HTML提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果界面,而缺乏恰当的请求数据安全验证与过滤,那么就很可能存在着非持久性的XSS漏洞。
1.4.3 XSS攻击防范措施
- 服务器端防范措施
- 输入验证
- 输出净化
- 消除危险的输入点
- 客户端防范措施
- 提高浏览器访问非受信网站时的安全等级
- 关闭Cookie功能
- 设置Cookie只读、
- 使用Chrome、Opera
2.实践过程
实践一
sudo service apache2 start
打开服务
因为seed阻止了SQL注入,我们打开/etc/php5/apache2/php.ini
,修改magic_quotes_gpc = On
为如下
重启apache2服务
登录www.sqllabmysqlphpbb.com
网站
可以看到最近登录的用户为ted
进行SQL注入攻击,因为实验要求中知道其数据库认证为
SELECTuser_id,username,user_password,user_active,user_level,
user_login_tries,user_last_login_try
FROMUSERS_TABLE
WHEREusername='$username'ANDuser_password=
'md5($password)';
if(foundonerecord)
then{allowtheusertologin}
$username
如果使用'进行截断,如下,则变为WHEREusername='ted'#'ANDuser_password='md5($password)'
,只要数据库中存在此用户,那么将直接登入。
登录成功
进入profile随便填点什么信息,用'来测试是否会有如上问题发生
可以看到我们的user_id=6,如果改成其他编号,可能就可以修改其他用户的information
进行如下的攻击
成功修改其他用户信息
实践二
发帖,在其中加入<script>alert(’XSS’);</script>
可以看到如下弹窗
这次加入<script>alert(document.cookie);</script>
返回了用户的cookie
使用LiveHTTPHeader,实验的时候我在后面才发现两个实验用的网址不同,这里用了实践一的网址 http://www.sqllabmysqlphpbb.com
,然后发现replay的Send POST Content 里面压根什么也没有,下图是我从LiveHTTPHeader复制的GET内容,只是说其中的确包含我发帖的内容
然后我发现在上面的网址栏里包含了各种信息,我就直接在其中修改message的内容
发现可以成功修改,进行了重放攻击
这部分我已经发现了两个网址的不同,访问了 http://www.xsslabphpbb.com
,要用JAVA编写程序发送HTTP请求,我这里又发了一次贴,然后用LiveHTTPHeader记录了其中的内容,将其作为JAVA组建HTTP请求的内容
构造请求,其中将帖子的内容从wait for hacking
改为being hacked
编译出.class
并运行,由于编码问题显示了乱码,不重要,我们看网站内容
帖子内容的确被修改了
3.学习中遇到的问题及解决
- 问题1:发现REPLAY中并没有相应的Send POST Content
- 问题1解决方案:一开始在地址栏的捎带信息中改,后面发现了域名不同就没问题了
4.实践总结
一开始让我写JAVA我是拒绝的,因为seed的VMware Tool无法正常安装的问题,JAVA代码除了请求信息都是手打的。因此仔细看了JAVA代码内容,对XSS攻击有了一些更深入的了解。