본문 바로가기

[ ★ ]Study195

[Tip] pwntool 함수 offset/plt/got 주소 찾기(pwntools) pwtools 를 이용해서 offset 찾기 from pwn import * ex) system 함수 주소 가져오기라이브러리 지정 및 변수 명 선언 libc= ELF('./라이브러리')leak_system = base_addr + libc.symbols['system'] pwtools 를 이용해서 plt/got 찾기 binary = ELF("./파일")puts_plt = binary.plt['puts']puts_got = binary.got['puts'] 2018. 11. 6.
[Rookiss] pwnable.kr brain fuck(풀이중) 1. 는 포인터를 옮기고2. - + 포인터가 가리키는 값을 바꾸고3. putchar랑 getchar는 BYTE 단위로 result에 대입한다 2018. 11. 5.
[Rookiss] pwnable.kr simple login 요약 1. 같은 값을 입력하지만 hash 값이 계속 바뀐다.- main 에서 auth를 호출하는데 이 auth 함수를 볼 필요가 없다고 느껴짐 2. Base64Decode하고 12글자 입력 받는데 왜 segment fault 뜬다.- coredump로 값을 확인해봄 ( AAAABBBBCCCC를 Base64Encode한 값 ) CCCC 부분에서 ebp 변조 확인 3. GDB로 correct 함수보니 DEADBEEF 를 비교함 ( 갑자기 ? )- 변수 값을 확인하니 전역변수 값을 가져오는 것을 확인 가능함 4. 전역변수 주소 값이 바뀌지 않음 5. 생각한 페이로드는 leave; ret; 생각하면 CCCC 값을 가져오는 것 하나 확인 input 변수 주소 값 변하지 않는 것 correct함수에서 굳이 DEAD.. 2018. 11. 2.
[Rookiss] pwnable.kr fsb 생각한 로직1. main ebp leak해서 puts_GOT 쓰자2. 가르키는 공간에 execve 넣어서 실행하자=> main ebp가 가리키는 곳이 너무 멀다 다시 생각한 로직1. 스택 내의 서로 최소한의 거리를 두는 곳을 찾자.2. 그 곳을 puts_GOT 하고3. 가르키는 곳에 execve 하자 ps. %hn 쓰는 법 좀 공부해야되는데FSB 좀 더 공부가 필요한 걸 @_@ 공부하면서 알게 된 tip ..? %100%10$n %numc%n$n%x%x%x/%c%c ... 를 간략히해서 사용가능 @ 2018. 10. 9.
[Toddler's Bottle] pwnable.kr blukat 귀여운 이미지의 새로운 문제가 추가되었다. 숙련된 플레이어가 아니라면 금방 풀 수 있다.... 난 금방 풀 것 같았다(숙련된 포너가 되고싶다)아무튼 풀기전에 생각한 것은가벼운 코드 장난이 있을 것이다. 라고 생각했다 #include #include #include #include char flag[100]; char password[100]; char* key = "3\rG[S/%\x1c\x1d#0?\rIS\x0f\x1c\x1d\x18;,4\x1b\x00\x1bp;5\x0b\x1b\x08\x45+"; void calc_flag(char* s){ int i; for(i=0; i 2018. 8. 13.
[Toddler's Bottle] pwnable.kr coin1 import time from pwn import * HOST = 'pwnable.kr' PORT = 9007 conn = remote(HOST, PORT) time.sleep(3) #coin print conn.recv() for i in range(0,100): conn.recvuntil('N=') n = int(conn.recvuntil(' ')) conn.recvuntil('C=') c = int(conn.recv()) print n, c start = 0 end = n msg = "" while(start 2018. 8. 12.