欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

使用Python CGIHTTPServer绕过注入时的CSRF Token防御

来源: 作者: 时间:2019-02-24 21:00 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

CSRF tokens是服务器生成的一串随机值,其主要作用是防止表单重复提交以及请求伪造攻击。由于该生成值具有随机性,一次性,并且是基于服务器端的前一个请求生成的,因此黑客几乎不可能伪造它。
Burp Suite
虽说无法伪造,但并不代表我们就不能绕过它。这里,不得不提及一款web渗透神器Burp Suite。在Burp上有多种配置其使用宏来绕过HTML表单上CSRF tokens的方法,例如我们可以使用Burp Active Scans,Burp Intruder,Burp Repeater,甚至Burp Proxy。还有专门用于Intruder模块的Grep-Extract和pitchfork攻击类型。如果你还觉得不够,Burp完美的扩展性支持你开发自己的Burp插件。
除了Burp外,另一款神器Sqlmap也为我们提供了类似的功能。Sqlmap中有一个–csrf-token和–csrf-url参数,可用于绕过CSRF tokens。或者你也可以像我刚说的那样,配置Burp使用–proxy通过Burp运行sqlmap。
但今天我要介绍另一种绕过方法,即使用Python CGIHTTPServer。
实验环境
我的测试环境是一个简单的PHP+mysql,我可以登录并访问受限区域。我在这里上传了PHP代码,你可以下载进行测试。代码可能写的并不完美,但用于测试目的应该问题不大。
CSRF tokens是随机生成的数字的SHA256哈希值,并且每个HTTP请求的哈希值都不同。

因此,如果不对Burp进行针对性的配置,它将无法检测到该问题的存在。

sqlmap也同样。

我使用–technique,–dbms和-p选项来加速扫描。由于这只是一个简单的基于布尔的SQLi,因此–level 1(默认值)就足够了。但是,如果凭据不正确的话,则必须将–risk设置为3才行。因为只有风险等级为3的情况下,基于布尔的SQLi才能被检测到。基于布尔的SQLi是非常危险的,因为它们可以使任何条件为真。例如当UPDATE或DELETE语句的WHERE子句存在这种注入,攻击者就可以实现更改数据库中用户密码,转储凭据等。
这里,我使用sqlmap的SQLi –csrf-token =“mytoken”选项,检测到了一个基于OR的SQLi:

这是一个登录验证表单,显然这里是一个SELECT语句,这意味着风险等级3没有危害。
当然,如果你有有效凭据,它还容易受到基于AND的SQLi攻击。但即使我拥有有效凭据,我也会先用另一个(有效)用户名来进行测试,先找到基于OR的SQLi。这样做可以避免账户被以外的锁定。
此外,使用sqlmap的SQLi –csrf-token =“mytoken”选项,我还检测到了一个基于AND的SQLi:

CGIHTTPServer
首先,我们来创建CGI脚本:

这个脚本需要创建在folder_whatever/cgi-bin/目录中。我们将其称为mask.py,并确保其是可执行的。创建完成后,我们从“folder_whatever”目录中运行“python -m CGIHTTPServer”。默认情况下,它将侦听8000/tcp端口。

你可以使用正确的密码对其进行测试:

以及使用一个错误密码:

现在,我们无需对Burp和sqlmap进行特定配置,就能轻松的检测到安全漏洞。

CSRF tokens是服务器生成的一串随机值,其主要作用是防止表单重复提交以及请求伪造攻击。由于该生成值具有随机性,一次性,并且是基于服务器端的前一个请求生成的,因此黑客几乎不可能伪造它。
Burp Suite
虽说无法伪造,但并不代表我们就不能绕过它。这里,不得不提及一款web渗透神器Burp Suite。在Burp上有多种配置其使用宏来绕过HTML表单上CSRF tokens的方法,例如我们可以使用Burp Active Scans,Burp Intruder,Burp Repeater,甚至Burp Proxy。还有专门用于Intruder模块的Grep-Extract和pitchfork攻击类型。如果你还觉得不够,Burp完美的扩展性支持你开发自己的Burp插件。
除了Burp外,另一款神器Sqlmap也为我们提供了类似的功能。Sqlmap中有一个–csrf-token和–csrf-url参数,可用于绕过CSRF tokens。或者你也可以像我刚说的那样,配置Burp使用–proxy通过Burp运行sqlmap。
但今天我要介绍另一种绕过方法,即使用Python CGIHTTPServer。
实验环境
我的测试环境是一个简单的PHP+mysql,我可以登录并访问受限区域。我在这里上传了PHP代码,你可以下载进行测试。代码可能写的并不完美,但用于测试目的应该问题不大。

www.wnhack.com


CSRF tokens是随机生成的数字的SHA256哈希值,并且每个HTTP请求的哈希值都不同。

因此,如果不对Burp进行针对性的配置,它将无法检测到该问题的存在。

sqlmap也同样。

我使用–technique,–dbms和-p选项来加速扫描。由于这只是一个简单的基于布尔的SQLi,因此–level 1(默认值)就足够了。但是,如果凭据不正确的话,则必须将–risk设置为3才行。因为只有风险等级为3的情况下,基于布尔的SQLi才能被检测到。基于布尔的SQLi是非常危险的,因为它们可以使任何条件为真。例如当UPDATE或DELETE语句的WHERE子句存在这种注入,攻击者就可以实现更改数据库中用户密码,转储凭据等。 www.wnhack.com
这里,我使用sqlmap的SQLi –csrf-token =“mytoken”选项,检测到了一个基于OR的SQLi:

这是一个登录验证表单,显然这里是一个SELECT语句,这意味着风险等级3没有危害。
当然,如果你有有效凭据,它还容易受到基于AND的SQLi攻击。但即使我拥有有效凭据,我也会先用另一个(有效)用户名来进行测试,先找到基于OR的SQLi。这样做可以避免账户被以外的锁定。
此外,使用sqlmap的SQLi –csrf-token =“mytoken”选项,我还检测到了一个基于AND的SQLi:

CGIHTTPServer
首先,我们来创建CGI脚本:
本文来自无奈人生安全网

这个脚本需要创建在folder_whatever/cgi-bin/目录中。我们将其称为mask.py,并确保其是可执行的。创建完成后,我们从“folder_whatever”目录中运行“python -m CGIHTTPServer”。默认情况下,它将侦听8000/tcp端口。

你可以使用正确的密码对其进行测试:

以及使用一个错误密码:

现在,我们无需对Burp和sqlmap进行特定配置,就能轻松的检测到安全漏洞。

内容来自无奈安全网


copyright 无奈人生

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。