Samba漏洞(CVE-2015-0240)poc分析
2015-03-01 20:56
781 查看
written by ling
1. 前言
Samba漏洞(cve-2015-0240)是前几天公布的一个漏洞https://securityblog.redhat.com/2015/02/23/samba-vulnerability-cve-2015-0240/
,今天看见国外有人公布了poc:
,因此对这个漏洞进行了调试分析。
2. 漏洞成因
漏洞成因在于没有对变量进行初始化
NTSTATUS_netr_ServerPasswordSet(pipes_struct *p,
struct netr_ServerPasswordSet *r)
{
NTSTATUSstatus = NT_STATUS_OK;
structsamu *sampass=NULL;
inti;
structnetlogon_creds_CredentialState *creds;
DEBUG(5,("_netr_ServerPasswordSet:%d\n", __LINE__));
become_root();
status= netr_creds_server_step_check(p, p->mem_ctx,
r->in.computer_name,
r->in.credential,
r->out.return_authenticator,
&creds);
unbecome_root();
if(!NT_STATUS_IS_OK(status)) {
DEBUG(2,("_netr_ServerPasswordSet:netlogon_creds_server_step failed. Rejecting auth "
"requestfrom client %s machine account %s\n",
r->in.computer_name,creds->computer_name));
TALLOC_FREE(creds);
returnstatus;
}
在_netr_ServerPasswordSet中没有对creds进行初始化,netr_creds_server_step_check函数在返回失败时,仍然没有对creds进行初始化,之后直接对没有初始化的creds调用TALLOC_FREE触发漏洞。
3. 环境搭建
Fedora 14 + samba 3.5.5
Poc运行效果如下:
4. 调试分析
Smbd程序属于accept-fork类型服务,每来一个连接,fork一个进程与其交互。因此在gdb附加到smbd进程后,选择跟踪子进程。
经过对照源码,发现ebp-0x20为creds。
通过堆栈回朔,可以知道对ebp-0x20的真正赋值来自与函数talloc_zero
分析talloc_zero函数(在libtalloc.so.2.0.1库中)从talloc_zero中可以看出ebp-0x20(即v20)与talloc_zero函数(有2个参数,第一个参数为地址,第二个参数为大小)的第一个参数有关。
PS:调试时,程序进程老收到SIGUSR1信号,之后程序就会跳到信号处理函数执行,老影响到调试,不知道用handle SIGUSR1 ignore能否忽略掉该信号。
1. 前言
Samba漏洞(cve-2015-0240)是前几天公布的一个漏洞https://securityblog.redhat.com/2015/02/23/samba-vulnerability-cve-2015-0240/
,今天看见国外有人公布了poc:
https://gist.github.com/worawit/33cc5534cb555a0b710b
,因此对这个漏洞进行了调试分析。
2. 漏洞成因
漏洞成因在于没有对变量进行初始化
NTSTATUS_netr_ServerPasswordSet(pipes_struct *p,
struct netr_ServerPasswordSet *r)
{
NTSTATUSstatus = NT_STATUS_OK;
structsamu *sampass=NULL;
inti;
structnetlogon_creds_CredentialState *creds;
DEBUG(5,("_netr_ServerPasswordSet:%d\n", __LINE__));
become_root();
status= netr_creds_server_step_check(p, p->mem_ctx,
r->in.computer_name,
r->in.credential,
r->out.return_authenticator,
&creds);
unbecome_root();
if(!NT_STATUS_IS_OK(status)) {
DEBUG(2,("_netr_ServerPasswordSet:netlogon_creds_server_step failed. Rejecting auth "
"requestfrom client %s machine account %s\n",
r->in.computer_name,creds->computer_name));
TALLOC_FREE(creds);
returnstatus;
}
在_netr_ServerPasswordSet中没有对creds进行初始化,netr_creds_server_step_check函数在返回失败时,仍然没有对creds进行初始化,之后直接对没有初始化的creds调用TALLOC_FREE触发漏洞。
3. 环境搭建
Fedora 14 + samba 3.5.5
Poc运行效果如下:
4. 调试分析
Smbd程序属于accept-fork类型服务,每来一个连接,fork一个进程与其交互。因此在gdb附加到smbd进程后,选择跟踪子进程。
经过对照源码,发现ebp-0x20为creds。
通过堆栈回朔,可以知道对ebp-0x20的真正赋值来自与函数talloc_zero
分析talloc_zero函数(在libtalloc.so.2.0.1库中)从talloc_zero中可以看出ebp-0x20(即v20)与talloc_zero函数(有2个参数,第一个参数为地址,第二个参数为大小)的第一个参数有关。
PS:调试时,程序进程老收到SIGUSR1信号,之后程序就会跳到信号处理函数执行,老影响到调试,不知道用handle SIGUSR1 ignore能否忽略掉该信号。
相关文章推荐
- Samba远程崩溃或代码执行漏洞(CVE-2015-0240)简要分析
- cve-2015-0569 安卓手机提权ROOT漏洞 分析
- XStream Deserializable Vulnerablity And Groovy CVE-2015-3253漏洞分析
- CVE-2015-7547溢出漏洞的简单分析与调试 glibc getaddrinfo
- PHPMailer 命令执行漏洞(CVE-2016-10033)分析(含通用POC)
- CVE-2015-7547漏洞分析从原因到利用到补丁(非常适合小白)【转】
- Glibc ghost(CVE-2015-0235)漏洞简要分析及检测
- CVE-2015-7547漏洞分析从原因到利用到补丁(非常适合小白)
- OpenSSL X509 Certificate反序列化漏洞(CVE-2015-3825)成因分析
- WordPress漏洞分析(CVE-2015-5714 & CVE-2015-5715)
- glibc CVE-2015-7547漏洞的分析和修复方法【转】
- CVE 2013-6272 Android phone提权打电话漏洞分析
- 破壳漏洞(shellshock)分析CVE-2014-6271
- CVE 2013-3897 - UAF 漏洞分析学习学习
- 破壳漏洞(CVE-2014-6271)综合分析:“破壳”漏洞系列分析之二
- 漏洞分析---Bash安全漏洞(CVE-2014-6271)技术简析
- CVE-2014-0195漏洞分析
- GHOST: glibc vulnerability (CVE-2015-0235)#GHOST(幽灵)漏洞修复
- Android电话拨打权限绕过漏洞(CVE-2013-6272)分析
- 对ms10-087(CVE-2010-3333)漏洞分析