reGeorg实战攻防
2020-12-31 21:00:00 Author: mp.weixin.qq.com(查看原文) 阅读量:87 收藏

这是 酒仙桥六号部队 的第 140 篇文章。

全文共计1620个字,预计阅读时长6分钟

前言

当我们已经通过各种操作getshell之后想要进行内网横向渗透,但因为目标ACL策略设置的比较严格,只允许HTTP协议和对应端口通过。我们无法通过使用端口转发或者是端口映射的方法来从外网访问到内网的其他机器。这时我们就会想到reGeorg这款工具,通过该工具代理进入内网,通过HTTP协议转发请求。

这个工具创建之初本意并不是专门用来渗透内网,而是某些企业员工在外网的环境下想访问内网资源。所以这几个安全意识不太足的小哥们写了一个可以通过部署在边界上的网页来进行流量转发,从而访问内网的一个办公工具......

可以看到该工具的'斯搂梗'是说"每个办公室都需要这样的工具"..

源码分析

那么如此厉害的工具究竟是怎么实现的呢?我们一起来看下源码:

从入口开始,就是标准的一套:LOGO + argparse 来进行参数的支持和解析,真正逻辑从askGeorg函数开始。这个函数是来测试远程代理服务器是否能够访问,我们来看下这个函数的具体内容:

可以看到内容基本就是判断是否为HTTPS,然后使用哪个工具。用GET方法来请求,如果状态码为 200 且内容跟远程服务器中内容一样就认为是OK的。

比较的内容就是浏览器访问看到的那一句话:

Python中:

php中:

浏览器访问:

我们来继续往下看:

监听了客户端的端口,并设置TCP的排队上限为1000,这样的对普通情况来说是足够了。

后边是创建循环不停的接收报文,并且将接收到的传入 session 线程中并启动。

session的构造比较简单:

我们来看下线程最重要run中的内容:

内容不多,就是判断Socks4还是5并解析,之后是创建读写线程并start。

判断Socks4 还是 5:

Socks代理至少三个字节的请求,第一个字节一定为5,如果是Socks4,则第一个字节一定为4。

parseSocks5和parseSocks4 为判断对应Socks的协议解析是否成功。

Reader:

Writer:

读写部分是一些转发的常规操作。

实战攻防

在实战中使用可能会碰到一些特殊问题。

比如在浏览器中访问可以出现熟悉的"Georg says,'All seems fine'",说明可以正常访问。但是使用reGeorgSocksProxy客户端的时候会报'未准备好,请检查url',这是为什么呢?

排查问题需要进行一些代码调试。

通过打印出的关键字搜索,可以看到是askGeorg这个函数返回了False 导致了退出程序。

这时我们可以进行调试,使用Debug来跟进代码,一行一行看到底哪里出错了。当不具备调试环境时也可以使用打印的方法定位问题。

这里我们使用打印的方法来定位问题。

我们再尝试运行一下代码,看看哪里出错。

可以看到返回的状态码为403,也就是说可能被WAF或者其他安全设备拦截掉了。我们通过代码可以获知只有当状态码为200的时候才可以正常使用,并且我们使用浏览器直接打开是可以正常访问的。也就是说我们的问题出现在了Python脚本跟浏览器的请求差异上,比如一些常见的请求头 User-Agent 、Accept-Language等,这些我们需要一一补上。

我们需要将每一个请求都加入浏览器所包含的请求头,所以我们将该过程提取出来作为函数使用。

修改后的代码:

setupRemoteSession中的CONNECT:

closeRemoteSession中的DISCONNECT:

reader中的READ:

Writer中的FORWORD:

修改完代码后我们实际进行测试。

可以看到返回码已经变为200并且打印出了熟悉的'All seems fine',说明可以正常使用了。Happy~

总结

掌握调试/打印等方法不论是对代码审计和修改脚本都有很大的帮助和提升。我们在实战中会碰到各种各样的问题,这时候需要自己细心耐心以及编码修改能力来解决这些问题。这样我们才可以做到在这不断提升的攻防中稳步前行。


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMzYxNzc1OA==&mid=2247490733&idx=1&sn=5510f8fd184e8b45d07170f5f8727a78&chksm=9b393a1cac4eb30a3d415f8e205846d9b0fd872793fa853fcfb711c65cbc9ebcbf9e9d419286#rd
如有侵权请联系:admin#unsafe.sh