作者:樱花浪子
来源:http://www.hacklu.net
申明:本文已发表黑客手册,转载请注名版权,此文版权归樱花浪子和黑客手册所有. !
转载请注明!
记得在某个论坛上看过某牛人说过一段话,有的时候看文章还不如看LCX对文章的点评,俺对这段话记忆犹新,
从那以后俺每次都注意LCX对文章的点评,正好看见黑手8月份“163博客我又来了”LCX对文章的点评是:为什么每个
人提到跨站,只是弹出一个alert就完事了呢?其实跨站语句可以做很多的事,发现容易,利用较难,所以跨站被某
牛人评为自慰式漏洞……
俺最近参考以前牛人写的跨站文章,自己又研究一下,跨站如果跨得漂亮了一样不比注入的威力小,赶紧从网上找
了一个PHP文本留言本,测试起来,首先当然是来个<script>alert("樱花浪子")</script>,却完完全全返回来了,查了
一下网页代码,已经被转换成<script>alert("樱花浪子")</script&g了,如图1。
看看它的代码是怎么写的,如下:
function addpost(){ //添加留言
global $submit,$lname,$admin,$u_name,$u_face,$u_emote,$u_hide,$u_sex,$u_mail,$u_oicq,$u_page,$u_text;
global $user_time;
if($submit){
if(($u_name=trim($u_name))=='') showerro ("昵称不能为空,请重新填写!");
elseif(time() - $user_time < $admin[timeout]) showerro ("为防止灌水,发留言间隔为 $admin[timeout] 秒");
elseif (checkemail($u_mail)) showerro("你邮件没有填写或填写有错误!");
elseif (eregi("[<>(),#|;%/$\]",$u_mail)) showerro("邮件填写不能包含特殊字符!");
elseif (strlen($u_name) >15) showerro("昵称太长,非法ID!");
elseif (eregi("[<>(),#|;%/$\]+",$u_name)) showerro("昵称只能是字母数字或中文,请不要包含< > | ?等特殊字符");
elseif ($u_oicq && !ereg("^[0-9]{5,13}$",$u_oicq)) showerro("OICQ号码只能为数字!");
elseif (eregi("[<>(),#|;%$\]+",$u_page)) showerro("主页填写有错误,主页名字只能包含字母数字下划线和-号!");
elseif (!eregi("^http://",$u_page)) showerro("主页开头要加http://");
elseif (($u_text=trim($u_text))=="") showerro("留言内容不能为空,请重新填写!"); //这里好象不是很严格啊
elseif (strlen($u_text)>$admin[maxlen]) showerro("留言太长了,想把留言簿撑爆呀!");
else {
if ($u_oicq=="") $u_oicq="未知";
if ($u_page=="") $u_page="http://";
$u_text = safeinput($u_text); //safeinput自定义函数
if ($u_hide) $u_text='
';
代码略……
showok("留言成功,感谢你对我们的支持!");
}
}else
showerro("非法操作!");
在看看safeinput函数:
function safeinput($d) { //输入内容安全转换
$d = str_replace("\t",'',$d);
$d = str_replace("\r",'',$d);
$d = str_replace('<','<',$d);
$d = str_replace('>','>',$d);
$d = str_replace("\n",'<br>',$d);
$d = str_replace('|','│',$d);
$d = str_replace(' ',' ',$d);
$d = preg_replace("/\[\/HIDE\]/is",'',$d);// 悄悄话
return $d;
}
好象没有[和]呀,在签写留言中试了一下javascript:alert('樱花浪子')" onload="if(this.width>450) {this.resized=true; this.width=450;}" border=0>,成功了,如图2,
