目录
- 2018-2019 20165208 网络对抗 Exp9 Web安全基础
- 实验内容
- 基础问题回答
- 实践过程记录
- 1. WebGoat准备
- 2. SQL注入攻击
- 2.1 Command Injection 命令注入
- 2.2 日志欺骗(Log Spoofing)
- 2.3 LAB:SQL Injection
- 2.4 数字型盲注入(Blind Numeric SQL Injection)
- 3. XSS攻击
- 3.1 Phishing with XSS 跨站脚本钓鱼攻击
- 3.2 Stored XSS Attacks 存储型XSS攻击
- 3.3 Reflected XSS Attacks 反射型XSS攻击
- 4.CSRF
- 4.1 Cross Site Request Forgery(CSRF)
- 4.2CSRF Prompt By-Pass
- 实验感悟
2018-2019 20165208 网络对抗 Exp9 Web安全基础
实验内容
(1)SQL
(2)XSS
(3)CSRF
基础问题回答
(1)SQL注入攻击原理,如何防御
原理:
通过在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。其实就是输入框中的字符提交到后台的数据库中会与SQL语句组合拼接,如果猜测出后台的SQL语句格式,然后有针对性的输入,就可以达到相应目的。
防御办法:
可以在后台控制输入的长度或者禁止用户输入一些特殊符号,例如 -- 、' 等。
可以通过JAVA中的绑定变量等方法进行预防,JAVA的绑定变量方法是吧用户的输入作为一种变量,对SQL语句进行预编译,这样在执行时就不是顺序执行,而是把输入作为一种变量进行处理,不会在运行时进行动态的拼接SQL语句,防止了恶意的攻击代码被写入SQL语句进行解析和执行。
(2)XSS攻击的原理,如何防御
原理:
攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
防御办法:
用户角度:提高防范意识,不要轻易输入个人信息,如用户名密码。
网页编写者角度:在输入到输出的过程中进行过滤、转义
eg:①过滤 标记,XSS跨站攻击的最终目标是引入script代码在用户的浏览器中执行,所以最基本最简单的过滤方法,就是转换 标记。
②HTML属性过滤,一旦用户输入的语句中含有javascript,jscript,vbscript,都用空白代替。
③过滤特殊字符:&、回车和空格。
(3)CSRF攻击原理,如何防御
原理:
CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器。
主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码。
防御办法:
尽量别让浏览器记住密码,这样就没有cookie了,也没有可获取的东西。此外,可以在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
“双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
实践过程记录
1. WebGoat准备
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。
- 下载webgoat-container-7.0.1-war-exec.jar文件
下载地址为:https://github.com/WebGoat/WebGoat/releases ,在最下面的“The OWASP WebGoat 7.0.1 Release”中,选择webgoat-container-7.0.1-war-exec.jar文件进行下载
- 终止占用8080端口的其他进程
因WebGoat默认使用8080端口,所以开启前先用netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill 8080
终止占用8080端口的进程。
- 开启WebGoat
在含有“webgoat-container-7.0.1-war-exec.jar”文件的目录下执行java -jar webgoat-container-7.0.1-war-exec.jar
运行Webgoat,出现信息: Starting ProtocolHandler ["http-bio-8080"]说明开启成功,可以看到占用8080端口,实验过程中不能关闭终端
- 浏览器打开WebGoat
在浏览器中输入http://localhost:8080/WebGoat
进入WebGoat登录界面,直接用默认用户名密码登录即可;
2. SQL注入攻击
2.1 Command Injection 命令注入
2.2 日志欺骗(Log Spoofing)
在username中填入5208%0d%0aLogin Succeeded for username: admin,利用回车(0D%)和换行符(%0A)让其在日志中两行显示
进而,我们思考,可以向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到。
用户名输入admin ,管理员可以看到弹窗的cookie信息。
2.3 LAB:SQL Injection
2.4 数字型盲注入(Blind Numeric SQL Injection)
本节课程中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。尽管如此,我们可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;
如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐 号有效,否则无效。
针对查询语句的后半部分构造复杂语句
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 )
;
3. XSS攻击
3.1 Phishing with XSS 跨站脚本钓鱼攻击
跨站脚本攻击是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击.
在webgoat找到Cross-Site Scripting (xss)攻击打开第一个——Phishing with XSS
将下面这段代码输入到"Search:"输入框中,点击search;