博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Exp9 Web安全基础 20164303景圣
阅读量:5967 次
发布时间:2019-06-19

本文共 2893 字,大约阅读时间需要 9 分钟。

Exp9 Web安全基础

基础问题回答:

  1. SQL注入攻击原理,如何防御?

    • SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。

    • 对于SQL注入攻击的防范,我觉得主要还是应该从代码上入手:
      • 采用预编译语句集PreparedStatement,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。它的原理就是SQL注入只对SQL语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对SQL语句进行解析准备,因此也就避免了SQL注入问题;
      • 使用正则表达式过滤传入的参数,对一些包含sql注入的关键字进行过滤;
      • 采用字符串过滤的方法;
      • JSP中调用该函数检查是否包含非法字符,防止SQL从URL注入。
  2. XSS攻击的原理,如何防御?

    • XSS是代码注入的一种,它允许恶意用户将代码注入到网页上,并能够被浏览器成功的执行,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。XSS攻击的主要目的是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。
    • XSS的防御可以从以下两方面来进行:
      • 一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤;
      • 检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。

3.CSRF攻击原理,如何防御?

  • 我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息。而CSRF是借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。
  • 对于CSRF的防御也可以从以下几个方面入手:
    • 通过referer、token或者验证码来检测用户提交;
    • 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作;
    • 避免全站通用的cookie,严格设置cookie的域。

 

实验步骤:

一、WebGoat配置

进入https://github.com/WebGoat/WebGoat/releases/tag/7.0.1网站

下载 webgoat-container-7.0.1-war-exec.jar 

输入 java -jar webgoat-container-7.0.1-war-exec.jar 安装jar包

 

看到上图红框中信息后打开浏览器登陆 http://localhost:8080/WebGoat 网站。


 

 二、SQL注入攻击(Injection Flaws)

 

 1.命令注入(Command Injection)

    • 选择 Injection Flaws -> Command Injection
      右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an"
    • 点击 view,看到网络端口使用情况和 IP 地址,攻击成功

 

 

2.日志欺骗(Log Spoofing)

    • 选择 Injection Flaws -> Log Spoofing
    • 在User Name中输入js%0d%0aLogin Succeeded for username: admin利用0D%(回车)和%0A(换行)让其在日志中显示两行
    • 输入任意密码后点击 Login,成功将用户名追加到日志文件中。

 

 

3.SQL 注入(LAB: SQL Injection)

stage 1:String SQL injection

    • 选择 Injection Flaws -> String SQL Injection,右键页面将password密码框,选择inspect Element审查网页元素对源代码进行修改,将其最大长度限制改为20

 

 

    • 以用户Neville登录,输入密码Smith' or '1' = '1
    • 攻击成功,得到所有人员列表

 

 

 

4.盲数字SQL注入(Blind Numeric SQL Injection)

    • 服务端页面返回的信息有两种:帐号有效,账号无效,因此无法简单地查询到帐号的 PIN 数值。但可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;
      如果返回了帐号的信息,页面将提示帐号有效,否则提示无效。
    • 输入101 AND 1=1 页面返回帐号有效

    • 输入101 AND 1=2 第二个条件不成立,页面返回帐号无效

    • 输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );页面返回帐号无效,说明PIN<=10000

 

 

    • 多次尝试输入,输入2364为正确PIN值

 

二、XSS攻击

1.存储型XSS攻击(Stored XSS Attacks)

    • 在title中任意输入字符,留言板中输入<script>alert("js4303");</script>

 

 

2.反射型XSS攻击(Reflected XSS Attacks)

    • 输入代码<script>alert("js4303");</script>点击purchase的同时页面就给出了反馈

 

 

三、CSRF攻击

1.跨站请求伪造(Cross Site Request Forgery (CSRF))

    • 查看页面右侧Parameters中的src和menu值,分别为321和900
    •  

    • 在title中输入任何参数,message框中输入
    • 点击 Submit (其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
    •  

       

2.绕过 CSRF 确认( CSRF Prompt By‐Pass

 

    • 查看页面右侧Parameters中的src和menu值分别为279和900
    •  

    • 在title框中输入学号,message框中输入代码:
    •   

       

       

      点击链接,攻击成功

 


 实验感想:

这次实验难度不高,但项目比较多,因此也花费了不少时间。终于做完了最后一个实验,有点小开心,尽管说实话自己也觉得做得不怎么样,验收从没有去过,现场的确做不出来,一般要花费好几天才能搞定,因此从来没敢去验收。但将基础的东西完整地做完,我觉得自己的收获也不少。尽管过程很痛苦,但现在想起来还是挺好的。

 

转载于:https://www.cnblogs.com/js0905/p/10927066.html

你可能感兴趣的文章
ubuntu 下升级docker版本
查看>>
EXSi5.5安装篇
查看>>
开始记录吧
查看>>
windows下用php开发类似百度文库应用需要的工具和问题
查看>>
css模拟select设置高度在ie67下有效(也可作为去除边框)
查看>>
MySQL双主(master-master)补充
查看>>
ldap添加自定义字段
查看>>
Vertically aligning HTML
查看>>
Linux之cut命令
查看>>
jedis 用连接池时超时返回值类型错误
查看>>
nginx 查看每秒有多少访问量
查看>>
python正则表达式
查看>>
安装nagios中php安装报错 configure error xml2-config not foud
查看>>
php邮件发送类
查看>>
Python算法题----在列表中找到和为s的两个数字
查看>>
《深入理解Java虚拟机》(二)java虚拟机运行时数据区
查看>>
分布式日志平台--ELKStack实践
查看>>
互联网思维
查看>>
ecshop备份数据 ecshop转移数据 ecshop更换主机
查看>>
手机将与瘦客户机争夺办公桌面
查看>>