본문 바로가기

ctf

[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.. 더보기
[Secuinside 2013] Bigfile of secret, write up http 헤더중 range에 관한 문제이다. Range의 bytes=x-y로 범위를 조작해주면, 응답페이지중 x번째부터 y번째까지의 바이트만을 출력해준다. import httplib,urllib; conn = httplib.HTTPConnection("119.70.231.180",80) conn.connect() conn.putrequest('GET','/secret_memo.txt') conn.putheader('Connection','keep-alive') conn.putheader('Range','bytes=100000000-100005000') conn.endheaders() response = conn.getresponse() data = response.read() print data 더보기
[plaid CTF 2013] web 150 write up 이번 plaid CTF 에서 가장 만만했던 문제는 web 150 charseet 문제밖에 없었다. 나머지는 탈탈탈 털렸다. 특히 64비트 elf 문제들....... 그 문제들과는 반대로 web 150문제는 너무 쉬워서 거의 바로 풀었던것 같다. union sql injection 문제였는데, 취약점은 search를 하는부분에 있었다. 우선 로그인을 하고나서, search 부분에 들어간후, ' (따옴표) 를 삽입해보면 아래와 같은 에러가 뜬다. Failed to query database: SELECT c.id, c.cname, DATE_FORMAT(c.lastedited, '%d %M %Y @ %H:%i') as lastedited, c.owner, st.name as tname, ca.name as c.. 더보기
[Codegate 2013] Web 400 simple write up 이 문제는 if문과 rand를 이용한 문제 수학문제 4문제가 주어지고, 다 풀면 원래는 700점이 한계인데, 3000점을 넘어야한다. 처음엔 blind injection을 통해 숨겨진 문제를 찾는거라 생각했다.그래서 시간을 좀 많이 소모했다. 근데 블라인드 인젝션을 힘겹게 해서 데이터를 다 보고나니, 포인트가 있는 문제는 그 4개가 전부였다. 그렇다면, 방법은 1,2,3,4번 문제를 여러번 풀어야 한다는 소리인데.. 파라메터를 조작해서 인젝션을 하다보면, 정답에 + or 1 like 1 #만 붙이면 클리어가 뜨는걸 알수 있다. 첫번째 쿼리에서 이미 풀었는지 확인을 하고, 두번째 쿼리에서 문제의 포인트를 불러오고,세번째 쿼리에서 불러온 포인트를 이용해 업데이트 한다. 이렇게 추측했다. 그렇다면 첫번째 쿼리.. 더보기
[Codegate 2013] Binary 100 simple write up peid를 통해서, 혹은 그냥 프로그램을 바로 켜봐도 느낌상 C# 파일이라는것을 확인할수 있다. 그러므로, net reflector를 이용해서 디컴파일했다. 코드를 쭉 살펴보다보면, 우리에게 보여주는 중요한 string은 암호화 되어있고 xor과 AES encrypt로 되어있다는것을 알수있다. blocksize가 0x100이므로, Rijndael 방식중에서도 256비트라는것을 알수있고, key값은 9e2ea73295c7201c5ccd044477228527 이다. iv값도 key값과 같은 값을 사용한다. 그리고 중요한점은, utf-8방식으로 해야한다는것이다. 그래서 온라인상에 있는 rijndael decrypt 페이지에서는 안되더라.. 그래서 처음엔 python으로 진행하다가 나중에 php를 이용해서 디코.. 더보기
[Codegate 2013] Web 300 simple write up 전형적인 블라인드 인젝션 문제다. contact를 하는 부분(이름,메일,question,메세지 보내는 부분)에서 인젝션이 가능하다. question 파라메터를 이용해서 블라인드 인젝션을 했다. 그러면 멤버들의 비밀번호가 md5로 해쉬 되어있는걸 확인할수 있고 사전식으로 online md5 decoding 페이지들을 이용해서 디코딩이 가능하다. 그리고 소스보기를 통해 보면, 자바스크립트가 숨겨져있고, 숨겨진 로그인페이지가 있다는걸 알수 있다 그리고 나서 하나씩 로그인해보면 Hound 해킹을 의뢰한 사람과 시간이 나타난다. [python] import httplib,urllib; import sys import time # Blind SQL injection # setting #toget = 'databas.. 더보기
[Codegate 2013] Web 100 simple write up 비밀번호 해쉬를 하는데 세번째 인자가 true이다. raw 형식으로 hash를 한다는것을 알수있다. 예전에 wargame에서 풀어본 경험이 있는데.. 아마 webhacking.kr에 있었던 문제 같았다. 경험이 있으므로.. 쉽게 풀었는데 예전엔 md5로 해쉬를 했는데, 이번엔 좀 다른방법으로 해쉬를 한다. 그러므로 새로 php를 짰고, 'or' 이나 '||' 이 들어있는 해쉬를 하나씩 돌려서 찾아봤고, 결과를 하나씩 넣어보다 보니 로그인 성공 (숫자 몇이 성공이었는지는 정확히 기억이 안난다) 비밀번호를 찾는 코드 $i의 값이 비밀번호다. $i=0; echo "start\n"; for ($i=119335433; $i 더보기
[PHDays 2012] Binary 100 Write up 문제파일: 저한테는 Binary 100 치고는 어려웠던 문제였습니다. 우선 PEID로 살펴보았습니다. UPX로 패킹이 되어있네요. IDA를 사용하기위해 우선 upx308w를 이용하여 언패킹을 하였습니다. 언패킹을 한후, 파일이름을 unpacked.exe로 바꾸고 작업하였습니다. 그냥 실행하면, "Ups, some calls are wrong or missing" 이라는 말만 하고는 끝납니다.. 올리디버거로 그 부분을 찾아가보면, [403790] 에 있는 값이 0이기때문에 아까와같은 메세지가 떴습니다. 억지로 flag를 보여주는곳으로 점프를 시켜봤자, "HoppaKey"가 뜰 뿐입니다. 하지만, 문제에서 답은 MD5로 주어진다고 했으므로, 이 "HoppaKey"는 답이 아닙니다. 그렇다면, [403790].. 더보기
[PHDays 2012] Misc 200 Write-up 문제파일: 아마 이번 대회에서 가장 쉬웠던 문제가 아닐까........... 합니다. 압축을 풀면 이와 같이 검은색의 이미지가 나옵니다. 이런 이미지문제는, 제 경험이 적어서 그런것일수도 있지만, 그림문제에서는 헤더 부분의 문제, 또는 다른 파일을 숨겨놓는 스테가노그래피. 두가지 경우밖에 생각이 나지 않았습니다. 그래서 헤더부분을 살펴보기위해 다른 GIF 파일을 그림판으로 만든후, 헤더부분을 하나씩 비교해가며 다른부분을 수정해보았습니다. 그중에 이부분을, 이렇게 바꾸자, 정답이 나오네요. 더보기
[Holyshield 2012] Packet 1번 문제풀이 먼저, 파일이 pcap 파일이라는것 정도는 간단히 알수 있으므로, 와이어샤크로 열어보았습니다. 그리고 쭉 내려보면 telnet이 많이 보이고, 오른쪽 클릭해서 'follow tcp stream'을 통해서 보면, 텔넷으로 원격접속을 한것을 알수있습니다. 그러면 우선 텔넷 패킷들만 필터링하기 위해서 filter에 "tcp.port == 23" 으로 패킷 필터링을 합니다. 그러면 대충 나오는 아이피가 10.10.60.173 10.10.60.102 10.10.60.64 10.10.60.90 정도가 나오고, 10.10.60.102가 서버 아이피라는것은 간단히 알수있습니다. 그중 10.10.60.64의 tcp stream을 살펴보면 .ackcat","\x40\x8a\xff\xbf\n"x.[C .ackcat","\x.. 더보기