이미지 부분이 깨지니 본문 아래 링크에서 PDF로 봐주시면 감사하겠습니다.
HISCHALL 2013
이름:강명석
ID:dladbru
BAAASIC GNIREENIGNE (50)
히히히
Solver:25
문제를 받아 올리디버거로 열어보면,“input string:“를 출력해준 뒤 값을 입력받 는다.
입력받은 다음 BreakPoint에 걸리게 아래와 같이 걸어두었다.
input값으로 “1234567890“ 을 입력해 주었다.
012F156C |
B8 01000000 |
MOV EAX,0x1 |
012F1571 |
6BC0 05 |
IMUL EAX,EAX,0x5 |
012F1574 |
0FBE4C05 E4 |
MOVSX ECX,BYTE PTR |
012F1579 |
83F9 45 |
CMP ECX,0x45 |
012F157C |
0F85 50010000 |
JNZ basic50!.012F16D2 |
scanf("%s",&input);
if(input+5!=0x45) goto 실패
위와 같이 볼 수 있으며 1234567890으로 보았을 때 6을 쓴 위치에 0x45(E)를 써 주 어야한다.
다음 연산으로는
012F1582 |
B8 01000000 |
MOV EAX,0x1 |
|
012F1587 |
C1E0 00 |
SHL EAX,0x0 |
|
012F158A |
0FBE4C05 E4 |
MOVSX ECX,BYTE PTR |
|
012F158F |
83F1 |
09 |
XOR ECX,0x9 |
012F1592 |
83F9 |
70 |
CMP ECX,0x70 |
012F1595 |
0F85 |
35010000 |
JNZ basic50!.012F16D0 |
if((input+1)^0x9!=0x70) goto 실패
위와 같은데 SHL EAX,0x0 은 의미가 없으므로 제외한 후 아래와 같이 되므로
0x70^0x9를 한 0x79(y)를 써주었다.
또 다음의 연산에서는
012F159B |
B8 01000000 |
MOV EAX,0x1 |
|
012F15A0 |
6BC0 0F |
IMUL EAX,EAX,0xF |
|
012F15A3 |
0FBE4C05 E4 |
MOVSX ECX,BYTE PTR |
|
012F15A8 |
83E9 |
0A |
SUB ECX,0xA |
012F15AB |
83F9 |
57 |
CMP ECX,0x57 |
012F15AE |
0F85 1C010000 |
JNZ basic50!.012F16D0 |
위의 결과로 예상할 수 있는 것은 비밀번호가 16자리 이상이라는 것을 알 수 있었 다.
역연산을 거치게 되면 (0x57+0xA=0x61(a)
strcmp 명령어를 썼는지 “paktdlTdm“ 하고 내가 입력한 7890을 비교한다. 두 개를 같게 해줘야 할 것 같으므로 (1y345E7890?????a
변경해주고보니 1 과 345가 해결되지 않았다. 더 F8로 내려가다 보면
012F1660 |
B8 |
01000000 |
MOV EAX,0x1 |
|
012F1665 |
6BC0 |
00 |
IMUL EAX,EAX,0x0 ;0으로 EAX초기화 |
|
012F1668 |
0FBE4C05 E4 |
MOVSX ECX,BYTE PTR |
||
012F166D |
83F9 |
64 |
CMP ECX,0x64 |
|
012F1670 |
75 |
5E |
JNZ SHORT basic50!.012F16D0 |
‘1’==0x64(d) 와 같게 해 준 다음 F8로 더 내려가다 보면 dy345EpaktdlTdma
345와 “aka”를 마지막으로 비교한다! “aka”로 바꿔주자!
Key : dyakaEpaktdlTdma (요맘떼맛있음)
Ron_Adi_Leonard (50)
N=A0049667DECE297DCA63B07553C18659
D=FA423278809D2D846ACFA033B16F1D9
C=6BB9D18C51EDF601AEB78AEB110A2565
Plain text 를 찾아라!
Solver:14
RSA암호인가 보다. 수학적 공식으로는
C^D mod N 이지만 C^D를 버텨낼 컴퓨터는 없을 것 같다고 판단되어 알아보니 중국 인의 나머지 정리란 것을 이용한 것 같아 보이는 크랙사이트들을 뒤지기 시작했다. http://nmichaels.org/rsa.py
Public Modulus:(N)
Private Exponent:(D) Text:(C)
각각 넣고 Decrypt를 하자 C에 hex값들이 떴다! 그것을 복호화 해보니
Key : START+HISCHALL!
Download (50)
내가 아까 뭘 다운받았더라.. 모르고 지워버려서 그러는데 내가 뭘 다 운받았었는지 봐줄 수 있어? 답은 대문자입니다.
Solver:45
문제를 다운로드 받아서 압축을 풀어보면 root 디렉터리를 옯겨온 모습이다. 다운로드는 웹 브라우저를 통해서 했을것이라 짐작하고 다른 브라우저보다 조금 모 질란 모질라의 파이어폭스를 뒤졌다. \root\.mozilla\firefox\yktthk3c.default\downloads.sqlite
파일을 찾았으나 내용이 비어있었다. 여기서 밥을 먹으면서 골똘히 생각하던 찰나
에
\.mozilla\firefox\yktthk3c.default\thumbnails 폴더에 있던 사진들이 생각났다.
썸네일이라 화질이 안좋지만 내눈은 2.0이므로 읽는데 무리가 없다.
Packet Sniffer와 network sniffer에 대한 내용이 있다.
대표적인 네트워크 스니퍼에는 와이어샤크(Wireshark)가 생각나서 인증을 해보니 정답이었다.
Key : WIRESHARK
Flagis1337 (50)
문제 지문이 없음. Solver:53
index.zip를 다운받고 압축을 풀어보면 index.html이 있다. 소스는 아래와 같았다.
그러니까 숫자를 때려 맞춰서 이모티콘으로 인코딩 되어있는 소스를 실행시켜야 되 는 것 같다.
9번째의 줄의 if (guess==mystery)인 부분을
로 바꾸면 키가 99% 뜰 것이라고 생각되어 바꾼 뒤 1을 입력해보니 키가 떴다.
Key : 1337g33kn355mj
Systempork(100)
쉽습니다. Server: 210.125.73.220:1111 , 모든 보호옵션 x Solver:8
파일을 다운받으니 ELF파일이었다. IDA로 열어서 확인해보니
call _gets의 인자로
Stack Buffer Overflow를 하기로 했다.
lea eax, [ebp+s] ;
mov [esp],eax ; gets함수의 인자로 eax를 넣는다. call _gets ; gets 함수를 통해 값을 입력 받는다.
dummy[shellcode 포함]=1036byte[1032(0x408)+4(ebp)]
shellcode는 23byte linux x86 shellcode 사용을 했다.
(perl
아래와 같이 해주었다. 그런데 쉘이 안떴다. 자세히 위의 IDA코드를 잘보니 아래와 같은 코드를 통해 리턴주소를 복구 시켜주고있었다.
mov eax,[ebp+4] ; ebp+4 는 ret주소를 가지고 있다. mov ds:myret,eax ; ret를 복구시켜주는 명령
현재 위의 IDA코드는 main함수에서 호출된 go함수였다. 그래서 선택한 방법으로는 go에서 정상적으로 리턴해서 main함수에서 ret가 조작되게 시도를 하였다. dummy를 16개 정도 추가해주니 main의 ret가 조작되는 것을 디버깅으로 확인한 후 아래와 같이 공격에 성공했다.
Key : http://www.youtube.com/watch?v=TYXbbE3W36M
비밀번호 (100)
아무도 내 비밀번호를 모를꺼야! Solver:24
apk파일을 받은뒤 zip로 바꿔 압축을 푼뒤, “classes.dex” 파일을 dex2jar을 통해 jar로 변환한후
키를 umum.hischall.kr에서 가져오는 형태인데 액티비티가 MainActivity,a,b 3가지가 있다. a를 확인해보면
umum.hischall.kr를 요리해서 http://umum.hischall.kr:11011 을 만드는 것을 볼 수 있었다. 나머지는 보지도 않고 접속을 해보았더니 뜻대로 되지 않았다.
소스코드를 다시 한번 자세히 보니
String str1 = localInetAddress.getHostAddress();
위와 같은 구문에 의해서 http://IPaddress:11011 인 것을 알 수 있었다.
cmd의 nslookup명령어를 통해 ip: 210.125.73.216 인 것을 알아내어 접속을 했더니 키가 떳다.
Key : This_is_Real_K3y~
JustForFuxx (100)
인증형식 : [Integer]_[Password] ex) 1234_huh
[+] 실제로 바이너리 자체로는 답이 여러가지 이지만 잘생각해보시면 답이 한가지가됩니다.
아래 DLL을 추가해주세요!
Integer는 8자리입니다. Solver:8
파일을 열어보니 정수값을 받습니다. 그리고 무엇을 받는 맨뒤의 두자리와 3,4자리가 같다는 것을 짐작할 수 있습니다.
왠지 맨뒤에는 l이라는 점을 이용해서 h?ll?hischall
숫자가 8자리임을 바탕으로 코딩을 하였는데 키가 너무 많았습니다.
그러던 찰나에 힌트로
위와 같은 힌트가 나왔고 8자리의 숫자가 위에 있는 연도나 월일 또는 시간을 암시함을 생각해 볼 수 있습니다.
sub_411410 함수 안에 있는 구문중에
역연산으로
얻은 값인 11091107에서 가장가까운 숫자를 코딩한 결과 아래와 같이 되었습니다.
Key : 11091110_hellohischall
hatehexray (600)
컼컼이는 Backtrack을 이용해 소현이 컴퓨터를 해킹했다. 그가 사용한 도구는 Metasploit이고, 사용한 Payload는 windows7_sp1_reverse_tcp였다. 파일을 훔치는데 성공을 했지만 키 값이 없어져서 숨겨진 메세지를 볼 수 없었다.
Solver:10
이 문제는 출제자의 의도가 헥스레이를 쓰지 말라는 의도로 알고 열어보지도 않았다.
aaaa 1234등 입력해보았으나 Result 에는 아래와 같이 출력될 뿐이었다.
*****************************************************
연산을 하나하나 되짚어가다가 확인을 했을때는 Solver가 6명을 넘겼을 때 였다. IRC채팅방에서는 의도대로 풀리지않았다고 말했고 나는 멘붕을 해서 ajiofjweifjweoifjawoiefjakl;efjla;kwfjelawef 이런식으로 막 입력했고
****************************3*********}**************
*대신 출력되는 값들이 보였다.
Codegate 2012 Binary 400 문제가 생각났으며 한자리 한자리 게싱을 통해 “Welcome to hischall 2013 reverse engineering problems“를 입력하자 아래와 같이 출력됬다.
마지막 *을 붙여서 인증이 안되기에 없앴더니 인증에 성공하였다.
Key : answpcnfwpwksmsgprtmfpdlfmfwjdakftlfgdjgo
[BONUS]Life is all about timing (100)
Break Thru에게 상품을 드립니다.
당신의 인생은 짧아요. 그리고 그 인생에 있어서 중요한 타이밍은 더 짧죠. 아마 이 문제를 풀면서 타이밍의 중요성을 아주 잘 알게 될거에요. 왜냐구요? 여러분은 몇밀리초 차이로 답을 맞추지 못할수도 있으니까요 (^^)/
Solver:15
문제를 받으니 패킹이 되어있었다.
그냥 실행은 되었으나 안티 디버깅이 되어있어서 올리디버그로 여는데는 실패 했다.
결국 프로그램을 연뒤에 attach를 하고 string 들을 확인해보니 아래와 같았다.
맨위에 스트링들이 수상해보인다. 인증을 해보니 Clear!
Key : ch1ck3n4ndp34c3
인강플레이어 (200)
수능이 끝나고 해설 강의를 보다가 답이 다 틀려 9등급을 받은
extr군은 화가났는데......
Solver:8
앱을 다운받아보니 위와 같이뜬다.
주목할부분이 두곳있는데 그중 한곳은 아래소스에 있다.
이것을 보고 http://210.125.73.216:1337 에 접속을 하였다.
예상대로 파일 목록이 떳다.
http://210.125.73.216:1337/readthis 의 주소로 접속해 읽고자하였지만 파일이 읽을 수 없었다. 스마트폰 기기에서는 mp4영상을 불러오는 것을 확인 하였기에 다른 연산이 있을것이라 생각하고 소스를 다시 보았다.
홈페이지 경로인 VideoURL을 가지고 연산을 한다. 얻고자 하는 파일이 readthis기준으로
http://210.125.73.216:1337/readthis + *0* + 미지의숫자(i1) i1을 얻기 위해서 역연산을 해보았다.
m과 n을 얻어야하는데 n은 i+1인데 i가 위에 0으로 선언되어 있다. m값은 m = (j*3 +12 + 32) * 16
j= “0”의 길이니까 문자열의 길이는 1이니 j에는 1에 들어가게 되어있다. j를 1로잡고 연산을 하면 m에는 753이 들어가게 된다.
합쳐진 URL은 DownloadHtml 의 인자로 들어가게 되어 다운로드를 하게 된다. http://210.125.73.216:1337/readthis*0*753
위의 주소로 접속을 해보니 File Found 라는 문구만 뜰뿐 출력이 되지 않았다. C Socket을 짜서 byte를 가져오려고 하였으나 그도 안되었다.
파일은 찾았다라니까 download에서 제일연관 있는 “.”문자열을 붙여서 하니
Key가 읽혔다.
Key : gugugugugugugugugugu9999999999nine
[BONUS] ELF Girl(100)
Break Thru에게 상품을 드립니다.
답은 md5로 인증해주세요. Solver:8
받고나서 Hex editor로 헤더를 보니 ELF파일 이기에 BackTrack을 키고 실행을 해보았다.
실행이 되지않았다.. file명령어로 무슨 파일인지 확인하였더니 ARM파일이었다. BONUS니까 쉬울거라 믿고 IDA로 열어보았다.
머릿속으로는 연산이 불가능했다. 입력을 받는 부분이 없었고 mkdir명령어와 rmdir로
폴더를 만들었다 지웠다를 반복문을 통해 반복했다. 그래서 ARM 서버를 찾던도중에 스마트폰을 떠올렸다. 스마트폰에 루팅도 하였으나 chmod를 사용하였음에도 X(실행권한)을 얻지 못해서 실패했다. 그래서 장비중에 라즈베리파이를 대여했다. 하지만 sdcard가 없어서 사용하지 못하였다.
2013년 인코그니토 강연자분이 라즈베리파이 가상머신을 주셔서 실행을 했더니 haha..라면서 종료되버렸다.
코드에 ./arrrrrm 이아닌 ./arrrrrrrrrrrrrm 으로 실행을 해야하기에 파일이름을 바꿔서 실행시켰다.
Key : 21fe4f8ead48875a1774056781914536
저의 중고생 마지막 대회였습니다.
대회 열어주신 운영진분 모두 감사합니다.
저의 중고생 마지막 대회였기에 즐거웠습니다..
'Write-up' 카테고리의 다른 글
[Crypto] 2019 CTFZONE agents : OFB 모드에서 값을 조작해야하는 문제 (0) | 2019.12.02 |
---|---|
[Reversing]Defcon 2015 Pr0dk3y (2) | 2015.06.03 |
[HUST] 7. 수학 암호 (2) | 2012.12.03 |
[순천향대 2012 정보보호 페스티벌 본선 사회공학적 해킹] (0) | 2012.09.17 |
[순천향대 2012 정보보호 페스티벌 본선 바이너리] (0) | 2012.09.15 |
댓글