보호되어 있는 글입니다.
예전에 과제로 했던 proxy-server 보다도 시간이 오래 걸린거 같다. 뭔가 생각지 않은 상황도 너무 많았고 여타 다른 바이너리와는 다른 부분도 너무 많았다.심지어 보호기법도 많았다! NX-Bit, SSP, PIE가 걸려있었고 내부적으로 fork를 쓰는거 같아 Canary와 binary-base의 주소는 바뀌지 않았다.즉 한번만 구해놓으면 된다는 것인데, 사실 한번구하면 계속 구할 수 있기 때문에 큰 메리트는 아니다. 일단 우리가 알아내야 할 건 총 3가지이다. 랜덤값으로 이루어진 Password, 역시 랜덤한 canary 또 랜덤한 binary-base address.총 3개를 leak해야 하고 canary와 base address는 기존에 해왔던 방식으로 브루트 포싱했다. for(bytes_wr..
ASLR + NX Bit가 걸려있는 ROP문제이다. 사실 ROP만 문제였다면 굉장히 쉬웠겠지만. 조금 어려운 문제들은ROP + 부수적인 제한들이 걸려 있어서 그것들을 넘어가는게 약간 힘들다. 이 문제에선 JSON과 HMAC, HashCollision에 대해서 배울 수 있었다.삽질을 학교에서부터 집까지 했는데 유익한 문제였던것 같다. 일단 ADD 가젯과 pop ebx, pop eax가젯이 모두 있기 때문에 (ropshell.com에서 확인 가능)got를 이용해서 system을 실행시키는건 굉장히 쉬웠다. gContents의 값을 system 함수의 인자로 하려 했으나 gContents가 2중포인터여서불가능했다. 그렇다고 memcpy로 command를 한바이트씩 찾아서 복사하려니 굉장히 귀찮아서 srand@..
ROP면서도 신경쓸 게 많았던 문제였던 것 같다.cd80님이 힌트를 주신것들을 활용해 보면서 풀어봤고 sprintf를 이용하여 free-address에 // 0x00이 들어가면 안되기 때문에payload를 복사해 주고 Fake-EBP기법을 통해 payload를 실행해주고 쉘코드를 이용하여 풀어봤다.바이너리에 NX-Bit는 적용되어 있지 않다. 최대한 깔끔하게 exploit코드를 구성하려고 노력했고 sprintf를 13번정도 이상 실행하면 오류가 나서 read@got를 이용하여(read.plt+6을 가르키고 있는 포인터) free-address에 read.plt를 복사해 주었다. 그리고 s.send(sc)를 해주기 전에 print s.recv(1024)를 해줬었는데 그 다음으로 넘어가지 않는 현상이 발생했..
최초 작성일 : 2015 - 10 - 24 20:38최종 주성일 : 2015 - 10 - 24 23:37 주의: 완성된 포스팅이 아닙니다. 사실확인이 되어 있지 않으며 잘못된 정보일 수 있습니다. root@Ubuntu:~# ldd LIBC_RANDOMlinux-gate.so.1 => (0xb7718000)libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7540000)/lib/ld-linux.so.2 (0xb7719000)root@Ubuntu:~# ldd LIBC_RANDOMlinux-gate.so.1 => (0xb772b000)libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7553000)/lib/ld-linux.so.2 (0xb77..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869from err0rless import *import struct def getPassword(): s, t = connectSocket("192.168.95.148", 8777) print t.read_until("Password : ") t.write("A" * 0x11D + struct.pack("
Category: Pwnable Points: 400 Solves: TODO Description:Binary : http://binary.grayhash.com/7692931e710c1d805224c44ab97ddd52/bookstoreServer : 54.65.201.110Port : TCP 31337Flag Path : /home/bookstore/key Canary, NX, ASLR, PIE가 걸려있다. ROP를 하기엔 무리가 있는 난이도이다. 기본적인 동작과정은 메뉴들을 보면 대충 유추가 가능하다.Bookstore라는 이름과 같이 책정보를 기록하고 관리하는 프로그램이다. 로그인 아이디와 패스워드는 각각 helloadmin / iulover!@#$이다. 여기서 책을 구조체로 정의해 두어서 관리를 ..
12345678910111213141516171819202122232425262728from socket import *from telnetlib import *from struct import pack SERVER = ("prob.layer7.kr", 61616)s = socket(AF_INET, SOCK_STREAM)s.connect(SERVER)t = Telnet()t.sock = s print t.read_until("Password : ")s.send("0z57cr40a2abc34103295de63bb2b36e\n") # send password print t.read_until("people : ")s.send(str(0xFFFF + 1) + "\n") # Short Type integer o..