20145216史婧瑶《网络对抗》Web安全基础实践
实验问题回答
(1)SQL注入攻击原理,如何防御
- 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一些组合,程序通过执行SQL语句进而执行攻击者所要的操作。其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。
- 防御方法:
- 对输入的数据进行过滤,将常见的sql语句的关键词:select or ' " 等字符进行过滤。
- 对在数据库中对密码进行加密,验证登陆的时候先将密码进行加密再与数据库中加密的密码进行对比,若此时一致则基本是安全的。
- 对数据库中密码采用常用的MD5加密时尽量在字符串的前边和后边加上指定字符后在进行加密,这样即便是看到了数据库也很难破解密码。
(2)XSS攻击的原理,如何防御
- 攻击原理: XSS攻击是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。
- 防御方法:
- 当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。
- 当恶意代码被作为某一标签的属性显示,通过用“将属性截断来开辟新的属性或恶意方法:属性本身存在的单引号和双引号都需要进行转码;对用户输入的html标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。
(3)CSRF攻击原理,如何防御
- 攻击原理: CSRF跨站请求伪造是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。
- 防御方法:
- 通过referer、token或者验证码来检测用户提交。
- 尽量不要在页面的链接中暴露用户隐私信息。
- 对于用户修改删除等操作最好都使用post操作。
- 避免全站通用的cookie,严格设置cookie的域。
实验总结与体会
这次实验让我知道了许多网络攻击技术,再次感叹网络的不安全性!比如仅仅只需要简简单单的一个输入,攻击者就可以让程序执行他想要的操作。所以我们以后在设计网站的时候一定要谨慎啊,针对这些攻击做出相应的防范措施,提高网络的安全性。
实践过程记录
首先开启webgoat:
SQL注入攻击:
String SQL Injection(SQL字符串注入):
题目要求尝试使用SQL注入,使得所有银行卡都可以被展现。
首先按题目尝试输入Smith,发现查询出来都是last_name是Smith的表单,分析后知道是需要WHERE这个条件语句失效,因此构造一个用真式'or 1='1
。
Log Spoofing(日志欺骗):
这道题大概意思是说,我们输入的用户名会被追加到日志文件中。所以我们可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,例如在User Name文本框中输入%0d%0aLogin succeeded !admin
,其中%0d是回车,%0a是换行符,结果就像登录成功一样。
Stage 1 String SQL Injection
字符串型注入,要求使用SQL注入绕过认证,实现无密码登陆。
在密码栏输入' or 1 = 1 --
,发现输入错误:
查看源代码,原来最长只能输入8位,把长度限定改为15,把文本框格式改为text,再次输入' or 1 = 1 --
,成功。
Stage 3 Numeric SQL Injection
数字型注入,要求使用一个普通员工的账户,浏览其BOSS的账户信息。
首先通过Larry的账户登陆(密码为larry),更改登录后页面源代码value值为112 or 1=1 order by salary desc
。
点击ViewProfile查看信息:
Blind Numeric SQL Injection(盲数字注入)
题目要求是得到一个存放在pins表中值pin的内容,行号cc_number=1111222233334444,是一个int型的数据。使用盲注方式,输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500)
,显示不合法:
再次输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2300)
显示合法:
最后试出来值为2364,成功。
XSS攻击
Phishing with XSS(跨站脚本钓鱼攻击)
关于一个页面中存在XSS漏洞时,它如何支持钓鱼攻击。
在文本框里面写一个钓鱼网站代码就可以了,这里我参考了其他同学的代码,将代码粘过去后登录,成功。
Stored XSS Attacks
题目要求:要创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
直接在title里随便输入,然后在message中输入一串代码,比如:<script>alert("20145216");</script>
提交后,再次点击刚刚创建的帖子,成功弹出窗口,说明攻击成功。
Reflected XSS Attacks
将带有攻击性的URL作为输入源,比如<script>alert("20145216sjy");</script>
,就会弹出对话框:
这个看上去和上面的Stored XSS Attacks很相似,但是原理不同,上面的是存储式的,这个是通过写在url里面达到的效果,里面的脚本也可以改写成其他恶意的内容。
CSRF攻击
Cross SSite Request Forgery(CSRF)
题目要求:需要写一个URL诱使其他用户点击,从而触发CSRF攻击。
在message里面输入<img src='attack?Screen=282&menu=900&transferFunds=10000' width='1' height='1'>
,就会发出一个转钱的请求,盗取钱财。
提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的钱,达到CSRF攻击的目的。
CSRF Prompt By-Pass
这个就是利用CSRF进行冒名操作转账,不过这次包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=5000,transferFunds=CONFIRM)。直接在message中写入攻击代码,然后提交:
点击CONFIRM按钮,成功。