Saturday, August 15, 2009

各种XSS。。。

测试t,结果从最早的版本页面的两个xss,到新的版本的一堆,web+wap,一片一片的。
不过每个xss点的长度都不算太长,虽然也不短。

想起以前的某次,两三年以前了吧,fk要去xss中国站长,貌似是这个,留言板的用户名没过滤,但是长度貌似只有30多个字节不到。
排序跟t差不多,新发的在上边。
当时最开始试图从单条记录里XSS,但是太不靠谱了。
后来突发灵感,因为先发的在下边。那就把脚本逆序发出来。
先发一个闭合 script标签
然后再发js的最后一句,倒数第二句。。。。。。
最后发一个 script的标签。

不过,这个时候因为中间有html,所以js会出错
于是 每次的输入就用 /* */ 把中间的内容干掉了
例如
<script>/*
*/while(i)/*
。。。
*/alert(i++);/*
*/</script>


不过最后貌似fk的账号被封了 ... :x

Wednesday, August 5, 2009

延长SecureCRT试用期限

reg delete "HKLM\SOFTWARE\VanDyke\SecureCRT\Evaluation License"

本想直接改里边的参数,但是不靠谱

Thursday, July 30, 2009

自定义Session handler时 session_id() 发送 set-cookie头的处理

自定义的Session Handler,在 session_start 之前,做了如下处理
<?php
static protected function _config()
{
session_name(SS_SESSION_NAME);

session_set_cookie_params(
SS_SESSION_EXPIRATION ? SS_SESSION_EXPIRATION + parent::$buclass->timestamp : 0,
SS_COOKIE_PATH,
SS_COOKIE_DOMAIN,
SS_COOKIE_SECURE,
SS_COOKIE_HTTPONLY
);

global $table_sessions;
self::$_table_sessions = & $table_sessions;

# 如果要通过URL传递Session ID
if (SS_SESSION_PASSSIDVIAURL)
{
$sess_id = parent::$buclass->gpc->get(SS_SESSION_NAME);
}
else
{
$sess_id = parent::$buclass->gpc->cookie(SS_SESSION_NAME);
}

if (!empty($sess_id))
{
if (!preg_match('#^[a-zA-Z0-9]+$#', $sess_id))
{
throw new Exception('不合法的SESSION ID');
}

session_id($sess_id);
}
} ?>


每次刷新页面的时候,都发现http响应中有Set-Cookie的头,设置session name的。翻了翻php手册,http://www.php.net/session_id,参数的地方,有个Note
Note: When using session cookies, specifying an id for session_id() will always send a new cookie when session_start() is called, regardless if the current session id is identical to the one being set. 


于是,每次调用 session_id($sess_id); 这句的时候,都会发送一个set-cookie头。

回到代码,代码的设计是为了考虑到URL传递Session ID的情况,所以分别允许GET方式和COOKIE方式获取session name的值。
而代码里明显可以看到,这里获取 $_GET 和 $_COOKIE的值,并不是直接用这些超级全局变量的,而是通过了一个 gpc的类对象。自己写的一个gpc变量的封装,里边把$_GET, $_POST, $_COOKIE, $_FILES, $_REQUEST的值先加了引用,然后unset了。

结果。。。默认设置情况下,unset了$_COOKIE的值,或者说unlink了$_COOKIE对cookie变量的引用,session机制无法获取 session id,从而代码里会反复地设置session 的cookie变量。

Newborn Project里,gpc的unset变量环节是独立的,也就是
系统初始化->初始化核心类->初始化gpc->初始化session->清理gpc的变量(unset)...
而这里,
系统初始化->初始化核心类->初始化gpc(外加清理gpc的变量(unset))->初始化session...

结果又出问题了。。。

暂时没想出不增加gpc类与其他类耦合度的方法


==================================================================

Update:
最终还是决定跟Newborn Project一样把unset vars的操作单提出来

<?php
static protected function _config()
{
session_name(SS_SESSION_NAME);

session_set_cookie_params(
SS_SESSION_EXPIRATION ? SS_SESSION_EXPIRATION + parent::$buclass->timestamp : 0,
SS_COOKIE_PATH,
SS_COOKIE_DOMAIN,
SS_COOKIE_SECURE,
SS_COOKIE_HTTPONLY
);
global $table_sessions;
self::$_table_sessions = & $table_sessions;

# 如果要通过URL传递Session ID
if (SS_SESSION_PASSSIDVIAURL)
{
$sess_id = parent::$buclass->gpc->get(SS_SESSION_NAME);
if (!empty($sess_id))
{
session_id($sess_id);
}
}
else
{
if (!($sess_id = parent::$buclass->gpc->cookie(SS_SESSION_NAME))==$_COOKIE[SS_SESSION_NAME])
{
session_id($sess_id);
}
}
}



<?php
public function s_init()
{
buComponent::$buclass = & $this;

$this->_init_vars();

$this->filter = buFilter::instance();
$this->cache = buCache::instance();

$this->_init_gpc();
$this->_init_cookie();

if (SS_INTERFACE == SS_INTERFACE_WEB)
{
$this->_init_session();
}
else
{
$this->db_open();
}

$this->gpc->unset_vars();
}

Runkit是个好东西

可惜对系统函数不靠谱。。。

Monday, July 27, 2009

Baidu Hi 与 MSN 互通?

2.4beta版的Hi
早先某人聊天的时候说过这个事情,但是网上一直没有任何消息
而且他给我msn消息的时候,baidu的那段宣传文字的url,还是个死链

刚才清理系统临时文件的时候,看到临时文件夹下边 Baidu\AutoUpdate\plugins 有一个 msnview 目录
打开,三个dll的版本都是 2.4.12.1 时间 7.17
msnview.xml里边
<description name = "MSN互通" author = "luxuhui@baidu.com" />

还有一些其他的内容

这样显然是自动升级下来的

看看baiduhi安装目录,plugins下没有这个目录

把msnview copy过去
重启baidu hi
添加账号多了一个msn好友的radio,但是不可选


其他的地方也没发现多余的踪迹

继续看那个xml,有一段被注释掉了

<!--IPluginExtPt_TabMenu_MainPanel name = "MsnPlugin" enable= "true" sortByStatus="true"  sortByFolder="true"  sortBySpace="false"  sortByFrequency="false" sortOffline="true" bigHeadMode="true" smallHeadMode="true" noHeadMode="true" enableCard="false" supportGroup="false" enableSaveContact="false" enableSendFile="false" enableAVideo="false" enableMultiChat="false">   </IPluginExtPt_TabMenu_MainPanel-->

hmm,取消注释,继续重启


啧啧

还是不可用诶

界面管理器里也有这个设置


唔。。。


再次确认了一下插件,于是发现版本和某人的版本一样
而且xml的那部分本来就是被注释掉的
恢复那段内容
然后看了看update的目录
里边有个 plugins.db,但是baiduhi安装目录没有
hmm
copy过去,继续重启,
果然有了



登陆。。


登录后。。。

发消息。。。

悲剧的链接。。。



404 。。。


Session Handler引发的zend_mm_heap corrupted

不确定最终原因是什么
但是,从代码的结构看,与Newborn Project一样
加上了session handler之后,用kernel.class下的一个session handler类开启session handler
其他代码还没来得及改,大体都是dz2.0的结构。


只要在代码模板中调用discuz_exit或者exit,抑或是在 函数中调用,就会触发这个错误
具体是不是,还不敢确定
因为有时候stderr会写这个
有时候只是5.2 cli会弹出Windows下程序崩溃的提示,module显示unknown
5.3 cli到输出结束就一直挂起没响应,得ctrl+c
没心思去调试php这个错误来源。。。



最终解决方案是把output写进了session类的destructor里,然后kernel加了个end的方法调用exit()

网上找了很久都没有找到一个类似的情况

问题应该是session的结束和exit还有输出流的结束的顺序关系或者调用关系的冲突
但是。。懒得管了

Wednesday, July 22, 2009

Sina VPN非Windows平台登录

刚领到SecureID,按照说明把vpn的客户端装了
之前冠临说MacOS下没有VPN客户端
而安装的时候看到了 L2TP 的熟悉字眼
而且安装包的图标,貌似可以用7-zip解压
一试,果然
解压目录下有几个inf文件,一个vpnlist.txt,还有两个文件SinaL2TP.cmp和SinaL2TP.cms比较小,估计是文本,用Emeditor打开,果然

vpnlist.txt中,

[Settings]
default=自动
UpdateURL=http://***.*.sina.com/vpn/VPNfile.txt
message=  请根据您使用的网络环境选择相应的VPN目的地。                         通常,使用“自动”可智能选择恰当的网络。

[VPN Servers]
自动=***.*.sina.com
网通外网=*.***.*.sina.com
电信外网=*.***.*.sina.com
公司内网=10.2**.*.*3


让冠临新开了一个L2TP的连接,但是几次测试都不能连
L2TP相对PPTP,增加了加密传输的功能
所以,证书或者公钥。。。
翻了翻那几个文件,在SinaL2TP.cmp中看到了

PresharedKey=2**************************l

把这个值设成L2TP的公钥,就行了