session是保存在服务器端的,可以通过cookie或者url传递session id,在php中,默认情况下这个session id是以“sess_+【session id】”的格式存放在服务器里的。存放位置可以在php.ini中的session.save_path指定其位置。

每个session id的文件中格式是这样的:

[保存的变量名]|s:值的长度:"变量值";

比如$_SESSION['name'] = 'lu4nx';

就对应的是:

name|s:5:"lu4nx";

假设某程序代码有这么一段:

<?php
session_start();
if(isset($_SESSION['name']))
echo '欢迎 '.$_SESSION['name'];
else
echo '尚未登陆<br />';
?>

再假设在登陆的时候 name变量是经过严格过滤的 好 没问题。我在session id存放目录里 将对应的session id的内容改成了这样:

name|s:30:"<script>alert('test')</script>";

注意值的长度一定要正确啊 跑个python,len一下就可以了。

接着 xss了。。。


相关回复:

xsser (十根阳具有长短,世上人多心不齐) | 2012-05-07 18:32

"我在session id存放目录里 将对应的session id的内容改成了这样" 老兄,你这个权限有点要求高啊

 

horseluke (微碌) | 2012-05-07 18:39

有些后门确实是怎么写的。

比如某应用后台判断是否管理员登陆:

if($_SESSION['admin_login'] != 1){
    exit('please login');
}

然后某后门文件直接针对此后台写了一个自动登录后门,代码只有一行:

$_SESSION['admin_login'] = 1;

这样就可以打开后台了,而且还不改原来后台的文件,干净利落。

 

乱雪 (hi.baidu.com/lu4nx) | 2012-05-07 19:19

我在本地测试的 改的时候当然sudo下就可以了。。。也不能说在低权限下就可以忽略吧抓hash还要administrator呢。虽然这个几乎看上没什么用。。哈哈

 

GaRY | 2012-05-08 00:13

拿到服务器权限了,然后你还xss?何必呢?

 

pentest | 2012-05-08 11:27

@horseluke 得两行吧?没session_start()呢

 

axis | 2012-05-08 11:34

可以做个留后门的技巧;当做漏洞用的话,对条件要求极其苛刻。

 

horseluke (微碌) | 2012-05-08 12:04

@pentest 额......确实写少了。

 

核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-05-08 12:58

条件有些苛刻,基本是个花瓶……


摘自:http://zone.wooyun.org/content/178

留言评论(旧系统):

YHHK @ 2012-05-08 22:55:34

条件极其无耻的苛刻,拿下权限再过把瘾。

本站回复:

观赏用的花瓶~~