*原创作者:Tonybreak
如何从免费代理IP中发现漏洞,这里我定义为发现的漏洞,是因为我个人觉得这个漏洞的技术性比较差,更多的可能是发现、分析与总结。作为一名信息安全的新手,无奈能力不足只能通过这种取巧的方式去发现漏洞了。
发现过程
在一次看帖自我学习的过程中,我看到了某浪HTTP代理配置不当可造成内网漫游和某浪HTTP代理设置不当可访问内网资源,某陌因为HTTP代理配置不当可以绕过IP过滤去探测敏感资源。
第一个疑问是,他们是如何发现这样的漏洞的?
第二个疑问是,如何去检测IP是否开启了http代理呢?
对疑问的解决:
通过对上述漏洞的学习,发现HTTP代理其实是一个好东西。因为服务器本身配置不当,让某端口提供了HTTP代理功能,从而绕过了IP的限制。利用服务器的代理功能,为自己“伪造”了一个白名单的IP,自己将可以访问敏感信息等操作了。如果这个服务器IP还处于企业的内网网段中,相当于提供了一个内网IP的跳转,那么就可以对内网进入更深一层的渗透测试了。
尝试对某HTTP代理的IP进行nmap扫描,在结果中存在http-proxy,状态为open,则说明此端口可以作为HTTP代理使用。
如下图所示:
8080/tcp open http-proxy
设置这个IP和端口作为自己浏览器的HTTP代理,并使用。使用第三方在线工具检测本机IP,看是否成功代理。
检测结果如下:
这里发现已经成功代理成功了,为了更进一步确认是否成功代理,可以尝试打开http的网站,发现也可以正常访问,访问https的网站失败。
通过实践,对于上面的两个疑问,其实就是一个问题。个人揣测,这些漏洞的发现过程可能是这样的:
在对目标服务器端口扫描时,发现了http-proxy的端口,然后尝试代理,发现代理成功。利用这个HTTP代理,可以绕过IP限制访问敏感信息,或者内网漫游等等。
全网扫描代理IP不太现实,网上有很多http代理检测的工具,也有很多分享http代理的网站。那我直接对这些免费IP代理的网站进行搜集整理分析,看看能否发现什么。
我选择了一个免费IP代理网站
http://www.xicidaili.com/
发现漏洞
这个免费代理IP的网站,主要分为国内高匿代理、国内普通代理、国外高匿代理、国外普通代理和socks代理。这里我主要选择了国内的进行分析。
找共同点
选择国内高匿代理,地址如下
http://www.xicidaili.com/nn/
人眼识别出相同的端口,我第一次选择的端口是8888,手工尝试了直接访问这个IP发现无法访问,访问IP+端口,发现跳转至某智能路由器。下面就是编写了个python脚本,把相同的8888端口的IP和端口提取出来
代码如下(渣渣代码,可自行优化。需要自定义端口)
# coding=utf-8
# author TonyBreak
import urllib2
import re
import time
# 定义抓取的页面为5
n = 5
# 定义headers,伪造浏览器特征,防止某些网站禁止该脚本正常访问页面
headers = {
'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11'
}
# 定义url,后面必须添加正整数(国内高匿)
# url = 'http://www.xicidaili.com/nn/'
# 定义url,后面必须添加正整数(国内普通)
url = 'http://www.xicidaili.com/nt/'
# 读取网页内容
def geturl_content(xx_url):
req = urllib2.Request(url=xx_url, headers=headers) # 链接url
socket0 = urllib2.urlopen(req)
content = socket0.read()
socket0.close()
return content
# 结果输出文件保存
def file_output(c):
# 获取当天日期
t_time = time.strftime("%Y-%m-%d", time.localtime())
result_output = "result-" + t_time + ".txt"
f = open(result_output, 'a')
f.write(c)
f.close()
# 正则处理,获取IP和端口,存入数组 m 中
def get_ips(bb_url):
# reg = r'<td>([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})</td>\s*<td>(\d*)</td>'
# 国内普通 端口9999
reg = r'<td>([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})</td>\s*<td>(9999)</td>'
ips_data = geturl_content(bb_url)
p = re.compile(reg)
m = re.findall(p, ips_data)
return m
# 主函数,处理多个页面的数据读取
def main():
for i in range(n): # 多页面抓取
urls = url + str(i + 1)
m = get_ips(urls)
for k, v in m:
result = k + ':' + v + '\n'
file_output(result)
if __name__ == '__main__':
main()
最后的输出为txt文档,类似这样
把这些IP和端口直接贴到某浏览器的代理设置中,发现大部分可以成功代理(因为代理的时效性,部分代理在验证时已经失效)。直接访问IP和端口,发现大部分可以跳转到某智能路由器后台。整理好这些智能路由器的IP后,我了提交的一个漏洞,漏洞类型为设计缺陷,然后通知了厂商。开发人员表示自己也不知道为什么开启了HTTP代理。(这一点,说明这个HTTP代理可能是一个普遍现象)
简单概括就是:找相同的端口,整理IP,确定漏洞的通用性。
深入
在上一个漏洞的基础上,我尝试了深入。发现了另外一款个人智能路由器也存在这个问题,由于获取的样本IP太少,我没有去提交。个人的智能路由器,由于用户的网络差异性大等,所以访问速度慢,代理效果差。我再次更换了一个端口提取IP,通过整理分析,发现是一款商业路由器,主要适用于店铺、商家等使用,用户量看官方说明还不少。商业路由器的访问速度比个人路由器好了许多。
这里发现有一个疑似越权访问的问题,但是不能操作,在提交漏洞的时候,我还是选择了设计不当,可以做HTTP代理。我没有继续对这个路由器深入,因为虽然网络比个人路由器好许多,但是访问速度并不是太理想。有兴趣的朋友可以继续试试。
再次深入
再次深入,依然是选择了一个端口,对IP进行了整理。直接访问搜集的IP+端口,发现跳转至一个web页面。页面的主要内容为下载APP进行WiFi链接,有点儿类似花生地铁WiFi。整理后,基本可以确定这些IP为这一厂商的网关。
继续用nmap扫描几个样本IP后,发现有其他的相同端口,访问其中的一个端口8080(假设为8080),发现跳转至网关管理界面。进过搜索查询,发现这个是企业级别的路由网关。继续搜索,发现此网关有通用漏洞,可绕过前台登录页面直接进入管理页面。
在ping服务处存在命令执行,大概是这样:
然后我就提交了这个漏洞,厂商也十分重视,第二天就全面修复了这个漏洞(升级了路由器的系统)。
失败的深入
近期,我尝试继续分析,选择了9999的端口。通过整理,nmap扫描,最后发现扫描结果大致类似这样。从200个9999的IP中,筛选出了54个IP符合下面规则的:
80/tcp filtered http
2000/tcp open cisco-sccp
8080/tcp filtered http-proxy
9999/tcp open abyss
某个IP的端口扫描后,结果如下:
21/tcp open ftp
80/tcp filtered http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
443/tcp open https
445/tcp filtered microsoft-ds
1723/tcp open pptp
2000/tcp open cisco-sccp
8080/tcp filtered http-proxy
9999/tcp open abyss
通过端口9999设置HTTP代理,可绕过IP限制,访问80的web服务会跳转至路由管理界面。这里也只能面向算是一个设计不当了。
继续分析,发现此网关的登录为GET型,如下
http://111.111.111.111/cfg?process=login&backpage=%2Fcfg&page=start&user=admin&password=admin&submit=+Log+in+
在自身HTTP代理的情况下,即可尝试绕过登录或者爆破。第二天准备继续尝试的时候,发现昨天测试的IP已经停掉了所有服务。
由于没有成功的案例,所以我也没有继续提交了。大家可以继续深入试试。
总结
没有什么技术性,主要是筛选相同的端口的IP,nmap扫描,找出共同点,对端口继续分析深入,去发现更大的漏洞。
快看看自家的路由器,有没有被不小心设置成HTTP代理了。
本文原创作者:tonybreak,本文属FreeBuf原创奖励计划,未经许可禁止转载
-
-_-||| 为啥你扫的是8888,出来的全是9999?
-
最后的输出为txt文档,类似这样
类似哪样? -
@ tonybreak 之前分析代理IP数据的时候,发现过这种情况,一些网关设备莫名其妙开了一个代理服务出来。而且常年运行,被一些代理扫描器发现,就公布在一些免费代理的网站上,提供给别人用。这些IP很尴尬,真正处在这些IP后面的人,都是正常用户,但是使用者IP做代理的人,都是比较可以的。而且很难做进一步的区分。
-
这篇文章 奖励多少钱啊 我们也可以写吗
-
我叫扛把子给我一个Ip呗
不容错过
- 让GoAgent通过IPV6科学上网Tiank2015-08-17
- 从ATM抢钱没那么容易:揭秘ATM攻击那点事欧阳洋葱2016-06-20
- 一张图片黑掉你:在图片中嵌入恶意程序phper2015-06-04
- 一路向南|FreeTalk深圳站报名啦!FB客服2016-08-10
0daybank
已有 41 条评论
-_-||| 为啥你扫的是8888,出来的全是9999?
@ 戒贤 因为这样的漏洞,我一开始是从8888这样的端口开始的,后面又对9999的端口做过扫描。而且脚本里面可以看到我的确是对9999的端口扫描,所以最后出来的是9999。
脚本可以修改这个端口的。
@ tonybreak 你有大概做过统计么?有木有一个可能出现这种问题的比例?
@ 戒贤 这个还真没有认真统计过,不过我对某段时间常见的端口进行分析,发现大部分都是网关路由设备,个人智能路由4个,商业路由1个,企业网关1个。
个人的智能路由器,因为家庭宽带一般比较差,而且网络和地域的差异会影响访问速度,代理后的网络较差,访问后台的响应时间比较长,所以继续深入比较麻烦。
商业路由器和企业级的网关,网络比较好,代理速度也不错,适合进一步深入。
路由器设备的需要结合本身的rom去分析,可能会挖掘更多的问题,这点我不擅长。总体网关出问题的比例,我想可能还是比较小的。
对于网关而言HTTP代理是一个配置项,就看我们如何去利用了。
@ 戒贤 戒贤要开始当老司机了
@ ArthurKiller 这篇文的东西,戳到我的痛处了,我想了解多一些
@ 戒贤 有机会可以多多交流~
@ tonybreak 之前分析代理IP数据的时候,发现过这种情况,一些网关设备莫名其妙开了一个代理服务出来。而且常年运行,被一些代理扫描器发现,就公布在一些免费代理的网站上,提供给别人用。这些IP很尴尬,真正处在这些IP后面的人,都是正常用户,但是使用者IP做代理的人,都是比较可以的。而且很难做进一步的区分。
同问
@ anonymous 因为是对多个端口的扫描去分析,最后一次的端口是9999,看看代码可以发现这个端口是可以自定义的。对内容不影响
给我一个Ip呗
@ 我叫扛把子 什么IP? 文中给了一个免费的代理网站,亲可以继续挖掘试试,总会有惊喜的
最后的输出为txt文档,类似这样
类似哪样?
@ Jumbo 第一次发稿,难免很多错误。欢迎指正。
这里结果类似这样,指的是下面的配图。这里我纠正下,输出结果是
IP+端口,例如
10.10.10.10:8888
111.111.12.12:8888
输出这样,主要是为了方便直接复制粘贴到360浏览器代理服务器中
这篇文章 奖励多少钱啊 我们也可以写吗
@ m09046105 不知道多少奖励,我也是第一次发稿子。
一般的公司都不采用HTTP代理了,就算有也是要验证。一般都是PPTP最主流吧。这个洞有点难挖,得靠人品了。。。。
@ ArthurKiller 我之前的标题是《发现的漏洞之HTTP免费代理》,主要讲从免费代理IP的网站去分析发现一些漏洞。还没涉及到内网扫描这一片,太惭愧了。
我这里的HTTP代理主要是路由网关设备的HTTP代理,一般公司的web服务很少用HTTP代理,也有白名单等验证手段。
太惭愧了··
发现这个漏洞标题被审核改过,我之前的标题主要是分享自己的一个挖洞心得,没有这么高大上。···
@ tonybreak
就是我改的,没什么高大上的,就是技术讨论罢了~改一下标题,主要是担心读者看不懂。
@ ArthurKiller 我去~谢谢审核了。下次我会写的通俗明白~合情合理···
好创意
@ Jayker 谢谢支持~
大哥 代码有问题啊

定义的get_ips函数头呢。。。。
@ monster93 都不验证一下代码么。。。。
@ monster93 我的坑··这个我把代码贴到freebuf的时候,注释的内容把后面的代码都一起注释了,定义的函数头被注释了,我修改下。谢谢指正
@ monster93 @ monster93 我的坑··这个我把代码贴到freebuf的时候,注释的内容把后面的代码都一起注释了,定义的函数头被注释了,谋私不能修改了。谢谢指正
# 正则处理,获取IP和端口,存入数组 m 中def get_ips(bb_url):
修改成
# 正则处理,获取IP和端口,存入数组 m 中
def get_ips(bb_url):
NameError: global name ‘get_ips’ is not defined
我的坑··这个我把代码贴到freebuf的时候,注释的内容把后面的代码都一起注释了,定义的函数头被注释了,
# 正则处理,获取IP和端口,存入数组 m 中def get_ips(bb_url):
修改成
# 正则处理,获取IP和端口,存入数组 m 中
def get_ips(bb_url):
@ tonybreak 已经修改
@ ArthurKiller 要顶格,前面不能有空格。
@ bimeover freebuf官方人员?帮我改改文中错误可好?~
很详细呢 思路也很清晰 很喜欢 收藏了~感谢作者
@ □a雨の印记 谢谢支持
没怎么看明白,你的大致意思是说:“入侵A站,然后使用nmap进行端口扫描。然后发现有类似8888、9999这样的端口时,使用IE代理,从而绕过WAF、路由器、后台登陆的限制。还是直接在浏览器的地址栏里输入http://A站的IP:8888 or 9999”
@ Black-Hole 黑洞表哥。。。同没懂意思。。。收集的这些ip,只能用来对对应网段做测试是吧;。。
@ Black-Hole 嗯,思路一开始就不是为了入侵A站的。是参考别人通过这种HTTP代理入侵A站,绕过了WAF、进入内网或者绕过白名单等这样的案例,然后我才考虑到什么IP会有HTTP代理?如何去发现这样的代理IP和端口?
然后想到了西刺代理这个免费代理的网站,它提供了大量的已有的代理IP可以直接去分析。我思考着相同的端口可能有什么公共点,然后对同端口的IP进行了整理,nmap扫描这些IP,后来发现了不少代理IP是路由器设置不当,导致这些路由器都可以作为HTTP代理的。后面也按着第一次成功的思路,一直去找路由器去了。
有些IP+代理端口可以直接访问,有些IP+代理端口是无法访问的。(在浏览器中访问http://A站的IP:8888 or 9999)
访问这些IP+代理端口主要是看看web返回内容是什么,算是找共同点和发现是路由器以及路由器管理后台的一个步骤,有些端口是可以跳转到路由器管理页面的,有些是不行的。结合nmap扫描其他端口,找到了路由器管理后台。
简单而言就是最后的总结那句话“主要是筛选相同的端口的IP,nmap扫描,找出共同点,对端口继续分析深入,去发现更大的漏洞。”
可能描述不太清晰,主要是筛选相同端口的IP,nmap扫描,找出共同点,这个共同点主要是通过相同端口的IP去看这个设备是什么,因为之前发现的主要是路由器设备,比如乐x视路由器,小x云智能WIFI,迈x外x迪wifi等。因为有款企业路由器存在伪造cookie登录,里面存在ping服务从而导致任意命令执行,那么这个就算危害比较大的了。
这里提出一个假设,假设某商业路由器的登录页面可以绕过,那么就存在对该路由器任意操作了。包括WIFI密码重置,客户信息泄露等等。
我这里主要是给大家介绍一种通过代理IP去发现寻找漏洞的一种过程,对于路由器漏洞的挖掘是其次。之前的标题不是“使用免费http代理IP进行内网扫描”,之前我的标题主要是讲 通过HTTP代理IP去发现漏洞的一个过程,标题被改后可能和主体表达不一致了。
有什么问题可以继续交流~看过不少 您的文章~学习不少~
@ tonybreak 明白了,可以写个脚本:你的方法+nmap+钟馗之眼的结果,可以完成自动化搜集的。也谢谢你的支持啦
非常有意思的思路。
西刺的代理,我用了好久了,是免费代理里面,有效比较多,网站最好抓取的一个。
只是有的时候,代理的速度在10s以上,用起来就比较捉急了。
但是一般平时刷个推广啥的,还是比较方便的
@ liuchaoth 谢谢支持。企业级别的路由器当做代理,速度还是比较快的。个人宽带和企业的光纤差别还是蛮大的~
“开发人员表示自己也不知道为什么开启了HTTP代理” 根据最近ddos由Iot发出推测,这些路由器很有可能存在其他漏洞,被人利用装了代理用来ddos