20175323 Exp9 Web安全基础

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",都可以显示以下结果:

  • 猜测是通过在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)

  • 可以看到两个网页输出是一样的,所以在问答框中输入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-自己的用户名]的用户,然后登录点击这个任务就能过

posted @ 2020-05-31 01:17  20175323鞠欣余  阅读(192)  评论(0编辑  收藏  举报