20155318 《网络攻防》 Exp9 Web基础
基础问题
- SQL注入攻击原理,如何防御
- 就是通过把SQL命令插入到“Web表单递交”或“输入域名”或“页面请求”的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
- 预防:可以在后台控制输入的长度,对于一些特殊符号禁止用户输入
- XSS攻击的原理,如何防御
- XSS跨站脚本攻击,是Web程序中常见的漏洞,分三类,存储型XSS、反射型XSS、DOM-XSS.XSS属于被动式且用于客户端的攻击方式,攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。
- 预防:对用户提交的的内容进行可靠的输入验证,在输入到输出的过程中进行过滤、转义
- CSRF攻击原理,如何防御
- CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器
- 对于表单的提交这类操作使用post方法代替get方法,避免使用全站通用的cookie,用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
实验过程
开启WebGoat
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,包含了XSS、线程安全、SQL注入等。
在命令行输入
java -jar webgoat-container-7.0.1-war-exec.jar
开启WebGoat出现如下信息表示成功
此时不要关闭命令行,打开浏览器访问localhost:8080/WebGoat,登录成功后可进行练习。
XSS注入攻击
1.Phishing with XSS
该实验的目的是读取登录用户的用户名和密码。修改html的源代码,生成一个包含form的html,写一个js将form提交的内容发送给攻击者,用弹窗alert做示例
首先输入编辑的XSS攻击的代码,将这段代码输入到输入框中,点击search出现如下登录框,会显示如登陆框:
在登录框中输入用户名、密码,点击登录后跳出弹框,其中包含用户输入的用户名、密码。
2.Stored XSS Attacks
通过在title中输入代码使用户访问时弹出非预期的内容。在这里我们在title中输入代码
<script>alert("你想在页面中显示的内容");</script>
3.Reflected XSS Attacks
将带有攻击性的URL作为输入源,例如依旧输入
<script>alert("想要显示的内容");</script>
,就会弹出对话框:这个和上个实验效果类似,但是两者所用的原理不一样,上一例存储型XSS是持久化的,代码是存储在服务器中,而这个实验中用的是反射型XSS攻击是非持久化的,一般来说存储型XSS攻击危害更大。
CSRF攻击
4.CSRF攻击
跨站请求伪造这个实验的目的是通过邮件的方式伪造一个转账请求。我们需根据题目里给出的数值参数来输入代码,在文本框中写入
<iframe src="attack?Screen=题中给出的scr&menu=题中给出的menu&transferFunds=转账金额"></iframe>
具体的参数可以参照右边的参数栏
提交后,会看到一个新的消息。点击它,用户的5000元就会被转走
5.绕过CSRF确认(CSRF Prompt By‐Pass)
网页中所有手动发起的请求操作,其实质是通过 HTML+JavaScript 向服务器发起请求。
我们的目标是给新闻组发送一封带有多个威胁请求的 Email查看页面右边Parameters中的src和menu值,并在title框中输入学号,message框中输入代码
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
- 查看用户操作的信息,攻击成功
SQL注入攻击
6.命令注入(Command Injection)
在正常的参数提交过程中,添加恶意的代码,往往能够得到以外的收获,比如执行系统命令。
点击firebug,调试网页源代码。在所请求的页面源代码中添加"& netstat -an & ipconfig"
点result后出现了网络端口使用情况和IP地址。
7.日志伪造(Log Spoofing)
通过注入恶意字符串,按照规则伪造出一条日志,目的是使用户名为“admin” 的用户在日志中显示“成功登录”。在Username输入```lxy%0d%0aLogin Succeeded for username: admin``,其中%0d是回车,%0a是换行符。
8.String SQL Injection
先随意输入一个用户进行查询
和数字sql注入相同,输入
' OR '1'='1
,也就是当1=1时输出信息,又由于1=1为恒等式,所以所有的用户信息都会被输出。9.Numeric SQL Injection
先查询一下不攻击的情况
需要尝试追加一个总是解析为true的SQL语句,拦截POST请求,用101 or 1=1替换101,将语句替换为
SELECT * FROM weather_data WHERE station = 101 OR 1=1
,即在查看器中更改代码如下图所示:攻击后即可查询全部城市天气
10.Blind Numeric SQL Injection
在输入框随意输入一个数字,运行后发现返回Account number is valid,说明这个数是合法的
构造输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 数值 );根据返回结果判定合法范围
判断2363
判断2364
使用二分法进行测试,确定值是2364,输入2364后破解成功
实验总结
- 本次实验在Webgoat平台上完成,通过命令注入、日志欺骗、数据库后门等方式,进行网络攻击。本次实验较为简单,选取了10个进行记录,在实验过程中遇到的问题,通过查询网上资料和参考其他同学的博客都得到一一解决。这次实践加深了我对这门课的认识,有很强的实用性~