Cookie篡改与命令注入
作者:CQITer小编 时间:2018-10-19 16:24
在渗透测试过程中,我们经常会遇到cookie得不到正确的利用,但是在一些框架中(比如PLAY、RACK),我们能利用cookie达到欺骗或篡改的目的,达到跨权登陆,拿取Webshell控制网站权限的作用。
cookie 篡改 (cookie poisoning) 是一项主要以获取模拟和隐私权泄密著称的技术,通过维护客户(或终端用户)身份的会话信息操纵来实现的。通过打造这些 cookie ,攻击者可以模拟一个有效的客户,因此获取详细信息并执行代表病毒的行为。这种打造的能力,像会话 cookie (或者更通俗地说,会话标识)源自于这些标识不是以安全的方式产生的事实。
在pentester环境中存在Cookie篡改与命令注入的WEB程序,我们下载下来搭建,下载地址:
https://pentesterlab.com/exercises/rack_cookies_and_commands_injection


一个普通的登录界面,可以将攻击分为四个部分:
1.指纹识别:收集有关Web应用程序和正在使用的技术的信息。
2.暴力强制验证页面。
3.篡改机架cookie以获得管理员权限。
4.从管理页面,通过注入获取命令,以运行底层操作系统上的任何命令。
一、指纹识别抓个包burpsuit,查看信息,我们可以看到应用程序使用Apache 2.2.16和Phusion Passenger 3.0.12在Debian服务器上运行。Phusion可能是托管基于Ruby / Rack的应用程序的最常用方法。我们还可以看到应用程序将我们重定向到具有HTTP 302和Location标头。
扫扫端口:netcat telnet等等。
二、暴力破解该题为一正常渗透题,登陆界面考虑SQL注入和爆破等,sql注入万能密码等报错没法实现,采用爆破。爆破方法:1、burpsuit 2、patator暴力破解,这里采用patator暴力破解,(Patator()是一个多协议暴力破解工具,它可用于查找Web应用程序和许多其他服务的默认凭据)。
扫描语句:patator http_fuzz url=http://目的地址/login method=POST body=’login=FILE0&password=FILE0′ 0=~/123.txt accept_cookie=1 follow=1 -x ignore:fgrep=’DNS Manager Login’ -l /tmp/patator
http_fuzz用于告诉Patator使用该模块http_fuzz;
url= 用于设置URL;
ethod=POST 告诉Patator使用HTTP POST;
body 是基于我们之前收集的信息的请求的主体。
我们还希望使用accept_cookie=1和follow=1接受应用程序发回的cookie并遵循重定向,因为应用程序在尝试失败后重定向我们,它可能会成功尝试。
-x ignore:fgrep=’DNS Manager Login’ 用于告诉Patator忽略包含“DNS Manager Login”的响应,一旦我们登录,很可能我们不会在网站的经过身份验证的部分看到这一点。


找到爆破出的账号密码,登陆成功!
三、篡改cookie提权登录并检查HTTP流量时,您可以看到服务器发回一个名为的cookie rack.session。我们将看到如何解码和修改此cookie以提升我们的权限。默认的Cookie有两种形式。
1.字符串:Set-Cookie:rack.session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiJFNWE4OWJhZmNhNDc2MGY1MTA0MTJm%0AZTM0MDJlZjE3MzAxN2ZjMzBjYWRmMWNiYTgwNGYxNzE3NTI1NTgxNjZmYw%3D%3D%0A; path=/; HttpOnly
2.字符串和签名分隔符号–:Set-Cookie: rack.session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiJFYmJiMTRiODI3YjdlODg2OWMwNWY3%0ANjdmMGNlZjg2YjVkN2VjMDQxN2ZlYTU0YWM3ZTI5OTUwNTY3MjgzMWI3Yg%3D%3D%0A–61215fa13942903faa4652f73e613aa0ced6db2d; path=/; HttpOnly
rack.session是Ruby里面的中间件实现的一个方法,可以访问应用程序的源代码,则可以通过搜索“使用Rack :: Session :: Cookie”快速检查用于签署cookie的值。如果使用签名的cookie,该行应该看起来像`使用Rack::Session::Cookie, :secret => “s3cr3t”。看到可以访问应用程序通过一系列操作过后的源码,那么我们可以对获取到的 cookie进行解码。Cookie编码分为三个部分:
1.使用ruby函数Marshal.dump序列化该对象;
2.结果使用base64编码;
3.然后对结果进行URL编码以防止HTTP出现任何问题。
为了解码cookie,我们需要反转这三个操作:
1.提取cookie值:删除cookie的名称和选项以及签名;
2.使用URL编码和base64解码此值;
3.使用ruby函数Marshal.load加载对象。




