Sock_sendpage() Local Ring0 Root Exploit

昨天Linux世界又爆高危漏洞。攻击方法非常简单,只需要下载一个包,执行其中的脚本文件即可以获取root权限。

攻击包下载:http://www.grsecurity.net/~spender/wunderbar_emporium.tgz
				
本地备份包:http://blog.eaxi.com/files/wunderbar_emporium-3.tgz

 

攻击成功截图:

grsec又一次立下汗马功劳:

 

在重现这个问题的时候,我注意到了还有另外一个BUG:Linux Kernel 2.x sock_sendpage() Local Root Exploit #2

随便也重现一下看:

下载:http://www.frasunek.com/proto_ops.tgz
				
本地备份包:http://blog.eaxi.com/files/proto_ops.tgz

在grsec下的表现:

可见这个grsec补丁的强悍!

如果你在使用deb,官方提供的补丁可能太老了,不适合你。这时,你可以考虑使用我编译的带补丁内核。

补丁下载:http://blog.eaxi.com/files/linux-image-2.6.27.10sihost-grsec_i386.deb

介绍网址:http://blog.sihost.net/linux-image-2-6-27-10sihost-grsec_i386-deb.html

更新:

2009-09-01 更新本地缓存包路径。

–EOF–

UCenter Home2.0的无法同步登录的修正

今天在弄UCenter Home和其他自定义应用同步登录,发现一个UCH 2.0中的一个问题。

打开source/do_login.php,你会发现这样的一个代码片段:

    if($_SCONFIG[‘uc_status’]) {

        include_once S_ROOT.’./uc_client/client.php’;

        $ucsynlogin = uc_user_synlogin($setarr[‘uid’]);

    } else {

        $ucsynlogin = ”;

    }

这个$_SCONFIG[‘uc_status’]并没有出现中出现在任何配置文件中,所以它始终是未被定义的。也就一直无法同步登录其他应用了。

在前边加上一句

    $_SCONFIG[‘uc_status’] = 1;

可以临时解决这个问题。

另外,自己写应用时,例子是最好的老师。ucenter的包中,有examples目录,就包括了两灰常经典的例子,绝对值得参考。

–EOF–

用apt-cacher-ng给自己的局域网搭建一个apt缓存

前言

由于内网机器较多,而且需要安装的软件也多数大同小异,所以说萌发了要搭建一个apt缓存的想法。

网上说apt-cacher-ng是个不错的选择,所以就下载试试。

安装

安装灰常简单:

aptitude update && aptitude install apt-cacher-ng

安装完成。

简介

软件的配置文件在/etc/apt-cacher-ng/acng.conf

缓存目录在/var/cache/apt-cacher-ng

日志目录在/var/log/apt-cacher-ng

它还提供了一个web接口,默认端口是3142

可以访问http://192.168.0.251:3142/ 来查看。

使用

当你在web界面访问它的时候,你就会看到很详细的指引。

如果看不懂英文,就按我说的去做吧:

在其他debian机器上,用root登录,执行:

echo ‘Acquire::http { Proxy “http://[::ffff:192.168.0.251]:3142”;};’ > /etc/apt/apt.conf.d/15apt-cacher-ng

如果你apt缓存机器本身也想使用这个缓存,那么,也按上面的去做吧。

呵呵,现在如果你在某一台机器下载过一个东西,在另外一台就可以直接从缓存读取啦,速度那个没得说。再快的外网也快不过内网吧。

–EOF–

在Debian/Linux下用mount.cifs挂载网上邻居的共享

这里只提Debian下的方法,其他发行版类似。

首先,你需要安装一个软件,叫smbfs

aptitude update && aptitude install smbfs

建一个局域网上其他机器上建立一个共享文件,打开写权限。请在其他WIN机器测试共享可以性,免得防火墙碍事。

在Debian里新建一个目录,如/share,执行命令:

mount.cifs //192.168.0.254/linux$ /share -o username=user,password=123456

成功。

要在系统启动后自动挂载,可以在/etc/rc.local文件里加一行:(必须写在exit 0前面)

mount.cifs //192.168.0.254/linux$ /share -o username=xxx,password=txxxxxx

–EOF–

Windows下源码编译PHP

开始前准备

开始之前,你需要准备如下东西:

  1. Microsoft Visual C++, 建议Visual C++ 2008, 速成版或专业版都可以。
  2. Windows SDK,下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en 不建议用那个网络安装,慢死,还不知道什么时候能完。还有就是建议全部安装。
  3. 其他工具,下载地址:http://pecl2.php.net/downloads/php-windows-builds/php-libs/binary-tools.zip

编译步骤

  1. 下载并安装VC++ 2008,并安装。
  2. 安装windows sdk 6.1
  3. 下载php5.3,下载地址:http://cn.php.net/get/php-5.3.0.tar.bz2/from/this/mirror
  4. 创建文件夹,比如C:\php-sdk
  5. 把上面第三步下载的包解压到这里,解压完时C:\php-sdk里应该有两个子目录bin, script
  6. 在开始菜单处打开Microsoft Windows SDK v6.1/CMD Shell,输入命令:
    setenv /x86 /xp /release
    cd c:\php-sdk
    bin\phpsdk_setvars.bat
    bin\phpsdk_buildtree.bat php53dev
  7. 上一步会创建一些目录。进入vc9\x86,把php5.3.0解压在这里,解压后目录结构:vc9\x86\php5.3.0
  8. 在WIN-SDK的命令行下输入:
    cd C:\php-sdk\php53dev\vc9\x86\php5.3.0
    buildconf
  9. 到了这一步,就和linux下差不多了,你可以看一下编译的选项帮助:
    configure –help
  10. 好,我们来一个最小化的编译:
    configure –disable-all –enable-cli
    nmake
  11. 这一步在php wiki上是没有问题,但由于我们是中文环境,会报下面的错误:
  12. 用Editplus打开ext\standard\browscap.c这个文件,

    选是,并选择Western European (Windows)
    然后另存为UTF-8编码。
  13. 重新nmake编译,然后用nmake snap编译成最终二进制包。二进制包在php-5.3.0\Release_TS下。可能的名字是php-5.3.0-Win32-VC9-x86.zip
  14. 测试一下:

下一篇文章再写怎么编译pecl扩展。

Debian NO_PUBKEY error

aptitude update 是Debian下用得最多的命令之一了,但这个命令有个毛病,还是会报错,往往向人不知道如何处理。

如:

W: GPG error: http://ftp.us.debian.org stable/non-US Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY F1D53D8C4F368D5D
W: You may want to run apt-get update to correct these problems

看文字,是说找不到公钥,更新失败。它的建议是使用apt-get update来解决问题,但恰恰这个问题就是这个命令导致的,呵呵。因为apt-get update和aptitude update是基本类似的。aptitude是替代apt-*的新版工具罢了。

Google后,发现有类似问题的人巨多。常见的解决方案是:

# apt-get install gnupg
# gpg –keyserver wwwkeys.eu.pgp.net –recv-keys F1D53D8C4F368D5D
# gpg –armor –export F1D53D8C4F368D5D | apt-key add –

这里的F1D53D8C4F368D5D是错误信息中的那一串。

但是据我测试,这里的关键,wwwkeys.en.pgp.net这个地址,有时并无法正常使用。下面是我收集的一些keyservers,持续更新中。

wwwkeys.eu.pgp.net

pgpkeys.mit.edu

Update 2009/12/31:
更加优雅的解决方案:
apt-get install debian-archive-keyring debian-keyring