安全矩阵

 找回密码
 立即注册
搜索
查看: 4547|回复: 0

一次文件上传对Token的绕过

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-11-9 09:05:43 | 显示全部楼层 |阅读模式
原文链接:一次文件上传对Token的绕过

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

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

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命令的功能了:


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


然后复制即可:
[code]curl -i -s -k -X OK,命令有了,后面就是愉快的py了。这里以导入字典fuzzing为例,代码如下:
[code]#encoding:UTF-8

import os

with open("/Users/rebootorz/Documents/代码/pyStudyWorkSpace/Test/ext.txt",'r',encoding='utf-8') as f:
    lines = f.readlines()

for line in lines:
    fileType = str(line).strip('\n')

    getToken_cmd = "curl -i -s -k -X
最终效果如下:


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













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


然后复制即可:
[
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 13:57 , Processed in 0.013909 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表