这是我的靶场练习第一篇,写的比较少,希望大家多担待。
Burte Force(暴力破解)概述:
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
…等等。
同上直接抓包即可,后台发送的验证码默认是有24分钟的有效期,所以我们有24分钟的爆破时间,但是要是后台了验证码的过期时间被设置为1分钟那么就无法爆破了。
这是因为验证码是存在于服务器的session里面的,而session默认是24分钟才会被清除。
(on client)
同上,直接抓包,爆破即可。
但是我们可以对验证码做一下探讨
在这里我们在数据包中修改了验证码,但是返回的结果没有提示验证码错误。
这是因为这里的验证码只拦截了前端的页面,而没有拦截发送的数据包,从而可以直接修改数据包来达到绕过验证码,
通过抓包,我们发现在post包的内容中,多了一个token的值。
在这里可能有人不知道什么是token,那么我们来了解一下什么是token。
什么是token?
1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
参考:https://www.jianshu.com/p/24825a2683e6
所以,后端会生成一个token返回给客户端,当客户端进行请求时,就会同时携带该token,与服务端的token来比对,一样就接受,不一样就丢弃。
但是,用token来防止暴力破解是不行的,这是因为token存在于前端,可以被很容易的捕获。
通过测试发现每个数据包的token在变化,所以使用pitchfork进行爆破。
第 一个变量直接导入字典即可,(目录不能有中文,不然无法导入)
第二个变量,就需要设置成上面的形式。
同时线程数,也需要设置成一个。
最后爆破即可。
XSS(跨站脚本)概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS:
对于反射型xss,交互的内容一般不会存储于数据库中(即服务器中),是一次性的,会根据用户输入,实时返回相应的内容,一般出现在查询类的页面中。
2.存储型XSS:
存储型的xss会把与服务器交互的内容存储在数据库中(即后台服务器中),永久存储,一般出现在留言板和注册等页面,会把用户输入的内容存储在数据库中。
3.DOM型XSS:
不与后台服务器交互数据,而是通过DOM数来操作前端的代码,在输出的时候会产生的问题,一次性的也属于反射型。
在这里我们提到了DOM,那么什么是DOM呢?
DOM就是js可以通过DOM树来操纵HTML的接口,js通过DOM提供的方法对HTML标签进行修改,删除等操作,来改变页面布局。由于HTML是由于各种标签来构成的,所以j就可以通过修改标签来改造页面。
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
攻击者将自己构造的js代码,插入到服务器端,然后用户在访问的时候,服务器就会将带有该js代码的页面返回给客户端,客户端的浏览器再执行插入的js代码,从而达到相应的攻击效果。
(一方面是插入时的过滤不当,和返回给客户时的转义不当,这两方面构成了xss)
1.在目标站点找到输入点,比如查询接口,注册,留言板等可以与页面交互的地方。
2.开始手测,先输入一组"特殊字符+唯一的识别字符",点击提交后,看页面是否会对提交的内容进行处理(过滤和转义等)如果是原封不动的返回来,那么可能就存在xss了。
3.通过搜索到输入的唯一识别字符,在结合唯一字符的前后愈发来确认是否可以执行构造xss的条件(构造闭合),来插入要执行的代码。(可以通过查看页面源码来查看)
3.提交的脚本代码(以及各种绕过姿势),看是否可以执行成功,执行成功就说明有xss漏洞。
我们在测试xss的时候,最开始最好先输入一些特殊的字符来确认哪些字符会被过滤以及转义,然后定位到相应的位置来看看该如何构造payload。
然后弹出了相应的内容。
可以看到这是一个留言板,会存储我们写下的内容。
当我们插入相应的payload后。
可以看到我们输入的payload已经插入到数据库中。除非在数据库中删除该xss,否则会一直生效。
可以看到我们在插入了'>
,这句话之后就弹出了我们想要的内容。
我们先通过 "> 闭合了herf标签,然后再插入相应的payload.