linux系统帐号密码破解
Linux系统帐号密码破解
Linux操作系统由于其开源性、低成本等特点,在商业上运用越来越多,很多公司都采用LAMP(Linux+Apache+Mysql+PHP)典型架构。相对于Windows操作系统的密码获取技术而言,Linux密码获取比较困难。在Windows中可以通过彩虹表、键盘记录、mimikatz_trunk域名注入获取密码等技术获取包括Windows 2008 Server在内的所有操作系统密码,不管操作系统本身设置多么复杂变态的密码,但在Linux操作系统中,设置一个非常复杂的密码,破解成功的几率相对较低。在获得网站Webshell权限的前提下,通过提权等方法获得了系统权限,通过查看“/etc/shadow”文件内容获取了Linux操作系统的用户名和加密密码,获取密码文件后,如何进行破解是一大难题,本文就Linux下的密码原理,加密算法等进行分析,并对如何破解linux的密码进行研究。
1.1.1 Linux密码原理
- Linux密码构成
在一般Linux系统中涉及系统登录密码的两个重要文件/etc/passwd和/etc/shadow,有些特殊系统会是其它文件例如security;第一个文件记录用户信息,第二个是真正保存用户密码信息的。
- 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中的 UIDMIN 的最小值为准; Fedora 系统 login.defs的UIDMIN是500,而UID_MAX 值为60000,也就是说我们通过adduser默认添加的用户的UID的值是500到60000之间;而Slackware 通过adduser不指定UID来添加用户,默认UID 是从1000开始;
- 第四字段:GID;用户组ID号,linux系统中除了GID外,还有一个SGID,它和SUID关系系统安全。SGID即Set GID的缩写,它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。
- 第五字段:用户名全称,这是可选的,可以不设置。
- 第六字段:用户的家目录所在位置;
- 第七字段:用户所用SHELL 的类型,常见为/bin/bash;
- 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文件定义中获取,PASSMINDAYS 中有定义;
- 第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASSMAXDAYS 中定义;
- 第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASSWARNAGE 中定义;
- 第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
- 第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
- 第九字段:保留字段,目前为空,以备将来Linux发展之用;
例如root帐号在etc/shadow文件中的表现方式为:
root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::
1.1.2 Linux密码文件位置
绝大部分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.3 Linux系统采用的加密算法
- 查看密码的加密算法
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
命令来获取当前系统帐号的密码加密算法。
- 常见的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.4 Linux密码及相关操作
- 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等信息。
- 生成基于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是世界顶级密码暴力密码破解工具,支持几乎所有协议的在线密码破解,功能强大,其密码能否被破解关键取决于破解字典是否足够强大。在网络安全渗透过程中是一款必备的测试工具,配合社工库进行社会工程学攻击,有时会获得意想不到的效果。
- 简介
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等类型密码。
- 安装与使用
- (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中。
- 使用hydra
BT5和kali都默认安装了hydra,在kali中单击“kali Linux”-“Password Attacks”-“Online Attacks”-“hydra”即可打开hydra。在centos终端中输入命令/usr/local/bin/hydra
即可打开该暴力破解工具,除此之外还可以通过hydra-wizard.sh命令进行向导式设置进行密码破解。
- 安装libssh
如果不安装libssh,运行hydra破解账号时会出现错误,显示错误提示信息:[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
- 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用于模块的帮助)
- 破解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文件中。