关于 十二月, 2011 的文章

以前我将信将疑,现在我深信不疑。

经过我的抽样测试,已经可以证明,WooYun的第二批爆料也是真实的:
http://www.wooyun.org/bugs/wooyun-2010-03523
看来黑客们的世界真的是很阴暗的,我们只不过看到了冰山一角,就足以如此震惊。

一位前辈告诉我,他在国内的一些安全论坛很早就看到了相关的传言,后来经过证实绝大多数都是是真实的,也告诉我早就存在于一些专门盗取用户账号与信息的组织了,专业程度非常惊人。

以下是其中部分信息:
第一个地下组织,我简称密码组织,该密码组织经过多年的发展,已经掌握了国内几乎所有人的网上密码。这些密码包括几乎国内所有论坛、邮箱等等密码,密码库早已达到TB级边,我随手给了些名不见经传的小站邮箱(随手google的),70%小站的任意邮箱密码全查出来了,知名站点就更不在话下,包括网站管理密码。主要的思路建立在我03年提出的一个研究未来攻击思维的文章,在这就不必多说了。他们搞站点、搞邮箱密码全是直接查出来的,根本不需要攻击,成功率极高。这是那个帖子里的内容,我2月前看到的,后来的验证,基本上都是真的。
第二个地下组织,秘密武器是自己研发的攻击平台,其中包含有大量的0day以及未公开的攻击技术。业内有一些搞站的特殊业务,有些业内众牛都无法搞定的高安全性站点,只要肯花钱,交给他们,他们都能拿下来。我试着给了几个全球排名前十的公司的主站,瞬间全拿到了root。
……

如此看来,“你以为你在冲浪,其实你在裸奔”,这句话真的不假,我之前刚刚接触抓包,数据监控,分析和过滤的一些安全设备和技术的时候,都非常惊讶,原来门槛真的不高,很容易就可以学会,当自己看到周围人的所有上网数据尽收眼底的时候,当参与到一个与中国移动垃圾短信过滤的项目中的时候,我发现原来所有的互联网信息安全其实都是假象。

在这次CSDN和人人网等大型网站用户账号与密码的泄露被自己亲自证实之后,以前我所有将信将疑的事情,现在我都深信不疑。

下面,公布部分泄露出来的迅雷下载地址:

(多玩网-800W) (猫扑-1000W) (人人网-500W) (CSDN-600万)
(7k7k小游戏-2000万) (嘟嘟牛) (178游戏网-1000W)

8 Comments

悲剧的CSDN!600多万用户账号与密码泄露!!

今天,在技术群里有人贴出了一个链接,链接直接到了WooYun.org漏洞报告平台,提到了一个CSDN的漏洞信息: http://www.wooyun.org/bugs/wooyun-2010-03692
文章标题非常引人注目:“CSDN数据库泄露,大量用户真实账号密码外泄。”

我看了以后将信将疑,赶快追随其提到的迅雷分享链接,取到了大小为274M的后缀为sql的文件(其实不是真正的SQL)。为了方便通过grep查询,我将该文件传到了自己一台Linux服务器上,首先很迫切的就是想查询一下自己的密码,看是不是真的,结果经过查询之后!非常震惊!自己的密码就放在那里!!当初为了安全还设置的很复杂,结果还是敌不过垃圾到无法形容的CSDN!震惊之余我赶快把所有用到该密码的地方都一一修改了!

接着出于好玩,让周围很多朋友和同事告诉我他们的账号,结果绝大多数都被我把密码给查出来了,他们也非常吃惊,并不停的骂CSDN垃圾,一个个都急着去更新密码。

这次不管CSDN给出怎样的解释,都是无济于事的,用户名和密码,最起码也是应该经过MD5加密的,这一点最初级的程序员都知道。这次完全暴露了CSDN作为一个技术社区在技术上的拙劣!我奉劝大家今后都不要把自己的Blog和社区活动放在CSDN上了。

下面是我在Linux服务器上操作的部分截图,文件我保留下来了,这东西非常值得纪念。

这里是CSDN创始人蒋涛的新浪微博截图,他们给出的理由是备份文件被泄露,也就直接说明了所有用户的密码是未经过加密存储的,真的很垃圾!有黑客说根本不像是备份,而是通过注入导出的,不过只导出了用户名,密码和邮箱字段。

,

No Comments

通过加载ip_nat_pptp模块使iptables支持PPTP穿透

之前为了做L7filter的测试,在公司里找了一台Linux主机,通过iptables搭建了一个网关,期间发现通过该网关上网无论如何都无法成功的连接上自己的VPN,开始一直以为是L7filter的过滤策略有问题,把相关策略全部清掉后还是一样。
于是怀疑应该是和iptables的配置有关,登陆到PPTP的服务器上,查看log,发现以下错误信息:
---
Starting negotiation on /dev/pts/1
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0xc93c30c6> <pcomp> <accomp> <mrru 1500> <endpoint [MAC:00:16:3e:d8:d7:39]>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0xc93c30c6> <pcomp> <accomp> <mrru 1500>
...
LCP: timeout sending Config-Requests
Connection terminated.
---
经搜索,发现有人提到PPTP穿透需要在iptables中配置,就像一般的路由器一样。通过lsmod查询,发现确实没有pptp模块,于是就通过以下命令加载了一下该模块:
# modprobe ip_nat_pptp
加载之后,果然能够正常拨上VPN了。

为了能够让iptables在每次启动的时候都自动加载该模块,最好在/etc/sysconfig/iptables-config中加入该模块:
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp ip_nat_pptp"

,

1 Comment

分享一个用于管理Vsftp的虚拟用户的脚本[原创实践]

由于公司的一台服务器上使用FTP的用户越来越多,为了方便管理和安全考虑,我们将这些用户账号从之前的操作系统用户迁移到了虚拟用户。
但也因此无法像以前对系统用户那样很方便的对虚拟用户进行添加,删除,禁用以及修改密码等操作了,为了解决这个问题,我自己编写了一个Shell脚本,用它可以实现对虚拟用户的的创建,删除,禁用,激活以及修改密码的操作,用起来感觉不错,再次特分享给大家。

首先,关于Vsftp的虚拟用户方式的安装与配置,可以参考:http://heylinux.com/archives/726.html

在以虚拟用户方式配置好Vsftp以后,就可以通过以下方式使用脚本了:
创建用户:./user.vsftpd.sh create jack
删除用户:./user.vsftpd.sh delete jack
禁用用户:./user.vsftpd.sh disable jack
激活用户:./user.vsftpd.sh enable jack
修改密码:./user.vsftpd.sh passwd jack

创建脚本,输入以下内容:
# vim user.vsftpd.sh
# chmod +x user.vsftpd.sh

#!/bin/bash
#The script can create,deactivate,activate and delete virtual users of vsftpd.
#Author: Dong Guo
#Date: December 12 2011

USERFILE=/etc/vsftpd/virtusers
USERDB=/etc/vsftpd/virtusers.db
CONFBASE=/etc/vsftpd/vconf
TMPCONF=/etc/vsftpd/vconf/vconf.tmp
FTPBASE=/ftphome
FTPHOST=ftphost
USERNAME=$2

if [ $# != 2 ];then
        echo "Usage: $0 {create|disable|enable|passwd|delete} {username}" >&2
        exit 1
fi

function check_username_exist() {
                #Check if virtual user already exist
                USERCOUNT=$(sed -n 'p;n' $USERFILE | grep -w $USERNAME | wc -l)
                if [ $USERCOUNT -ne 0 ];then
                echo "User $USERNAME ALREADY exist!" && exit
                fi
}

check_username_notexist() {
                #Check if virtual user not exist
                USERCOUNT=$(sed -n 'p;n' $USERFILE | grep -w $USERNAME | wc -l)
                if [ $USERCOUNT -eq 0 ];then
                echo "User $USERNAME NOT exist!" && exit
                fi
}

get_password() {
                #Get the password
                echo -n "Input password: "
                read password
                #Check if password is empty
                if [ -z "$password" ];then
                echo "Empty password!!" && exit
                fi
}

update_userdb() {
                #Delete the virtual user db
                rm -f $USERDB
                #Generate the virtual user db
                db42_load -T -t hash -f $USERFILE $USERDB
}

case "$1" in
        'create' )
                check_username_exist
                get_password
                #Write the username and password to $USERFILE
                echo $USERNAME >> $USERFILE
                echo $password >> $USERFILE
                update_userdb
                #Create the configure file of virtual user
                cp $TMPCONF $CONFBASE/$USERNAME
                #Replace the home directory name of virtual user
                sed -i "s/virtuser/$USERNAME/g" $CONFBASE/$USERNAME
                #Create the home directory of virtual user
                mkdir $FTPBASE/$USERNAME
                #Change the owner of home directory to OS user $FTPHOST
                chown -R $FTPHOST:$FTPHOST $FTPBASE/$USERNAME
                ;;

        'disable' )
                check_username_notexist
                #Change the owner of home directory from $FTPHOST to root
                chown root:root $FTPBASE/$USERNAME
                #Change the permissions of home directory to read-only for root
                chmod 700 $FTPBASE/$USERNAME
                ;;

        'enable' )
                check_username_notexist
                #Change the owner of home directory from root to $FTPHOST to root
                chown $FTPHOST:$FTPHOST $FTPBASE/$USERNAME
                #Change the permissions of home directory to 775 for $FTPHOST
                chmod 775 $FTPBASE/$USERNAME
                ;;

        'delete' )
                check_username_notexist
                #Get the row numbers of username and password of virtual user
                ROWNUMBER=$(cat -n $USERFILE | sed -n 'p;n' | grep -w $USERNAME | awk '{print $1}' | head -n 1)
                #Delete the username and password of virtual user from $USERFILE
                sed -i "${ROWNUMBER}d" $USERFILE
                sed -i "${ROWNUMBER}d" $USERFILE
                update_userdb
                #Delete the configure file of virtual user
                rm -f $CONFBASE/$USERNAME
                #Rename the home directory name of virtual user
                mv $FTPBASE/$USERNAME $FTPBASE/$USERNAME.deleted
                ;;

        'passwd' )
                check_username_notexist
                get_password
                #Get the row numbers of username and password of virtual user
                ROWNUMBER=$(cat -n $USERFILE | sed -n 'p;n' | grep -w $USERNAME | awk '{print $1}' | head -n 1)
                PASSWORDNUMBER=$(expr $ROWNUMBER + 1)
                sed -i "${PASSWORDNUMBER}d" $USERFILE
                sed -i "${ROWNUMBER}a $password" $USERFILE
                update_userdb
                ;;
        *)
                echo "Usage: $0 {create|disable|enable|passwd|delete} {username}" >&2
                exit 1
                ;;
esac

,

2 Comments