• 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-自己的用户名]的用户,然后登录点击这个任务就能过

  • 相关阅读:
    RVM Ruby 版本管理器的删除 Gatling
    JWT 构建Rails API 授权登录
    Linux grep根据关键字匹配前后几行
    bootstrap-table 常用总结-树形结构
    linux 下jq的使用
    SHELL脚本获取域名对应的IP地址
    golang将切片或数组进行分组
    linux的统计实现
    Linux:“awk”命令的妙用
    rails 上传文件
  • 原文地址:https://www.cnblogs.com/ruirui56/p/12915679.html
Copyright © 2020-2023  润新知