- 1.1. 实验后回答问题
- 2. 实践过程记录
- 2.1. 安装Webgoat
- 2.2 SQL注入
- 2.2.1 SQL injection(introduction) -> String SQL injection
- 2.2.2 SQL injection(introduction) -> Numeric SQL injection
- 2.2.3 SQL injection(introduction) -> Compromising confidentiality with String SQL injection
- 2.2.4 SQL injection(introduction) -> Compromising Integrity with Query chaining
- 2.2.5 SQL injection(introduction) -> Compromising Availability
- 2.2.6 SQL Injection (advanced) -> Pulling data from other tables
- 2.2.7 SQL Injection (advanced) -> 0x06选择题
- 2.3 XSS学习
- 2.4 csrf学习
1.1. 实验后回答问题
(1)SQL注入攻击原理,如何防御
原理:服务器程序有漏洞使不合理信息注入后台。
防御:在执行sql语句中使用prepare-statement进行预编译,将前台传入的东西全部作为变量的值。
(2)XSS攻击的原理,如何防御
原理:应用的前台允许让用户输入脚本,并且没有编码或者加密的措施。
防御:检测特殊字符,给字符做编码或者转义。
(3)CSRF攻击原理,如何防御
原理:网站只认用户的cookie,cookie可以被盗窃后使用。
防御:除了cookie、网站还要对请求的来源进行分析,或者使用挑战应答来防御。
2. 实践过程记录
2.1. 安装Webgoat
- 在官网上面找到最新版的jar包如下
- 将jar包拷贝进kali,然后用
java -jar [包名]
安装,出现下面start这一行后终端发生了阻塞,表明开启成功
- 在浏览器中输入网址localhost:8080/WebGoat,会出现用户登录界面(需要自己注册,下图中的密码仅为示意,不是真实密码(真实密码需要6到10位))
- 注册后成功登录,右侧为可以选择学习的课题
2.2 SQL注入
- 选择injection的课程进行sql注入的学习
2.2.1 SQL injection(introduction) -> String SQL injection
- 题目:
- 正确解答:
- 分析:第一个选择
'
和smith'
都可以,只要or前面出现一个单引号,第二个毫无疑问是or,第三个选择'1'='1
是因为我们sql注入时,在文本框里面输入的值传给last_name做参数的时候系统会在最后加上一个单引号
2.2.2 SQL injection(introduction) -> Numeric SQL injection
-
题目:
-
要求:从users表中检索所有数据
-
提示:这些字段中只有一个易受SQL注入的影响,需要找出受影响的那个字段
-
- 正确解答:
- 分析:容易看到输入的参数以数值型作为了sql语句的查询条件,然后用#和--注释符发现都不成功,说明过滤严格只能输入数字类型,用or 1=1来判断哪一个是注入点,发现第二个文本框可以sql注入
2.2.3 SQL injection(introduction) -> Compromising confidentiality with String SQL injection
-
题目:
- 要求:从employees表中检索所有员工数据
- 解答:
2.2.4 SQL injection(introduction) -> Compromising Integrity with Query chaining
-
题目:
-
要求:把Smith的薪水改高
-
提示:查询链接时,尝试将一个或多个查询附加到实际查询的末尾,可以通过使用;字符来完成此操作
-
- 解答:
框1:Smith
(或者其他的任意值)
框2:3SL99A(或此处为空)' ;update employees set salary=20175323 where last_name='Smith' --
2.2.5 SQL injection(introduction) -> Compromising Availability
-
题目:
-
要求:删除访问记录表中的内容
-
提示:如果帐户被删除或密码被更改,则实际所有者将无法再访问该帐户。攻击者还可以尝试删除数据库的部分内容,使其无用,甚至删除整个数据库。另一种破坏可用性的方法是,每个示例都从管理员或任何其他用户处撤消访问权限,这样就没有人能够访问数据库的(特定部分)。
-
-
解答:
- 通过尝试输入SMith和
Smith"
,都可以显示以下结果:
- 通过尝试输入SMith和
-
猜测是通过在action字段模糊匹配来查询
-
尝试使用
'; delete from access_log where action like 'Smith' --
,显示There is still evidence of what you did. Better remove the whole table.
-
所以用drop table语句:
2.2.6 SQL Injection (advanced) -> Pulling data from other tables
-
进入sql进阶的练习,有一些学习内容如下:
- 特殊符号
- UNION和JOIN
-
题目:
-
要求:从user_system_data表中获取所有的数据,找到Dave的密码
-
提示:使用UNION,或者附加一个新的SQl语句
-
-
解答:
-
用
;
-
用注释符
-
- 不用注释符
- 获得Dave的密码并输入第二个框,成功
2.2.7 SQL Injection (advanced) -> 0x06选择题
- 解答:
2.3 XSS学习
2.3.1 Cross Site Scripting -> 2.What is XSS?
-
题目:
- 要求:开一个新标签页(相同的url)然后打开java控制台输入语句,查看两个网页的输出是否相同
-
解答:
- 在java控制台中输入
alert(document.cookie)
- 在java控制台中输入
- 可以看到两个网页输出是一样的,所以在问答框中输入yes,通过
2.3.2 Cross Site Scripting -> 7.Reflected XSS
- 题目:
-
分析:点击一下UpdateCart,会发现下方将credit cart number显示出来了,那么credit cart number的输入框应该是一个攻击点。
-
解答:将
<script>alert("20175323")</script>
输入credit cart number
,攻击成功:
2.3.3 Cross Site Scripting -> 10.dentify potential for DOM-Based XSS
- 题目:
- 分析:题目中提示
To answer this question, you have to check the JavaScript source.
故打开调试器去看代码。
- 里面有一句:'test/:param': 'testRoute',那么答案就是:start.mvc#test/
2.3.4 Cross Site Scripting -> 12.一套单选题
2.4 csrf学习
2.4.1 csrf -> 8.Login CSRF attack
- 题目:
- 分析:这道题模拟攻击者发给被攻击者一个链接,被攻击者点进去之后自动进行了某个网站(比如google)的登录,被攻击者在不知情的情况下用google进行搜索,搜索记录都会被攻击者看到。按题目所说,我们只要注册一个名为[csrf-自己的用户名]的用户,然后登录点击这个任务就能过