20145203盖泽双 《网络对抗技术》实践九:Web安全基础实践
20145203盖泽双 《网络对抗技术》实践九:Web安全基础实践
1.实践目标
1、理解常用网络攻击技术的基本原理。
2、Webgoat下进行相关实验:SQL注入攻击、XSS攻击、CSRF攻击。
2.实验后回答问题
(1)SQL注入攻击原理,如何防御?
SQL注入原理:利用可以进行输入的INPUT框,在正常的语句后面加上一些对SQL数据库的非法的增删查改等语句,以达到攻击者的恶意目的。
防御:因为对数据库进行操作的的指令一般都需要输入一些特殊符号,所有以我们可以设置INPUT框的输入规则,禁止特殊字符的输入。
(2)XSS攻击的原理,如何防御?
XSS攻击原理:XSS攻击与SQL注入攻击比较类似,利用可以进行输入的INPUT框,在网页中使用HTML、javascript语言,编写非法的可执行代码到URL中,等到有用户主动访问,恶意代码运行,就可以对访问用户的正常浏览页面进行破坏。
防御:可以对用户的输入数据进行审核,设置敏感字符如```<script></script>```、敏感符号如```‘&’、‘<’```……等,一旦用户输入的数据中涉及到敏感内容,则不允许通过。
(3)CSRF攻击原理,如何防御?
CSRF攻击原理: 首先用户浏览并登陆了信任网站A。信任网站A对用户进行验证,验证成功后,在用户处生成A的cookie。此时用户又在没有注销网站A中的登陆的情况下访问了危险网站B,B就可以得到用户的cookie并以用户的名义要求访问网站A。A就把携有用户cookie的B发出的请求当作用户的请求来处理,就实现了恶意网站B的目的。
防御:对于网页中用户的隐私信息尽量使用POST方式来提交,不要明文进行传输。也可以在用户每次提交申请时,要求输入一个只有用户才可以得到的验证码。
3.实验总结与体会
这次实验主要是做了一些简单的浏览器攻击,感觉SQL注入攻击、XSS攻击这些攻击只要我们在编写网站代码时稍有限制,其实就可以避免。CSRF攻击比起前两个攻击,其实是比较难防御的,造成的后果也是最严重的,因此需要我们在编写代码方面下一点功夫来避免这些攻击带来的严重后果。
4.实践过程记录
(1)环境配置
①开启webgoat。
java -jar webgoat-container-7.0.1-war-exec.jar
②在浏览器中输入localhost:8080/WebGoat
使用默认用户名和密码登陆。
(2)SQL注入攻击
1、Numeric SQL Injection——数字SQL注入攻击
①在左边滑动框中根据名字找到自己想做的实践。右边滑动框是对该攻击的介绍与要求,建议大家先尝试理解,如果像我一样没有过六级的话,建议使用百度翻译……
简介:
SQL注入攻击对任何数据库驱动的站点都是一个严重的威胁。攻击背后的方法很容易学习,造成的伤害可以使相当大到完整的系统妥协。尽管存在这些风险,在互联网上仍有数量惊人的系统很容易受到这种形式的攻击。
它不仅是一个容易发生的威胁,也是一个一点常识和远见就可以很容易地防御的威胁。
使用操作系统命令、脚本和数据库查询指令可造成SQL注入的威胁。
攻击要求:下面的表单允许用户查看天气数据。尝试注入SQL字符串,结果将显示所有天气数据。
②首先我们要想让它显示所有的天气数据,就要对它进行注入。但是我们可以观察到这个题是没有办法自己控制输入的。既然没有办法在前端进行修改,我们就只能利用代理服务器拦截我们发送出去的网页,然后从后端对它的代码进行修改了!直接右键—>选择Inspect Element,就可以看到网页的源代码。
②我们对哥伦比亚的101进行修改,修改为“101 or 1=1”,保存后在原界面仍然选择哥伦比亚,然后提交,成功查询到所有的地区的天气情况。
**2、Log Spoofing——日志欺骗 **
简介:下面的灰色区域表示将要登录到Web服务器的日志文件中的内容。你的目标是使它像一个用户名“admin”已成功登录。
通过向日志文件中添加脚本来提升攻击。
①我们可以观察登录失败的字符串,分析到我们用户名无论输入什么,无论登录是否成功,用户名都会被显示出来。
②利用步骤一发现的这一点,我们在用户名框中添加登陆成功的字符串如:%0a%0a%0a%0a%0a(换行)Login succeeded !admin
,显示如下图:
**3、String SQL Injection——字符串的SQL注入 **
简介:下面的表格允许用户查看他们的信用卡号码。尝试注入一个SQL字符串,结果显示所有的信用卡号码显示。
①在查找框中输入以下语句:SELECT * FROM user_data WHERE last_name = ''or 1='1'
我们可以观察这个字符串语句,可以分为两句话:SELECT * FROM user_data WHERE last_name = ''
和'or 1='1',而1=1永远成立,所以我们可以查找到所有人的银行卡账号。攻击成功!
**4、Database Backdoors(1)——数据库后门 **
简介:
第一阶段:使用字符串sql注入执行多个sql语句。本课的第一阶段是教你如何使用一个易受影响的字段来创建两个SQL语句。第一个是系统的,第二个是你的。您的帐户ID是101。这个页面允许你看到你的密码,SSN和工资。尝试注入使工资值增加。
第二阶段:使用字符串SQL注入注入后门。本课的第二阶段是教你如何使用vulneable领域注入DB工作或后门。现在尝试使用相同的技术注入触发器。
①我们先ID=101,看一下正常工资值是多少。
②通过在ID框中输入101; update employee set salary=145203
,来改工资。相当于是在正常的SQL语句后又添加了一个数据库更新语句。攻击成功!
**5、Database Backdoors(2)——数据库后门 **
在第二阶段的攻击中,我们再输入框中输入101 or 1=1;CREATE TRIGGER myBackDoor BFFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='sophia@qq.com'WHERE userid = NEW.userid;
将每一个新用户的收款邮箱都改为自己的邮箱地址。修改成功!
**6、Blind Numeric SQL Injection——盲数值SQL注入 **
简介:下面的表单允许用户输入帐号并确定其有效与否。使用此表单开发数据库中的其他项的真/假测试。我们的目标是找到cc_number=1111222233334444的pin在PINS表中的值,并把找到的值放在窗体上传递出来。
①我们可以在输入框中输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500 );
与101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') < 2600 );
类型的句子,不断进行暴力破解。最后找到答案,攻击成功。
(3)XSS攻击
**1、Stored XSS Attacks——存储型XSS攻击 **
简介:可以利用OS命令,脚本和数据库查询的输入指令发帖子,使得其他用户在试图打开你的帖子时,会加载出一个不想要的网页或意想不到的内容。
①发布一个massage为<script>alert("Hi,I‘m 5203sophia!");</script>
的帖子。然后点击我所发布的帖子。效果如下:
2、Reflected XSS Attacks——反射型XSS攻击
简介:在服务器端验证所有输入是一个很好的方法。XSS可以发生在未经验证的用户输入用于HTTP响应。在反射型XSS攻击中,攻击者可以制作一个URL攻击脚本发送到另一个网站,比如电子邮件,然后让受害者点击它。
①在Enter your three digit access codeA:
框里填入获取cookie
的javascript代码:<script>alert(document.cookie);</script>
。成功获取cookie。
(还没有来得及截图,不小心手残把浏览器设置为了禁止弹出多余的对话框,然后它就再也弹不出来了)
(4)CSRF攻击
1、Cross SSite Request Forgery(CSRF)——跨ssite请求伪造
简介:目标是把电子邮件发送到银行。该电子邮件包含一个图像,其URL指向恶意请求。可以通过在右边的参数中查找“src”和“menu”值来构造链接。
CSRF的电子邮件,是用来匿名的将收件人的资金转移。
①在messahe对话框中输入:<img src=' attack?Screen=自己的scr &menu=自己的menu &transferFunds=转钱数 ' width='1' height='1'>
及转账确认信息,即可完成转账。
2、CSRF Prompt By-Pass
简介:与上一个攻击类似,不同的是这次的目标是发送一组包含多个恶意请求的邮件:①资金转移请求②资金转移确认信息。
②只需要在上面的语句后再加一句:<img src='attack?Screen=自己的src&menu=自己的menu&transferFunds=CONFIRM' width='1' height='1'>
即可,攻击成功。