码迷,mamicode.com
首页 > Web开发 > 详细

Exp9 Web安全基础

时间:2018-05-24 23:04:03      阅读:979      评论:0      收藏:0      [点我收藏+]

标签:tables   综合   SM   min   sql   版本   用户名   project   博客   

exp9 Web安全基础

0x0 环境说明

终于来到Web安全这一方向了,这也是课程的最后一次实验。

我还只是个Web安全的小白,对这一领域不了解。我希望通过这次实验,学习Web安全中基本的漏洞点,以及基本的漏洞利用技巧,增加了解。

当然,基础知识一定要补齐,以后学习过程中应该缺啥补啥。

  • 训练环境:OWASP WebGoat project 8.0
  • 8.0版本的WebGoat更像是一个teaching platform,而不是hacking platform
  • 暂时只完成教学部分,challenge部分的CTF需要有实力以后再去完成。

0x1 基本技能——HTTP和HTML基础

WebGoat 8.0教学的第一部分就是学习HTTP协议,已经设置HTTP代理,修改HTTP数据包。

当然啦,作为OWASP项目,使用的工具是OWASP ZAP这个开源扫描器。

技术分享图片

首先设置HTTP代理服务器的端口

技术分享图片

然后再浏览器中配置HTTP代理,这里我用的是firefox

技术分享图片

一定要注意,把localhost和127.0.0.1

练习——修改HTTP数据包

WebGoat有一个修改过HTTP数据包的练习,要求是:

  • 将方法设置为GET
  • 添加头部字段‘x-request-intercepted:true‘
  • 将输入值‘changeMe‘改为‘Requests are tampered easily‘ (没有单引号)

技术分享图片

点击ZAP的绿色小圆钮拦截请求,然后我们按要求修改、发送即可。

技术分享图片

注意,将POST方法给为GET方法时,参数就不在HTTP数据包中了,而是变成了URL参数。

练习——绕过2FA(双因素认证)

WebGoat中提供了这样一个练习,我们要重置password,需要回答密保问题。

但是我们不知道要问题的答案,我们通过ZAP修改HTTP请求包欺骗系统,从而重置password

技术分享图片

随便在表单中输入数据,然后用ZAP把HTTP请求截获下来。

技术分享图片

一开始我无论怎么修改,都没办法通过验证。后来我在YouTube上看到了解决方法

把secQuestion0该为secQuestion00,把secQuestion1改为secQuestion01,然后提交就可以了。

技术分享图片

为啥这样就能成功呢?我到现在也没弄明白。

练习——不安全的登录(Insecure Login)

webgoat中的这个教程是告诉我们传输未加密的敏感信息是非常危险的。

技术分享图片

练习题的要求就是嗅探提交数据,得到用户名和password。

我们用ZAP直接查看HTTP请求包就可以发现username和password了。

技术分享图片

提交上面的数据就完成了这个练习。

练习——客户端缺陷(Client side filtering)

这个练习告诉我们向客户端发送过多的信息会导致严重的 访问控制问题

我们在这个练习中的目标是获取更高权限才能获得的信息。

技术分享图片

该练习的要求是拿到CEO的薪水信息,CEO的名字是Nevile Bartholomew。

以我的权限是无法在页面看到CEO的信息的。

技术分享图片

但是HTML源码却泄露了CEO的信息。

技术分享图片

我们轻松拿到了该练习的答案——CEO的薪水为450000

技术分享图片

这道题还是相当简单的。

0x2 课程1——注入漏洞(Injection Flaws)

这部分教学有四项内容,SQL Injection、SQL Injection(advanced)、SQL Injection(mitigations)、XXE

技术分享图片

0x31 SQL injection(已完成两个练习)

先是基本的SQL注入教学,webgoat会介绍string SQL injection(字符串型的SQL注入)和numberirc SQL Injection(数字型SQL注入)

一个成功的SQL注入可以:

  • 读取和修改数据库中的敏感数据
  • 执行数据库管理员操作
    • 关闭审计或DBMS
    • 截获表格和日志
    • 添加用户
  • 恢复DBMS文件系统中给定文件的内容
  • 列出操作系统的指令

SQL注入举例

可能的字符串型注入有:

"select * from users where name ='" + userName + "'";

可能的字符型注入有:

"select * from users where employee_id = "  + userID;

攻击者可以提供的输入有

  • userName = Smith‘ or ‘1‘ = ‘1
  • userName = ‘ or 1=1 --
  • userID = 1234567 or 1=1
  • UserName = Smith‘; drop tables users; truncate audit_log

Web应用程序会执行

  • select * from users where name=‘Smith‘ or ‘1‘=‘1‘
    • select * from users where name=‘Smith‘ or TRUE
  • select * from users where employee_id = 1234567 or 1=1

这样,所有的记录会从数据库中返回

练习1——String SQL Injection

直接使用webgoat教程中给出的技巧即可。

技术分享图片

练习2——numberic SQL Injection

使用数字型SQL注入的技巧即可。

技术分享图片

0x22 SQL Injection(advanced)——进阶SQL注入(共两个练习,完成一个)

接着我们探索更高级的SQL注入话题。我们在这里需要了解

  • 组合SQL注入技术(Combining SQL Injection Techniques)
  • SQL盲注(Blind SQL Injection)

虽然Webgoat中说这些技巧是advanced,但放到现在,也只是基本技术。

你需要知道的特殊字符和特殊语句

Webgoat给出了特殊的字符

/* */ 是内联注释(inline comments)
--, # 是行注销(line comments)

举例:Select * from users where name = 'admin' -- and pass = 'pass'
; 允许执行多个查询(query chaining)

举例:Select * from users; drop table users;
', +, || 允许字符串的
Char() 无引号的字符串

举例:Select * from users where name = '+char(27) or 1=1

不过,不同的数据库也细微的差别。

一些特殊的语句在SQL注入中也起到关键的作用:

  • union可以重叠数据库的表格,‘select id, text from news union all select name, pass from users‘
  • joins可以连接到其他的表

练习1——尝试从其他表格中获取数据

Webgoat在这一部分的第一个练习,目的是找到Dave用户的password。

技术分享图片

由于要用到union查询,我们必须知道select语句选择的列数。

我看别人的博客,好像是要用 order by排序来判断列数的。

其实在这里可以直接输入‘ or 1=1 --把表格全部脱出来的,很容易就知道列数了

dave不在这张表格里,需要用union语句把user_data_system表格显示出来

我们构造的字符串是

' union null, username, password, null, null, null, null from user_data_system -- 

技术分享图片

发现了!!dave的password就是dave。

但不知道为什么,完成后WebGoat没有点亮这个图标。可能是输入的攻击字符串不是标准答案吧。

事实上,这个SQL注入点非常脆弱,只要输入

'; select * from user_daa_system; --

同样可以达到相同的效果。

未完成的练习

接下来的题目我还没有做出来,不过作为一个Web萌新,这是正常的。

技术分享图片

这是一道需要综合SQL注入技术的题目,可能还需要结合SQL盲注,等我研究一下,后面再攻克这个题目。

0x23 SQL Injection(mitigations)——SQL注入的缓解与防御

这一部分介绍了SQL注入的缓解措施。

比如:不可变的查询语句、静态查询语句、参数化语句、存储过程等。

而且给出了许多例子,有兴趣的同学自己在WebGoat 8.0上浏览即可。

webgoat在这一部分只有一道习题。

技术分享图片

这里WebGoat给出的提示是通过order by,找到webgoat-prd服务器的IP地址。

而且这里的表单并不是一个脆弱的SQL注入点。

YouTube上的一个视频展示了这道题的做法,这道题应该是截获HTTP响应包,然后进行修改。

技术分享图片

????我没有明白这道题在这一模块的作用是啥。因为只要输入表单上存在的IP地址,WebGoat都会提示你通过了。

技术分享图片

现在我们看到表单中出现了webgoat-prd了。

暂时就当这道题是这么做的吧,虽然和SQL注入技巧关系不大,不过好歹也学会了修改HTTP响应中的JSON数据了。

我们在实践中,应该注意最小权限原则,尤其是要在数据库连接池中注意读写权限的分配。

小结

在注入漏洞(Injection Flaws)这一教学模块中,我有一道综合的SQL注入练习没有完成。

由于我对XML不是很了解(虽然在java web课程中接触过),没有完成XXE部分的教学练习。

如果我想成为一个技术大牛的话,这些技巧必须要掌握的。

但由于咱们只是玩票的性质,暂时放一放吧。

0x3 课程2——XSS

XSS的可以分为三类:反射型、存储型、基于DOM的XSS。

第一个练习

第一个练习是获取当前页面的cookie,这里需要用chrome或者firefox浏览器

新开一个标签页,并在地址栏输入一下内容

javascript:alert("XSS Test");
javascript:alert(document.cookie);

然后比较两个标签页的cookie是否一致。

技术分享图片

我们可以发现,这两个标签页的cookie都是JSESSIONID=D0913650405F1FEBC6B4457F52193892

练习2——一个反射型XSS

在服务器端检查用户的所有输入是一个好的实践。反射型XSS中,攻击者让用户“点击”带有攻击脚本的恶意URL。

在这个练习中,要求我们的攻击载荷包含<script>alert(‘my javascript here‘)</script>

我们的任务是找到一个哪一个表单元素是可以执行XSS。

技术分享图片

随便选一个输入框输入攻击载荷,在按下UpdateCart按钮

技术分享图片

WebGoat给出了通过的提示,也就是说我们尝试的注入点是对的。

(虽然我做这个练习的时候感觉莫名其妙……这是啥效果???)

练习3——确认一个基于DOM的XSS

基于DOM的XSS是另一种形式的反射型XSS,它们都是通过链接触犯并在浏览器上作用的。不同的是,基于DOM的XSS不会跑的服务器上,它只会在客户端上执行,攻击者的恶意代码以本地账号的权限执行。

用户不会知道发生了攻击行为……恶意攻击者不会使用<script>alert(‘xss‘)</script>

这个练习里面,需要寻找一些“测试”代码(WebGoat使用backbone作为其主要的JavaScript库)。 有时候,测试代码会在生产中遗留下来(通常测试代码非常简单,缺乏安全性或任何质量控制!)。

你的目标是找到路径并利用它。这里需要找到测试代码的位置。

技术分享图片

根据提示,我们要检查GoatRouter.js文件,通过firefox浏览器的开发者工具就可以查看。

技术分享图片

我们很轻松的发现,Backbone库中,测试代码的路径

技术分享图片

然后填写答案,并提交

技术分享图片

下一步应该是进行真正的基于DOM的XSS攻击。

未完成的练习

webgoat的XSS课程还有两个练习我没有完成。

一个就是尝试基于DOM的XSS攻击,通过URL执行webgoat.customjs.phoneHome(),然后会获取一个随机数,提交这个随机数后就完成了这个练习。

最后一个练习给出了一个场景,完成的目标和上一题一样。

我暂时还没解决这些问题,先放一放。

小结

即便做了XSS部分的三个教学练习,我对XSS还是一头雾水。

WebGoat 8.0 给出的提示和教学非常少,还得有一定的基础才能玩的开心呀。

基础问题解答

(1)SQL注入攻击原理,如何防御

  • 原理:向Web应用程序输入一段精心构造的SQL查询指令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作。
  • 防范:输入过滤、参数化sql语句或直接使用存储过程、提供更少的错误信息

(2)XXS攻击原理,如何防御

  • 原理:由于Web应用程序的输入验证机制不完善,攻击者在服务器端网页中插入一些恶意的客户端代码,在Web服务器上产生出一些恶意攻击页面。
  • 防范:输入验证、输出净化(对HTML标签进行转义)、消除危险输入点。提升客户端浏览器安全性。

(3)CSRF攻击原理,如何防御

  • 原理:攻击者盗用用户身份,伪造恶意请求发送给服务器,完成预期操作。
  • 防御:通过referer、表单令牌token或验证码来检测用户提交、避免全站通用的cookie,严格设置cookie的域、不用在页面链接中暴露用户隐私信息。

实验新得与体会

课程结束了,而技术之路是没有止境的。

我在这门课程中玩了后门和木马、用了各种工具、尝试了一些漏洞、在虚拟环境里面各种捣鼓,虽然连脚本小子都算不上,但也体会到了入侵带来的快感。

不过,就算工具玩得再花,扫描器用的再熟,技术依然是浮于表面的,缺乏深入研究的,离真正的“黑客”还差的很远。

人的精力是有限的,即便是专业人士,也只是在某些细分领域略有所得。

成为公务员之后,我应该没有机会接触这些技术了。

但是,足够耐心、乐于钻研、不断学习、勇于挑战、崇尚自由甚至略微叛逆的极客精神,是我得到的最大精神财富。

Exp9 Web安全基础

标签:tables   综合   SM   min   sql   版本   用户名   project   博客   

原文地址:https://www.cnblogs.com/wyf12138/p/9074566.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!