一次文件上传对 Token 的绕过

Andrew2020-11-09 17:53:18

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

No.1 背景

在Web渗透过程中,最离不开的应该就数Burpsuit了,通过它,我们可以很方便的进行数据包的修改和重放。例如在进行sql注入时,我们需要通过不断的修改Post数据的内容来测试payload。为了防止数据包的重放,token机制被引入了代码中。

Token常见的两种功能,一种是用来代替账号密码,当你登录后,就不需要不断的去数据库查询账号密码来验证身份,只需要验证token即可(就像session),另一种是为了防止CSRF攻击,每次请求前会先向服务端请求并获得一个token,然后在会在后面的请求中带上这个值。有的token每次请求都会重新获取,而有的会持续一段时间。

就像上面说的,常见的token是用在一些敏感操作作为防御CSRF攻击的一种手段,例如,修改密码、增加用户、转账等。这边分享一个在文件上传时遇到Token限制的案例。

No.2 案例

在一处上传点,像往常一样进行上传并抓包:

抓包后看到如下请求:

竟然在文件上传点用了Token,继续抓包:

可以看到第二阶段的包才是进行上传的包,并且把第一个请求中获取到的token插入到了请求体中,放包一次,成功:

再放包一次:

这次上传失败了,说明这里token刷新了

重放了一次第一阶段的数据包,获取到新的token:

将这个token替换到第二阶段数据包的token中,这次重放又成功了:

为了能够不断重放数据包,方便我们测试,这里得想办法绕过token的限制。根据判断,这里分成三步,第一步,获取token,第二步,插入token,第三步,上传文件。由于每次上传,数据包中需要改变的地方只有token,根据这个特点,我们可以利用自动化脚本的方式来方便我们测试,既然脚本有了,再接下去我们就可以手动调试或加载字典进行愉快的fuzzing了。

关于这里的发送数据包,可以通过代码的形式将整个POST请求的数据包表示出来,当然,还有一种很偷懒(很香)的方式,调用系统curl命令执行请求就可以了。这么大个数据包,肯定有人会说,这curl的命令不得很难写吗?其实很简单,方法如下:

Burpsuit已经为我们提供了快速将数据包转换成curl命令的功能了:

curl -i -s -k -X $'POST'

接下来,上传文件的包同理,但是因为我们测试的时候是放的一张图片,这样的话会导致复制的内容很长,所以这里可以将图片的内容进行删减,例如变成这样子:

然后复制即可:

curl -i -s -k -X $'POST'

OK,命令有了,后面就是愉快的py了。这里以导入字典fuzzing为例,代码如下:

#encoding:UTF-8

最终效果如下:

这样我们就利用脚本绕过了Token限制了。

原创: 雷神众测 rebootORZ
原文链接:https://mp.weixin.qq.com/s/MSS_pBu-5Dbo7iL...

tokentoken验证失败
本作品采用《CC 协议》,转载必须注明作者和本文链接
花了点时间写了一个SpringSecurity集合JWT完成身份验证的Demo,并按照自己的想法完成了动态权限问题。在写这个Demo之初,使用的是SpringSecurity自带的注解权限,但是这样权限就显得不太灵活,在实现之后,感觉也挺复杂的,欢迎大家给出建议。认证流程及授权流程我画了个建议的认证授权流程图,后面会结合代码进行解释整个流程。
声明 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。为了防止数据包的重放,token机制被引入了代码中。有的token每次请求都会重新获取,而有的会持续一段时间。
Host Header欺骗有些人认为HTTP的联机就是靠包里的HOST header来连接的,所以会认为如果修改掉包里的HOST, 那么就连接不到目标服务器,所以是不可控的。所以当应用使用$_SERVER['HTTP_HOST']获取网站URL并拼接到找回密码的链接当中就会产生漏洞
为了避免下半辈子只能在几平米的空间活动,我在某鱼上淘到了一款蓝牙锁作为小蓝车的平替。nRF蓝牙抓包首先需要解决的问题是获取蓝牙锁的MAC地址,因为最后我们需要使用gatttool直接通过MAC地址与蓝牙锁交互。比较好用的是nRF这个软件,能够直接扫描查看周围的蓝牙设备。使用gatttool尝试连接并使用primary看查所有service:然后通过characteristics命令看查所有的特性:其中handle是特性的句柄,char properties是特性的属性值,char value handle是特性值的句柄,uuid是特性的标识。
2021安洵杯PWN WP详解
2021-12-29 16:41:08
做了2021安洵杯线上赛题目,总体来说题目有简单有难的,难易程度合适,这次就做了pwn,把四道pwn题思路总结一下,重点是没几个人做出来的最后一道pwnsky,赛后做了复现。
内网渗透-代理篇
2021-12-01 05:44:01
利用代理工具将内网的流量代理到本地进行访问,这样就可以对内网进行下一步渗透,同时也可以利用代理工具将其他网段的流量转发到本地进行纵向渗透。代理的本质是Socks协议(防火墙安全会话转换协议),工作在OSI参考模型的第5层(会话层)。使用TCP协议传输数据,因而不提供如传递ICMP信息之类的网络层相关服务。目前支持SOCKS4和SOCKS5两个版本:
一.前言 这是一次非常曲折的渗透测试,也让我学到了很多。 二.逻辑漏洞 收集子域名,看到一个项目管理的网站
重新抓包改包登入系统,在burp里仔细看了下用户管理api返回的json发现所有用户的密码都是统一的,都是该公司旗下某产品的英文名。猜测可能是为了防止密码被泄露,后端对返回的密码进行了过滤了,统一修改了。
Web安全常见漏洞修复建议
Andrew
暂无描述