zoukankan      html  css  js  c++  java
  • 20144306《网络对抗》Web安全基础实践

    1  实验内容

    • SQL注入攻击
    • XSS攻击
    • CSRF攻击

    2  实验过程记录

      2.1WebGoat说明与安装

    • 关于WebGoat

           WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。

    • 使用WebGoat

          kali键入java -jar webgoat-container-7.0.1-war-exec.jar运行WebGoat,在firefox浏览器中输入http://localhost:8080/WebGoat进入登录界面:

          

          点击sign in登录答题。

      2.2Injection Flaws

       2.2.1 Numeric Injection

         注入一条SQL语句来显示全部天气信息。

    • 操作过程

         先看一下后台流程:

         

         station那里有个复选框,可以选择查看相应城市的信息,每选择一个城市,就会把该城市对应的station字段填入SELECT * FROM weather_data WHERE station = ?这条语句中,在数据库后台执行,并将从数据库中得到的搜索结果打印在屏幕上。

         我们可以随便选择一个城市,把它对应的station或上一个永真式,填空后可以查找到所有数据库信息,再全部打印到屏幕上。

         

         城市选择第一个,点击go

         

       2.2.2 LAB:SQL Injection

    • Stage 1:String SQL Injection

          通过SQL注入来实现免正确密码登录,选择管理员用户,在密码栏输入‘ or 1=1 --

           

         登录失败,应该是有其他的限制信息。

         

        将密码输入长度增至20,再试一遍。

         

         成功登录进入stage2,但是stage2只能在开发版中做。

    • Stage 3:Numeric SQL Injection

        用员工账号登陆,进入员工页面后再通过SQL注入来查看老板的账户信息。

        先用刚才的方法选择一名员工登录。

         

         从源代码中看一下在数据库中查找的方式,发现传递的参数是员工ID,想要调出老板账户信息,就得把老板排在id可以预测的位置,一般来说老板的工资都应该是最高的,所以把其中的value值改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个:        

         点击viewprofile按键

         

         成功看到老板的账户。

       2.2.3 String SQL Injection

         通过SQL注入来偷看所有信用卡号码。

    • 操作过程

         

         这一句显示了其在后台数据库搜索的过程,通过last_name,那么我们可以在输入框里输入‘ or 1=1 --来实现调取所有账户。

         

       2.2.4 Database Backdoors

         此题的要求是修改后台数据库数据给自己涨工资,然后在数据库中给自己造一个后门,把所有用户的邮箱换成自己的。

    • 操作过程

         先看一下提交方式

         

         没有验证,就直接注入吧,在输入userid的地方输入 101; update employee set salary=10000

         

         从此走向人生巅峰。

         建后门:在输入框注入如下语句101;CREATE TRIGGER lxmBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20144306@qq.com' WHERE userid = NEW.userid

         

       2.2.5 Blind Numeric SQL Injection

         此题的要求是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,从服务端页面返回的信息中可以知道,它只告诉你两种信息:帐号有效或无效。

    • 操作过程

         先输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );查看pin数值是否大于5000

         

         在0-5000之间,用折半查找继续试

         

         在0-2500之间

         

        在1250-2500之间

        

        在2000-2500之间

        打开BurpSuite,截获报文进行暴力破解,先新设置一个8089端口,然后勾选该项

         

        

        在浏览器进行手动代理设置

         

        在webgoat端点击go,BurpSuite捕获到一条报文,右键选择send to intruder

        

        然后在Intruder下选择相关设置:

    • Target中,设置本机IP地址HOST,和端口号,也就是WebGoat的地址和端口号

        

    • Positions中,选择Sniper模式,然后用光标选中需要暴力穷举的变量,在此处是account_number后的值,然后点击右侧的add添加(在此之前点击clear清空所有的)

        

    • Payloads中,选择type类型为number,然后设置变化范围2000-2500,并设置步长为1

        

    • Options中,选择Start attack开始攻击

        

        找到数据包大小变化的位置2364,用2364试一下,成功!

        

      2.3 Cross-Site Scripting (XSS)

       2.3.1 Phishing with XSS

         此题要我们在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点。我们先创建一个form,让受害人在我们创建的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,并且将这些信息发送给http://localhost:8080/WebGoat/catcher?PROPERTY=yes...

    • 操作过程

         

         弹出提示框

        

        成功

        

       2.3.2 Stored XSS Attacks

        此题因为没有对用户的输入进行编码,所以用户A可以任意输入,然后用户B点击用户A的留言,触发XSS

    •  操作过程

        title可以任意输入,Message输入消息,可以嵌入一段js代码,用户点击后即可触发,例如输入:<script>alert("20144306 attack succeed!");</script>

        结果:

         

    2.3.3 Reflected XSS Attacks

        此题是一个反射型XSS攻击

    •  操作过程

        在enter your three digit access code:处输入 <script>alert("20144306 attack succeed!");</script>

        结果:

        

    2.3.4 Cross Site Request Forgery(CSRF)

        此题是要写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件

    •  操作过程

        在Message里输入恶意代码:<iframe src="attack?Screen=282&amp;menu=900&amp;transferFunds=6666"></iframe>

        

        点击submit后,再点击这个消息,成功。

    2.3.5 CSRF Prompt By-Pass

        此题包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)

    •  操作过程

        在浏览器地址栏输入:

        进入转账请求页面:

        

        点击confirm后,再在浏览器地址栏输入上调语句,但是把fund值改成confirm,成功转出6666

        

    3  实验问题回答

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

        把前台输入的内容像填空一样填到后台递交给数据库的搜索语句中,凑成一个完整的SQL表达式,完成相应的任务。要防御的话可以进行输入检查,杜绝非法输入的可能。

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

        XSS令恶意用户将代码注入到网页上,并能够被浏览器成功的执行,主要是想要获取cookie。要防御的话可以进行输入字符数量控制,或者可以进行参数过滤。

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

        跨站请求伪造,盗用身份发送恶意请求。要防御的话可以通过referer、token或者验证码来检测用户提交,或者对cookie进行严格设置。

    4  实验体会

         终于通关了!yeah

  • 相关阅读:
    第一章 Shell基础知识
    keepalived与LVS实现高可用
    集群简介
    基于NFS v4版本搭建NFS服务器
    LDAP安装步骤
    Nginx配置阿里云https服务
    zabbix基础
    Apache、Nginx和Tomcat之虚拟主机配置
    标准盒模型和怪异盒模型的区别
    js中数组扁平化处理
  • 原文地址:https://www.cnblogs.com/cathy-h/p/6860599.html
Copyright © 2011-2022 走看看