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

名为[WIFI共享精灵]或[WIFI宝]的程序恶意去UAC保护机制

这两天突然发现系统的UAC保护机制被去除了,所有程序默认以管理员身份运行。比如打开cmd,直接就是system权限,没有安全桌面提示。

cmd-privilege

打开控制面板中的用户账户控制,看到变成了”从不通知”:

UAC-notify

我怀疑系统中毒,开始排查。因为木马一般会以服务的形式启动,所以直接查看有没有可疑的系统服务。

win + r,输入services.msc,查看已启用的服务。 发现了一个比较可疑的服务,名为ConnectifyDHCPSER 继续阅读名为[WIFI共享精灵]或[WIFI宝]的程序恶意去UAC保护机制

通过邮件发送图片获取某人IP地址的简单方法

有一个十分常见的渗透测试场景:  那就是我们需要获取某人的IP地址。 比如系统管理员所在的白名单IP。

比较繁琐的实现方法,可以通过入侵对方常访问的网站,然后下载web server日志和数据库log表分析。
这里介绍一种非常简单的方法:通过Email发送图片获取对方IP。具体的做法是:

在Email正文中嵌入特定的网络图片(该图片放在自己的http服务器上)发送给特定用户,对方浏览该图片后,

apache记录日志,我们通过查看日志,就可以获取对方的IP地址,甚至包括Referer、User-Agent标识。

作为示例,我注册了一个新的sina邮箱:[email protected],发件人姓名填写为张蓉。
在网上随便搜了个[email protected]百度员工的邮箱,关键词 intext:”@baidu.com”
这里之所以用女性的名字,是为了降低对方的防范心理。
随后,在网上找了一张漂亮女生的合照,给对方发Email。这封测试邮件,我同时也发给了阿里巴巴的一个哥们儿。邮件内容是:

标题: 上次聚餐可慧的照片

正文: 这是上次聚餐时给可慧和阿姨拍的照片,今天才传给你。
原图我也没有了。 一切顺利哈  🙂
{{插入图片 http://23.228.xxx.xxx/c4ca4238a0b923820dcc509a6f75849b.jpg?cache=4}}

23.228.xxx.xxx是我自己的服务器IP。

图片命名我直接用md5(1),是为了让对方产生第一感,仿佛这是社交网站自动生成的文件名。当然,对方直接看到的是一张图,而不是地址。
参数cache=4,则完全是为了区分不同的收件人,也可以很方便地在日志搜索记录。当然,还可以改成其他参数伪装成时间戳。
邮件发出去大约二十分钟,百度和阿里巴巴的哥们儿就都中招了。

apache-log

cache=c,IP为222.129.43.x的是百度的这位哥们儿,而后一个IP 42.120.74.x则来自阿里巴巴。
可以看到百度的同学使用了iPhone手机客户端,对应的IP地址,可能会是百度VPN的出口IP。
而阿里的同学则是64位系统, Chrome浏览器。

这里主要利用了邮件客户端会自动请求Email正文中嵌入的网络图片,而不会提示用户。

Django中实现一个简单的数据防爬取系统

www.fachun.net是我做的一个音乐资源站,因为资源丰富,容易成为他人抓取的目标。

被抓取资源事小,另一方面,爬虫的频繁访问还会严重占用服务器资源。

前期写代码的时候,我已经考虑到防爬问题,做了一些简单的事,比如避免使用数字ID,而是ID + 名字。

例如一个歌手的名字是ABC,ID是36,最终的URL就是:

http://www.fachun.net/musician/36-ABC/

这是爬虫难以直接猜解的。

今天我再写一些额外的代码来限制单个IP请求的频率,实现防爬。有几个要点:

1. 使用MySQL Memory数据库引擎来存储用户IP地址

因为多了个过滤层,响应时间必然增加。应该尽量减小这个影响,把IP放在内存中可以节省查找时间。

原来的应用是InnoDB引擎,所以,需要新建数据库,并在settings.DATABASES中添加它。

2. 目前我的过滤条件是10分钟内请求超过100次(已改为60次),封IP十分钟

3. 搜索引擎百度、Google等的爬虫应该不受过滤,因此,需要特别处理搜索引擎的爬虫。

设IP白名单会再次影响效率,我不希望设用白名单来筛选。

只是检查REMOTE_HOST是否包含googlebot.com、crawl.baidu.com等字符串

1. 修改配置文件,增加数据库

首先新建一个app,我这里命名为robotkiller,执行:

manage.py startapp robotkiller

然后在工程settings.py文件中添加一个数据库,我仍然用同名的robotkiller,并在INSTALLED_APPS中添加robotkiller。

DATABASES = {
    'default': {...},
    'robotkiller': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'robotkiller',                      
        'USER': 'your_user',
        'PASSWORD': 'your_pass',
        'HOST': '127.0.0.1',                    
        'PORT': '3306',
        'OPTIONS': {
            "init_command": "SET storage_engine=MEMORY",
        }
    }
}

models.py中的内容是这样的:

from django.db import models

class RobotKiller(models.Model):
    id = models.IntegerField(primary_key=True)
    ip = models.CharField(max_length=16)    #IP地址
    visits = models.IntegerField()          #请求次数
    time = models.DateTimeField()           #第一次发起请求的时间
    class Meta:
        db_table = 'robotkiller'

记得为ip字段建一个索引(让MySQL为内存数据库再维护个索引,是对是错,暂不深究):

我在settings.py中设置了时区为’Asia/chongqing’,所以,取得时间差,不应该直接用datetime,

而是用django.utils.timezone。下面是我的视图函数:

from models import RobotKiller
from django.utils import timezone

max_visits = 100
min_seconds = 600

def filterIP(request):
    domain = request.META.get('REMOTE_HOST')
    white_list = ['googlebot.com', 'crawl.baidu.com', 'sogou.com', 'bing.com', 'yahoo.com']
    for bot_domain in white_list:
        if domain.find(bot_domain) > 0:
            return bot_domain

    user_ip = request.META['REMOTE_ADDR']

    try:
        record = RobotKiller.objects.using('robotkiller').get(ip=user_ip)
    except RobotKiller.DoesNotExist:
        RobotKiller.objects.using('robotkiller').create(ip=user_ip, visits=1, time=timezone.now())
        return

    passed_seconds = (timezone.now() - record.time).seconds

    if record.visits > max_visits and passed_seconds < min_seconds:
        raise Exception('user ip banned.')
    else:
        if passed_seconds < min_seconds:
            record.visits = record.visits + 1
            record.save()
        else:
            record.visits = 1
            record.time = timezone.now()
            record.save()

上述代码就是基本的过滤逻辑。在urls.py中添加:

from robotkiller import filterIP

然后在需要防爬取的对应app的views.py中添加该函数:

def checkIP(request):
    try:
        filterIP(request)
    except Exception, e:
        if unicode(e) == 'user ip banned.':
            raise PermissionDenied()

接着,在所有视图函数的第一行添加checkIP(request) 就可以过滤所有页面的请求了。

当用户在10分钟内请求了超过100个页面,会得到一个403错误。

可以在模板文件夹下新建一个403.html,自定义出错提示了。

一个简单的HTTP暴力破解python脚本

在以往的渗透测试过程中,我常使用暴力破解来作为突破口。

破解过包括ADSL、客户端软件账号、web后台、NT Server、SSH、FTP、MySQL、Email等,

主要通过两种方式:

1. 基于协议暴力破解

2. 模拟点击、模拟按键等进行客户端暴力破解

当然,其中还涉及到ADSL重新拨号换IP、验证码识别的细节。

前述到此。

下面是我写的一个非常简短的Python脚本,用于http暴力破解。

继续阅读一个简单的HTTP暴力破解python脚本