20164305 徐广皓《网络对抗》Exp9 Web安全基础实践

 

1.WebGoat实践

(1)wegoat安装

  • 下载 webgoat-container-7.0.1-war-exec.jar ,开启WebGoat,在终端中输入命令 java -jar webgoat-container-7.0.1-war-exec.jar 

  • 在火狐中输入 http://localhost:8080/WebGoat 进入WebGoat登录界面

(2)攻击列表

  • Stored XSS Attacks

  • Cross Site Request Forgery(CSRF)

  • CSRF Prompt By-Pass

  • LAB:SQL Injection(Stage 3:Numeric SQL Injection)

  • Command Injection

  • Numeric SQL Injection

  • Log Spoofing

  • String SQL Injection

  • LAB:SQL Injection(Stage 1:String SQL Injection)

  • LAB:SQL Injection(Stage 3:Numeric SQL Injection)

Stored XSS Attacks

  1. 将带有攻击性的URL作为输入源,输入<script>alert("1");</script>,弹出对话框1

Cross Site Request Forgery(CSRF)

  1. 利用cookie冒名登录,用代码伪造请求
  2. 在message框中输入:<img src="http://localhost:8080/WebGoat/attack?Screen=288&menu=900&transferFunds=4305"/>,注意这里面的Screen和menu的值与右边Parameters一致

  3. 提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的4305元,攻击成功。

CSRF Prompt By-Pass

  1. 构造两次CSRF攻击,一是转账请求,二是确认转账成功请求,即transferFunds=4305,transferFunds=CONFIRM
  2. 在浏览器中手动输入URL:localhost:8080/WebGoat/attack?Screen=275&menu=900&transferFunds=4305进入确认转账请求页面

  3. 点击了CONFIRM按钮之后,再在浏览器中输入URL:localhost:8080/WebGoat/attack?Screen=275&menu=900&transferFunds=CONFIRM,成功转走4305元:

Command Injection

  1. 这个题是要求能够在目标主机上执行系统命令,我们可以通过火狐浏览器下的一个扩展Firebug(就是右上角的小虫的标志)对源代码进行修改,例如在BackDoors.help旁边加上"& netstat -an & ipconfig"

          2.之后在下拉菜单中能看到我们修改后的值

            

           3.选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况

          

          

Numeric SQL Injection

         1.构造一个永真式就完事了

         

          

         

Log Spoofing

  1. 利用换行符伪造一个假的日志信息,在User Name文本框中输入xgh%0d%0aLogin Succeeded for username: admin,(%0d是回车,%0a是换行符)

         

         2.如图所示,攻击成功

         

String SQL Injection

  1. 在文本框中输入' or 1=1 --

         

         2.Go,攻击成功,所有用户信息都被显示出来

         

LAB:SQL Injection(Stage 1:String SQL Injection)

  1. 以用户Neville登录,在密码栏中输入'or 1=1--进行SQL注入成功

         

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

  1. 以用户名Larry登录,登录之后看到浏览员工信息的按钮是ViewProfile

  2. 在网页代码中分析按钮,发现是以员工ID作为索引传递参数的,我们要通过Larry来浏览老板账户信息,一般来说老板的工资都应该是最高的,所以把其中的value值改为101 or 1=1 order by salary desc --,老板的信息就会被排到第一个

2.实验问题

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

SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。

SQL注入攻击指的是就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

防御:

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。

2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把秘密信息直接存放,加密或者hash掉密码和敏感的信息。

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

XSS攻击:跨站脚本攻击。

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略。

防御:

基于特征的防御:

传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。

基于代码修改的防御:

步骤1、对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

步骤2、实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。

步骤3、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。

3)CSRF攻击原理,如何防御

CSRF即跨站请求伪造。借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。

CSRF一般的攻击过程是,攻击者向目标网站注入一个恶意的CSRF攻击URL地址(跨站url),当(登录)用户访问某特定网页时,如果用户点击了该URL,那么攻击就触发了。

防御

referer

因为伪造的请求一般是从第三方网站发起的,所以第一个防御方法就是判断 referer 头,如果不是来自本网站的请求,就判定为CSRF攻击。但是该方法只能防御跨站的csrf攻击,不能防御同站的csrf攻击(虽然同站的csrf更难)。

使用验证码

每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账是使用的手机验证码。

使用token

每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。

将敏感操作又get改为post,然后在表单中使用token. 尽量使用post也有利于防御CSRF攻击。

 3.实验总结与体会

 还有15分钟就不能交作业了,所以就少做点。。。感觉还是挺好玩的,要是在ctf比赛前作就更好了。最后一次实验就结束了,终于不用写博客了O(∩_∩)O哈哈~

 

 

 

 

       

posted @ 2019-05-26 21:48  醉落  阅读(82)  评论(0编辑  收藏