一、实践目标
理解常用网络攻击技术的基本原理
二、实践内容
做不少于7个题目,包括SQL,XSS,CSRF
三、实验步骤
准备工作:安装WebGoat
在GitHub[https://github.com/WebGoat/WebGoat/releases/tag/7.0.1]上下载webgoat-container-7.0.1-war-exec.jar
下载jdk-8u161-linux-64.tar.gz
建立目录,将下载的jdk复制过去并解压
sudo mkdir -p /usr/local/java
sudo cp jdk-8u161-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar xzvf jdk-8u161-linux-x64.tar.gz
3、配置环境变量
sudo vim /etc/profile
复制以下代码到文件结尾
JAVA_HOME=/usr/local/java/jdk1.8.0_161
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
4、通知系统java的位置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_161/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_161/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_161/bin/javaws" 1
5、设置默认JDK
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_161/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_161/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_161/bin/javaws
6、重新载入profile
source /etc/profile
7、java -version
可以看到安装完成
运行java -jar webgoat-container-7.0.1-war-exec.jar
开启webgoat
在浏览器中输入localhost:8080/WebGoat
可以正确进入WebGoat登陆界面了,检查一下功能是否正常。
SQL注入攻击Injection Flaws
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
1、命令注入Command Injection
命令注入攻击对任何一个以参数驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。尽管这类风险数目令人难以置信,互联网中的系统很容易受到这种形式的攻击。
右键选择inspect Element
审查网页元素,找到复选框的代码,在复选框中选择一栏代码,右键选择Edit At Html
进行修改,添加"&&ifconfig"
单击view
按钮,可以看到攻击结果和成功提示。
2、数字型注入Numeric SQL Injection
注入数字型数据(如:永真式)达到注入的效果。
找到城市复选框代码,在任意城市源码Value值中添加or 1=1
。
单击go
按钮,可以看到攻击结果显示所有城市天气数据。
3、日志欺骗Log Spoofing
通过在日志文件中插入脚本实现欺骗。
用户名输入20175302%0d%0aLogin Succeeded for username: admin
,密码随意,可以看到登陆成功
4、字符串注入String SQL Injection
基于SELECT * FROM user_data WHERE last_name = '?'
查询语句构造自己的SQL注入字符串,姓名框输入20175302' or 1=1--
,执行后可以看到所有人的卡号等信息:
5、数据库后门Database Backdoors
使用字符串SQL注入执行多个SQL语句,使用易受攻击的字段创建两个SQL语句,第一个是系统的,第二个是自己定义的。
首先输入101
看一下已有数据,再使用101; update employee set salary=100000
修改salary。
第二个任务使用101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20175302@hackme.com'WHERE userid = NEW.userid
在每行插入前修改邮箱为指定邮箱:
XSS攻击
1、XSS钓鱼Phishing with XSS
当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
编写表单代码,搜索框中输入代码,可以看到页面中多了一个登录表单
输入信息登录后,攻击这可以获得这些信息。
2、存储型XSS攻击Stroed XSS Attacks
这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。
title中随意输入,留言板中输入,提交后如下:
3、反射型XSS攻击Reflected XSS Attacks
攻击者使用攻击脚本创建一个URL,受害者点击该url就会受到攻击。
序列码输入,之后提交:
CSRF攻击
1、跨站请求伪造Cross Site Request Forgery(CSRF)
跨站请求伪造是一种让用户加载一个包含网页的图片的一种攻击手段。提交请求时浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以控制受害者执行他们没有许可的操作。
根据自己参数的实际情况,在message中使用
<img src="http://localhost:8080/WebGoat/attack?Screen=420&menu=900&transferFunds=1000" width="1" height="1" />
将url隐藏到一个隐藏图片中,提交后转走用户1000元
2、绕过CSRF确认CSRF Prompt By‐Pass
CSRF Prompt By‐Pass欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。
根据自己参数的实际情况,在message中使用
<iframe src="attack?Screen=327&menu=900&transferFunds=1000"> </iframe>
<iframe src="attack?Screen=327&menu=900&transferFunds=CONFIRM"> </iframe>
点击submit提交
四、实验感想
实验中遇到的问题
一开始直接启动webgoat没有功能,需要重新安装JDK1.8才能用。
实验体会
学习了一些攻击方法,通过WebGoat工具进行了SQL注入攻击、XSS攻击、CSRF攻击的实验,对网页的漏洞和网页代码的理解更加深入,更新了对代码严谨性审查的认知。
五、问题回答
1、SQL注入攻击原理,如何防御
-
原理:
-
通过把SQL命令插入到Web表单等查询字符串中,使服务器执行语句时执行攻击者输入的恶意SQL命令。除此之外SQL注入攻击还可以通过在输入中加入“或 永真式”、在末尾加入注释符等方式实现重新构造命令语句达到登录等攻击目的。总之是通过输入框输入特殊字符串,提交到后台数据库中后会与SQL语句拼接成一个新的可实现攻击者目的的语句。
-
防御:
-
编写代码时使用正则表达式检查用户输入是否符合规范,对可能使代码产生运行错误的字符进行筛选,限制用户输入;
-
尽量不使用动态SQL语句,通过Web程序调用存储过程来完成对数据库的操作。
XSS攻击的原理,如何防御
-
原理:
-
XSS攻击时,攻击者将一些恶意html标签或者javascript脚本插入到Web页面中,当用户浏览该页时,控制用户浏览器。攻击者利用用户对原网站的信任,执行用户不期望的命令。
-
防御:
-
用户要提高防范意识,不轻易输入个人信息与密码等;
-
对用户输入的可能使代码产生运行错误的字符进行筛选,限制用户输入;
-
对输入和URL参数进行过滤,在输出数据之前对潜在的威胁的字符进行编码、转义。
CSRF攻击原理,如何防御
-
原理:
-
在用户的浏览器中执行攻击者的脚本,获得用户的cookie等信息,跨站请求伪造是借用用户的身份,向服务器发送攻击者构造的请求,以达到攻击者的目的。
-
防御:
-
用户要提高防范意识,不轻易输入个人信息与密码等;
-
验证请求中的Token,并且每一个重要的post提交页面都使用一个验证码
-
尽量不使用通用的cookie,避免伪造用户身份
添加加随机验证,验证请求的来源是否是合法用户