2019-2020-2 网络对抗技术 20175307 Exp 9 Web安全基础
一、实践目标
1、实践对象
Kali Linux
2、实践内容
Webgoat实践下相关实验
理解常用网络攻击技术的基本原理
二、实验过程
任务一:配置WebGoat
1、下载webgoat-container-7.0.1-war-exec.jar文件
下载地址:
https://github.com/WebGoat/WebGoat/releases/download/7.0.1/webgoat-container-7.0.1-war-exec.jar
2.安装webgoat
在文件夹下输入命令java -jar webgoat-container-7.0.1-war-exec.jar
任务二:SQL
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。 黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库
1、Command Injection(命令注入)
左侧课程栏选中Injection Flaws -> Command Injection
点击右键选择Inspect Element
,查看网页源代码,之后对网页代码进行修改。
找到名字为HelpFile
的select
元素,在第一项内容的后面添加"& netstat -an & ipconfig"
2、Numeric SQL Injection(数字型SQL注入)
左侧课程栏选中Injection Flaws -> Numeric SQL Injection
,在该页面可以通过GO按钮查城市的天气情况。
选中下拉列表,点击右键选择Inspect Element
,查看网页源代码。
之后可修改station的select元素,在修改为
value="101 or 1=1 "
。
3.日志欺骗(Log Spoofing)
左侧课程栏选中Injection Flaws -> Log Spoofing
,在该页面通过用户和密码查看Log日志。
在User Name
中填入webgoat%0d%0aLogin Succeeded for username: 20175307gsc
点击Login可以看到webgoat Login Fail,自己添加的20175307gsc Login Succeeded
4、LAB: SQL Injection(Stage1)
左侧课程栏选中Injection Flaws -> LAB: SQL Injection
,之后选择Stage1
,该页面是通过密码对员工的身份进行鉴别,要求用BOSS:Neville的账号进行登录。
但是永真式长度需要9,所以直接修改maxlength为10.
直接跳到stage2,说明已经成功
5、LAB: SQL Injection(Stage 3: Numeric SQL Injection)
左侧课程栏选中Injection Flaws -> LAB: SQL Injection
,之后选择Stage3
,该页面是通过密码对员工的身份进行鉴别,然后查询员工信息,题目要求是通过员工账号查询boss的信息
是再通过员工进行查询,所以右键查看ViewProfile
按钮信息。
出现了value值,所以我们只需要修改这个就可以了。
所以将员工ID的value改成101 or 1=1 order by salary desc
6、字符串注入(String SQL Injection)
左侧课程栏选中Injection Flaws -> String SQL Injection
,
是根据SELECT * FROM user_data WHERE last_name = '
查询内容
查询Snow
7、Database Backdoors
左侧课程栏选中Injection Flaws -> Database Backdoors
,该页面是通过User ID查询信息
输入101; update employee set salary=10000000
修改薪水
任务三:XSS
1、Phishing with XSS
点击search按钮通过XSS新建一个页面
2、Stored XSS Attacks
Title文本框输入任意信息 ,在Message文本框中输入
3、Reflected XSS Attacks
在Enter your three digit access code:
输入显示内容为script脚本指定的警告框
任务四:CSRF
1、Cross Site Request Forgery(CSRF)
通过Message发送一个图片,图像的URL指向一个恶意请求
transferFunds=5307被转金额
2、CSRF Prompt By-Pass
在消息栏中输入
`
三、问题问答
问题一:SQL注入攻击原理,如何防御?
- SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,例如:通过在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合。
- 防御方法:限制查询长度、定制黑名单、使用参数化筛选语句等
问题二:XSS攻击的原理,如何防御?
- XSS是一种网站应用程序的安全漏洞攻击,是代码注入的一种,它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
- 防御:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。
问题三:CSRF攻击的原理,如何防御?
CSRF跨站点请求伪造(Cross—Site Request Forgery),攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作,因为浏览器之前认证过,所以被访问的站点会认为这是真正的用户操作而去运行。
防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
四、遇到的问题
解决方法:
参考:https://www.cnblogs.com/hujidong42/p/12956439.html
参考2:https://www.cnblogs.com/SANFENs/p/12911903.html
- 建立目录,将下载的jdk复制过去并解压,我这里用的jdk是8u181版本的,依次运行以下代码
sudo mkdir -p /usr/local/java
sudo cp jdk-8u181-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar xzvf jdk-8u181-linux-x64.tar.gz
- 配置相关环境变量
sudo vim /etc/profile
,将下面代码复制进末尾
###复制以下代码到文件结尾
JAVA_HOME=/usr/local/java/jdk1.8.0_181
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
- 修改java位置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_181/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_181/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_181/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_181/bin/javaws" 1
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_181/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_181/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_181/bin/javaws
五、实验感想
本次实验通过webgoat进行了很多网页的攻击实验,学习了SQL注入攻击、XSS攻击、CRSF攻击的原理和过程,当然学习的内容虽然只占webgoat很小的部分,但是却给我了很大的触动,因为我之前在刘念老师的课上也写过html页面,这些页面根本不可能抵御攻击,所以我又发现了一些奇怪而有用的知识,希望我攻击和防御两个方面的能力都可以得到进步。