使用免费http代理IP进行内网扫描
作者:admin | 时间:2016-7-26 20:51:31 | 分类:黑客技术 隐藏侧边栏展开侧边栏
*原创作者: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代理了。