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
留言评论(旧系统):