一、实践目标与内容
- 理解常用网络攻击技术的基本原理。
- 在Webgoat,实践相关实验。
- SQL注入攻击
- XSS攻击
- CSRF攻击
二、实践过程与步骤
1.环境配置
1.1下载webgoat-container-7.1-exec.jar和
jdk-8u172-linux-x64.tar.gz,解压
jdk-8u172-linux-x64.tar.gz,并配置JDK的环境后,重载Profile文件,输入命令
java -version`就可以看到我们的JAVA的版本已经更新了
1.2.因为我的文件目录里面只有webgoat的jar,所以输入以下命令,等待一会就可以看到webgoat运行成功了(如果有多个jar文件,只需要把*改成文件名就行了)
java -jar *.jar
1.3打开Firefox,输入http://127.0.0.1:8080/WebGoat/login.mvc
访问webgoat,因为我的webgoat是7.1,不需要注册,只需要使用网页页面下面的管理员用户登录就行了
1.4 在Firefox页面中点击右上角,选择Add-ons
,搜索Firebug
就能找到这个插件并安装,然后就可以开整了Firebug相关介绍
2.SQL注入攻击
2.1 命令注入(Command Injection)目标:能够在目标主机上执行系统命令
2.1.1右键网页,点击inspect Element
,查看并编辑网页源代码,查找BasicAuthentication.help
,在旁边加上"& netstat -an & ipconfig"
2.1.2点击网页中的view
按钮,就能在网页下面看到系统的网络连接情况了
2.2 数字型SQL注入(Numeric SQL Injection)目标:注入一条SQL字符串,以显示所有显示的天气数据
2.2.1右键网页,点击inspect Element
,查看并编辑网页源代码,查找New York
,在option value
中加入恒等真式or 1=1
2.2.2点击go
就可以看到所有的天气数据了
2.3 日志欺骗(Log Spoofing)目标:通过在日志文件中添加一个脚本像用户名“admin”成功登录
2.3.1在user name
中输入lkq%0d%0aLogin Succeeded for username: admin
,,其中%0d是回车,%0a是换行符
2.3.2点击login in
就可以看到成功啦
2.4 XPATH注入(XPATH Injection)目标:作为迈克,尝试查看其他员工的数据
2.4.1在User Name
中输入永真式lkq ' or 1=1 or 'a' ='a
2.4.2点击submit
就可以看到所有员工的数据了
2.5 字符串SQL注入(String SQL Injection)目标:作为Smith,注入一个SQL字符串,显示所有信用卡号
2.5.1输入永真式Smith ' or '1'='1
2.5.2点击Go!
,就可以查看所有信用卡号了
2.6 字符串SQL注入(String SQL Injection)目标:使用SQL注入作为老板(“Neville”)登录,并使用所有功能
2.6.1第一次作为老板,在password
中输入永真式,登录,发现失败了,经过查看源代码,找到原因为:password
最大长度不够,于是再源代码中修改最大长度
2.6.2输入永真式' or 1=1 --
,其中--
是将后面的代码注释掉,就能够登录成功了
2.7 盲数字SQL注入(Blind Numeric SQL Injection)目标:在表格中找到字段pin的值
2.7.1输入以下代码,判断pin的值是否大于2500,发现无效,于是推断pin的值小于等于2500
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500);
2.7.2使用二分法进行反复猜测,最终找到pin的值为2364
3.XSS攻击
3.1 网络钓鱼和XSS(Phishing with XSS)目标:使用XSS和HTML插入,将html插入到该请求凭证中,添加javascript来实际收集凭证
3.1.1在search
框中输入写好的html代码,代码如下:
This feature requires account login:
Enter Username:
Enter Password:
3.1.2点击
search
后,下拉网页就可以看到输入框了,在里面输入任意字符,点击login
,就可以看到攻击成功了
3.2 存储的跨站点脚本(XSS)攻击(Stored XSS)目标:在搜索人员页面上使用一个漏洞来创建包含反射XSS攻击的URL。确认另一个使用该链接的员工受到攻击的影响。
3.2.1作为tom登录,点击ViewProfile
查看配置文件后,点击EditProfile
进行编辑,将任意一栏数据修改为:
<script>alert('20154324');</script>
3.2.2保存后登出,作为jerry登录,点击Search For User
查找Tom,就可以看到攻击成功了
3.3 执行反射的XSS攻击(Reflected XSS)目标:执行反射XSS攻击,在搜索人员页面上使用一个漏洞来创建包含反射XSS攻击的URL。确认另一个使用该链接的员工受到攻击的影响
3.3.1作为Tom登录后,点击Search For User
3.3.2在搜索框中输入以下代码:<script>alert('lkq');</script>
,就可以看到攻击成功了
4.CSRF攻击
4.1跨站请求伪造(CSRF)目标:给新闻组发邮件。电子邮件包含一个URL指向恶意请求的图像。在这节课中,URL应该指向“攻击”servlet,其中包含了“屏幕”和“菜单”参数,以及一个额外的参数“transferFunds”,它具有任意的数值
4.1.1查看自己电脑的Screen和menu的值
4.1.2Title
中任意输入,在Message
中输入写好的代码,点击Submit
后,点击下方的链接,就可以看到攻击成功了
<imgsrc="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=20000"/>
4.2 CSRF Prompt By-Pass 目标:输入代码,第一个为转帐的请求,第二个请求确认第一个请求触发的提示
4.2.1查看自己电脑的Screen和menu的值
4.2.2Title
中任意输入,在Message
中输入写好的代码,点击Submit
后,点击下方的链接,就可以看到攻击成功了,代码如下:
三、基础问题与回答
(1)SQL注入攻击原理,如何防御
- 攻击原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给We程序,以发号施令,为所欲为。
- 防御方法
- 普通用户与系统管理员用户的权限进行严格的区分。
- 不使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
- 加强对用户输入的验证
- 多多使用SQL Server数据库自带的安全参数
- 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点
(2)XSS攻击的原理,如何防御
- 攻击原理:在编写代码的时候,没有对用户输入数据的合法性进行判断,攻击者通过对网页注入可执行代码且成功地被浏览器执行,这些代码包括HTML代码和客户端脚本,达到攻击的目的,形成了一次有效XSS攻击
- 防御方法
- 在表单提交或者url参数传递前,对需要的参数进行过滤
- 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等
- 检查输出,严格控制输出
(3)CSRF攻击原理,如何防御
- 攻击原理:是一种对网站的恶意利用也就是人们所知道的钓鱼网站,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站,是一种依赖web浏览器的、被混淆过的代理人攻击
- 防御方法
- 在form中包含秘密信息、用户指定的代号作为cookie之外的验证
- 验证 HTTP Referer 字段,根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
- 在请求地址中添加 token 并验证,可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
四、心得体会
- 这是最后一次实验了,通过webgoat深入理解并运用了多种攻击,尝试了很多东西,这九次实验,可以说是非常有意思了(除了调试环境、调试bug),收获良多,虽然不能成功攻击他人,但是能够认识并且做出相应的防范了。学习到了不少的东西,也进行了多次的实践与尝试。