linux系统帐号密码破解

avatar
作者
筋斗云
阅读量:12

linux系统帐号密码破解

Linux操作系统由于其开源性、低成本等特点,在商业上运用越来越多,很多公司都采用LAMP(Linux+Apache+Mysql+PHP)典型架构。相对于Windows操作系统的密码获取技术而言,Linux密码获取比较困难。在Windows中可以通过彩虹表、键盘记录、mimikatz_trunk域名注入获取密码等技术获取包括Windows 2008 Server在内的所有操作系统密码,不管操作系统本身设置多么复杂变态的密码,但在Linux操作系统中,设置一个非常复杂的密码,破解成功的几率相对较低。在获得网站Webshell权限的前提下,通过提权等方法获得了系统权限,通过查看“/etc/shadow”文件内容获取了Linux操作系统的用户名和加密密码,获取密码文件后,如何进行破解是一大难题,本文就Linux下的密码原理,加密算法等进行分析,并对如何破解linux的密码进行研究。

1.1.1Linux密码原理

1.Linux密码构成

在一般Linux系统中涉及系统登录密码的两个重要文件/etc/passwd和etc/shadow,有些特殊系统会是其它文件例如security;第一个文件记录用户信息,第二个是真正保存用户密码信息的。

1. passed文件构成

在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,比如下面是Linux操作系统中的/etc/passwd 的两行;其格式为username:x:UID:GID:username full:username home:shell type

第一字段:用户名(也被称为登录名);

第二字段:口令,显示为x表示其实密码已被映射到/etc/shadow 文件中;

第三字段:UID 是用户的ID 值,在系统中具有唯一特性,也即每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID ,默认root的UID是0,拥有系统最高权限。系统用户的UID的值从0开始,是一个正整数,最大值可以在/etc/login.defs 可以查到,一般Linux发行版约定为60000; UID 的唯一性关系到系统的安全,如果在“/etc/passwd”文件中把test的UID 改为0后,test用户会被确认为root用户,test这个帐号可以进行所有root的操作。

UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,把几个用户共用一个UID 是危险的。一般情况下,每个Linux的发行版都会预留一定的UID和GID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftp、nobody、adm、rpm、bin、shutdown等;在Fedora 系统会把前499 个UID和GID 预留出来,添加新用户时的UID是从500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999个UID和GID预留出来;以各个系统中/etc/login.defs中的 UID_MIN 的最小值为准; Fedora 系统 login.defs的UID_MIN是500,而UID_MAX 值为60000,也就是说我们通过adduser默认添加的用户的UID的值是500到60000之间;而Slackware 通过adduser不指定UID来添加用户,默认UID 是从1000开始;

提及UID,在linux中还有一个SUID,它是Set UID的简称,翻译过来是设置用户ID,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。SUID只对二进制文件有效,调用者对该文件有执行权,在执行过程中,调用者会暂时获得该文件的所有者权限,该权限只在程序执行的过程中有效。

第四字段:GID;用户组ID号,linux系统中除了GID外,还有一个SGID,它和SUID关系系统安全。SGID即Set GID的缩写,它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。

第五字段:用户名全称,这是可选的,可以不设置。

第六字段:用户的家目录所在位置;

第七字段:用户所用SHELL 的类型,常见为/bin/bash;

2.shadow文件构成

/etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd而产生的,这两个文件是应该是对应互补的;shadow内容包括用户及被加密的密码以及其它/etc/passwd 不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作。/etc/shadow 文件的内容包括9个段位,每个段位之间用:号分割;通过研究发现即使两个帐号的密码相同,其密码加密值也不一样。其各个字段的含义如下:

第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;

第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;

第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;

第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;

第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;

第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;

第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;

第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;

第九字段:保留字段,目前为空,以备将来Linux发展之用;

例如root帐号在etc/shadow文件中的表现方式为:

root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::

1.1.2Linux密码文件位置

绝大部分Linux操作系统的密码文件为shadow,但也有一些特殊的Linux/Unix操作系统的密码文件名称为passwd,而且密码文件所在位置也不一样。下面是一些Linux常见系统的密码文件位置:

Linux/etc/shadow

SystemV Release 4.2 /etc/security

SystemV Release 4.0 /etc/shadow

SunOS 5.0 /etc/shadow

SCOUnix / tcb /auth/files/

OSF/1 /etc/passwd

HP-UX /.secure/etc/ passwd

BSD4.x /etc/master.passwd

AIX3 /etc/security/passwd

IRIX5 /etc/shadow

1.1.3Linux系统采用的加密算法

1.查看密码的加密算法

Linux帐户的密码加密后存放于/etc/shadow文件中。对于Linux操作系统的密码采用哪种加密方式,取决于/etc/pam.d/system-auth或者/etc/pam.d/passwd文件定义,通过more /etc/pam.d/system-auth或者authconfig --test | grep hashing命令可以获取操作系统使用哪种加密算法,目前有sha256、sha512和md5加密算法。

在Red Hat Enterprise Linux Server中,可以通过authconfig --test | grep hashing命令来获取当前系统帐号的密码加密算法。如图1所示。

命令方块指令_命令提示符_linux+postgresql+命令

图1 获取Red Hat Enterprise Linux Server系统帐号加密算法

2.常见的Linux/Unix加密算法

Linux/UNIX操作系统目前采用5种加密算法,可以通过加密后的密码值来识别,主要是通过帐号后面的$X来判断。在hash值中两个“$”符号之间的数字代表不同的加密算法,系统不同所使用的算法也不尽相同。第二个“$”符号之后的字符串就是salt值,加密的时候需要用到(取每八个字符的每个字符的低7个bit位(取得的结果为01串)),然后得到8*7=56个bit位,然后用一定的规则反复加密,返回指向包含13个可打印的ASCII码字符([a-zA-Z0-9./])的指针,通常取前两位作为salt位。第三个“$”后面为密码经过hash变化后的值。在Hash值中头两字节为$1表示MD5加密算法,$2表示使用Blowfish加密算法,$5表示使用SHA-256加密算法,$6表示使用SHA-512加密算法,其余为标准的DES例如“root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”其加密算法为md5。数字和所使用的加密算法以及字符串位数对应关系:

1: MD5 ,(22位)

2a: Blowfish,只在有一部分linux分支中使用的加密方法

5: SHA-256 (43位)

6: SHA-512 (86位)

后面两种加密算法只在glibc2.7版本之后才支持。

1.1.4Linux密码及相关操作

1.Linux密码操作

对于Linux密码操作主要增加、删除和修改,第一次添加用户时需要设定一个密码。修改密码使用“passwd”,删除密码在删除用户时系统自动删除设置的密码。

(1).读取密码文

读取密码加密文件必须具备Root权限,通过“cat /etc/shadow”命令来读取shadow文件的内容,通过“cat /etc/passwd”查看用户信息,该文件普通用户权限即可查看。

(2)设置密码

“passwd username”为username用户设置密码,比如“passwd mysql”就是为mysql用户设置密码,后面根据提示需要输入两次用户密码。

(3)添加和删除用户

useradd和adduser用来建立用户帐号和创建用户的起始目录,使用权限是超级用户。例如命令“useradd antian365 -u 644”,就是在系统中增加一个用户antian365,同时指定用户所在组GID为644。删除用户命令为“userdel username”,例如删除antian365用户命令为“userdel antian365”

(4)linux查看用户的UID和GID

使用“id”命令获取当前用户的uid,gid等信息,例如获取当前用户root的信息,通过“id username”获取指定用户的uid,gid等信息。

2.生成基于md5加密算法的linux密码

(1)自定义设定密码

openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' |head -c 32)

(2)设置密码为123456

echo "123456" | openssl passwd -1 -salt $( passwd”。然后使用john进行破解。John the Ripper一共有简单、字典、增强和外挂四种破解模式。

1.1.7 使用hydra暴力破解Linux密码

hydra是世界顶级密码暴力密码破解工具,支持几乎所有协议的在线密码破解,功能强大,其密码能否被破解关键取决于破解字典是否足够强大。在网络安全渗透过程中是一款必备的测试工具,配合社工库进行社会工程学攻击,有时会获得意想不到的效果。

1.简介

hydra是著名黑客组织thc的一款开源的暴力密码破解工具,可以在线破解多种密码,目前已经被Backtrack和kali等渗透平台收录,除了命令行下的hydra外,还提供了hydragtk版本(有图形界面的hydra),官网网站:,目前最新版本为8.1下载地址:,Windows版本下载地址:,它可支持AFP, Cisco AAA, Cisco auth, Ciscoenable, CVS, Firebird, FTP, uHTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET,HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET,HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC,LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle,PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB,SMTP, SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet,VMware-Auth, VNC and XMPP等类型密码。

2.安装与使用

(1) Debian和Ubuntu安装

如果是Debian和Ubuntu发行版,源里自带hydra,直接用apt-get在线安装:

sudo apt-get install libssl-dev libssh-devlibidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-devfirebird2.1-dev libncp-dev hydra

Redhat/Fedora发行版的下载源码包编译安装,先安装相关依赖包:

yum install openssl-devel pcre-develncpfs-devel postgresql-devel libssh-devel subversion-devel

(2)centos安装

# tar zxvf hydra-7.6-src.tar.gz

# cd hydra-6.0-src

# ./configure

# make

# make install

(3)Windows下安装与使用

Windows版本是编译好的,最新版本有的可能需要环境支持,下载后直接在命令提示符下运行即可,建议在thc-hydra-windows程序目录新建cmd.bat,其内容为cmd.exe,运行cmd.bat后执行hydra即可出现提示符。对于有端口的需要指定端口号,例如对某ssh端口号为59878的ssh服务器进行暴力破解命令为:hydra -l root -p f*******B -s 59878 127.0.0.1 ssh,可以将结果生成为txt文件,例如hydra -l root -p f*******B -s 59878 127.0.0.1 ssh ->>s.txt,对多个IP地址进行相同密码破解,并将结果保存在s.txt中,如图6所示,等暴力破解完毕后,可以对s.txt进行搜索获取破解结果,如图7所示。

命令提示符_命令方块指令_linux+postgresql+命令

图6破解ssh帐号

命令提示符_命令方块指令_linux+postgresql+命令

图7查看破解结果

3.使用hydra

BT5和kali都默认安装了hydra,在kali中单击“kali Linux”-“Password Attacks”-“Online Attacks”-“hydra”即可打开hydra。在centos终端中输入命令/usr/local/bin/hydra即可打开该暴力破解工具,除此之外还可以通过hydra-wizard.sh命令进行向导式设置进行密码破解,如图8所示。

命令提示符_命令方块指令_linux+postgresql+命令

图8使用hydra-wizard.sh进行密码破解

4.安装libssh

如果不安装libssh,运行hydra破解账号时会出现错误,如图9所示,显示错误提示信息:[ERROR] Compiled without LIBSSH v0.4.x support, module is notavailable! 在centos下依次运行以下命令即可解决:

yum install cmake

wget

tar zxf libssh-0.4.8.tar.gz

cd libssh-0.4.8

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug-DWITH_SSH1=ON ..

make

make install

cd /test/ssh/hydra-7.6 (此为下载hydar解压的目录)

make clean

./configure

make

make install

命令提示符_linux+postgresql+命令_命令方块指令

图9出现libssh模块缺少错误

5.hydra参数详细说明

hydra [[[-l LOGIN|-L FILE] [-p PASS|-PFILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-wTIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-SuvV46][service://server[:PORT][/OPT]]

-l LOGIN 指定破解的用户名称,对特定用户破解。

-L FILE 从文件中加载用户名进行破解。

-p PASS小写p指定密码破解,少用,一般是采用密码字典。

-P FILE 大写字母P,指定密码字典。

-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。

-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。

-t TASKS 同时运行的连接的线程数,每一台主机默认为16。

-M FILE 指定服务器目标列表文件一行一条

-w TIME 设置最大超时的时间,单位秒,默认是30s。

-o FILE 指定结果输出文件。

-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。

-v / -V 显示详细过程。

-R 继续从上一次进度接着破解。

-S 采用SSL链接。

-s PORT 可通过这个参数指定非默认端口。

-U服务模块使用细节

-h更多的命令行选项(完整的帮助)

server目标服务器名称或者IP(使用这个或-M选项)

service指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http[s]-{head|get}http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysqloracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icqsapr3 ssh2 smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等

OPT一些服务模块支持额外的输入(-U用于模块的帮助)

6.破解ssh账号

破解ssh账号有两种方式,一种是指定账号破解,一种是指定用户列表破解。详细命令如下:

(1)hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh

例如输入命令“hydra -l root -P pwd2.dic -t1 -vV -e ns 192.168.44.139 ssh”对IP地址为“192.168.44.139”的root账号密码进行破解,如图10所示,破解成功后显示其详细信息。

“hydra -l root -P pwd2.dic -t1 -vV -e ns -o save.log 192.168.44.139 ssh ”将扫描结果保存在save.log文件中。

命令提示符_命令方块指令_linux+postgresql+命令

图10破解ssh账号

linux+postgresql+命令_命令提示符_命令方块指令

图11查看破解日志

参考文章:

#Install_Hydra

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!