理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。
SQL注入
XSS攻击
CSRF攻击
netstat -tupln | grep 8080
查看端口是否被占用,如果被占用,用kill 进程号
终止占用8080端口的进程。java -version
查看jdk版本java -jar webgoat-server-8.0.0.M26.jar
加载jar包http://127.0.0.1:8080/WebGoat
打开WebGoat注册界面,先注册后登录即可。题目1
"SELECT * FROM user_data WHERE first_name = ‘John‘ AND last_name = ‘" + lastName + "‘";
,输入是lastName。
要求1
在不需要知道任何用户名的情况下,得到整张表的内容。
分析1
SELECT * FROM user_data WHERE first_name = ‘John‘ AND last_name = ‘
+ 输入
+ ‘;
OR true
即可。但是,注意到输入的前面有个‘
后面也有一个‘
,所以得到最终的输入为:(...)‘ OR ‘1‘=‘1
题目2
"SELECT * FROM employees WHERE last_name = ‘" + name + "‘ AND auth_tan = ‘" + auth_tan + "‘;
,输入是name和auth_tan。
要求2
在不需要知道任何用户名的情况下,得到整张表的内容。
分析2
SELECT * FROM employees WHERE last_name = ‘
+ 输入name
+ ‘AND auth_tan =‘
+ 输入auth_tan‘;
name = ‘ or true
就轻松破了这个题目。题目
"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;
输入是Login_Count和User_ID。
要求
Login_Count必须是数字,且通过这两个输入,得到整张表的内容。
分析
SELECT * FROM user_data WHERE login_count =
+ 输入Login_Count
+ AND userid =
+ 输入User_ID;
,即在表中查询login_count = 输入1 AND userid =输入2
Login_Count=1 or true --
这种方式很明显就无法实现。userid = 1 or true
这个Solution就能破了这个题目。题目
"SELECT * FROM employees WHERE last_name = ‘" + name + "‘ AND auth_tan = ‘" + auth_tan + "‘;
要求
只知道自己的Name和TAN,通过修改自己的工资,使得表中自己的工资最高。
分析
update employees set salary=1000000 where last_name=‘Smith‘;
,这里随便取了一个数值作为自己工资,觉得应该是够了。;
分号作为结束的标志,所以我们应该先使用‘;
来结束原本的SQL语句,然后接着上面的修改语句对表中内容进行修改,最后使用--
将后面没必要的内容注释掉。SELECT * FROM employees WHERE last_name = ‘‘; update employees set salary=1000000 where last_name=‘Smith‘;
题目
分析
drop table access_log;
‘;
来结束原本的SQL语句,然后接着上面的删除语句对表中删除相应内容,最后使用--
注释后面内容。
- 确定哪个字段易受XSS的影响,验证服务器端的所有输入总是一种很好的做法。 当HTTP响应中使用未经验证的用户输入时,可能会发生XSS;
- 在反射的XSS攻击中,攻击者可以用攻击脚本制作一个URL,并将其发布到另一个网站,发送电子邮件,或者以其他方式让受害者点击它;
- 一个简单的方法来确定一个字段是否容易受到XSS攻击,就是使用alert.()或console.log()方法,用其中一个找出哪个领域是脆弱的。
题目
分析
<script>alert(20175313);</script>
发现成功了。基于DOM的XSS通常可以通过查找客户端代码中的路由配置来找到。
题目1
通过检查Java脚本源代码,找到test路径。
分析1
No, look at the example. Check the GoatRouter.js file. It should be pretty easy to determine.
GoatRouter.js
,里面有一句:‘test/:param‘: ‘testRoute‘
,得到答案:start.mvc#test/
题目2
利用上一题中找到的测试路径,成功出发WebGoat中的内部函数webgoat.customjs.phoneHome()
分析2
可以看到没有调用函数,而是直接回显了。
<script>
标签,再试试这次没有回显,说明应该是调用成功了。打开控制台,发现结果已经出来,末尾的数字就是答案。
题目
分析1
题目要求我们换个源点击这个提交,那么就用Burp抓个包,把referer随便改一下,就得到了flag,然后把得到的flag填到下面的Confirm Flag Value中,就成功了。
分析2
Test in browser
后会生成一个网址,在连接Burp代理的情况下打开就会出现一个有按钮的页面,点击按钮跳转页面,得到flag。题目
下面的页面模拟评论/评论页面。 这里的区别是,您必须在其他地方启动提交,就像您可能使用CSRF攻击一样,并且类似于前面的练习。
分析
思路与上一题相似,只不过是把GET方法换成POST方法,这里就不重复叙述。
原理
- SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。如通过在用户名、密码登输入框中输入一些‘,--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。
- 总的来说,SQL注入就像是把前端输入的内容像填空一样填到后台递交给数据库的搜索语句中,凑成一个完整的SQL表达式,完成相应的任务。
防御
通过各种方式对非法输入进行检查:
- 检查变量数据类型和格式
- 对无法确定固定格式的变量,进行特殊符号过滤或转义处理
- 绑定变量,使用预编译语句
原理
攻击者通过往Web页面里插入恶意html标签或者javascript代码,并能够被浏览器成功的执行。
防御
- 在表单提交或者url参数传递前,对需要的参数进行过滤
- 检查用户输入的内容中是否有非法内容
原理
攻击者借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。CSRF的攻击分为两步:
- 注入恶意URL
- 然后在该地址中写入攻击代码,利用
等标签或者使用Javascript脚本
防御
- 通过referer、token或者验证码来检测用户提交
- 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作
- 避免全站通用的cookie,严格设置cookie的域
本次实验相对而言比较有意思,一下子一个SQL注入就吸引了我的眼球,虽然自己写的代码中数据库平时不经常接触到,但是在这个大数据的时代,数据库安全变得尤为重要。如果信息系统的安全性不够,简简单单的一个SQL注入有可能就获得了国家机密。想想真是可怕。
2019-2020-2 20175313张黎仙《网络对抗技术》Exp9 Web安全基础
原文:https://www.cnblogs.com/xiannvyeye/p/12838362.html