Wargame.kr 사이트에서 Crackme 기초 문제이다!

사실 쉬운문제인데 너무 돌아간 느낌이 있다...

간단한 리버싱 문제라길래 냉큼 받아 풀었다.



(문제 화면)



프로그램을 실행하면 다음과 같이 이름과 패스워드를 물어본다.



(프로그램 실행 화면)



프로그램은 C# 으로 개발되어있다. (그래서 이 문제를 냉큼 받아서 했다.!)
(왜냐하면 나에게는 dotpeek 이 있기 때문에!!!!)
(바로 디컴파일 하니 보기 좋은 소스코드가 나왔다.)

메인 함수부터 보자!



(메인함수)


이름은 BluSH4G 로 입력해야하고...
그다음 입력이 조금 처리가 되있다. s1에는 입력받은 문자와 이름을 myEncrypt 함수에 넣어 처리를 하고 그 값과 getps 함수의 결과값과 비교한다. 

getps 함수는 어떤 url에 name 값을 전달하면 특정 문자열이 온다.
그 값은 sNfpY/vo6zye3TKPpH6Ekmtx26qLLriF/RpV4Fsyho/YkA2kvF9ybHLWjgGoV5EE 였다.!

문제는 암호화 함수 부분!


(암호화 함수 부분)



뭘하는지는 냉큼 이해 되었다.
암호모드 ECB모드로 초기벡터와 키는 name에 어떤 처리를 한 값을 주어 DES로 암호화 한다.

그러면 어떤 처리를?..


(mPadding 함수)


이 함수에서 이름을 처리해서 그 값을 초기벡터와 키값으로 사용한다.

즉 우리는 이 값을 알아야한다. 이름을 BluSH4G 로 입력하라고 했고 길이는 7이므로 하나의 * 문자가 붙을것이다. 결과값은 BluSH4G* 이 될것이다.

그렇다면 

BluSH4G*을 초기벡터, 키 값으로 사용하여 전달받은 문자열을 DES 복호화 하면된다.



(복호화 과정)


여기서 조금 엉뚱땅 팠는데..
암호화 함수에서 마지막에 Base64 인코딩을보고 나혼자 C# 컴파일러 만지면서 디코딩과정부터 만지고 있었다. 생각해보면 DES 암호화 후 Base64로 표현하여 출력하는게 일반적이어서 일반적인 사이트에서 기본적으로 제공해주고 있었다.

나는 고로 파란 버튼을 클릭하기만 하면 됬었다.


(문제 해결)

'WarGame > 500 Project' 카테고리의 다른 글

(43/500) - pwnable.kr - fd  (0) 2017.07.05
(42/500) - Lena's Tutorial 01  (0) 2017.07.05
(40/500) Wargame.kr - EASY_CrackMe  (0) 2017.06.27
(39/500) Suninatas - Binary(11)  (0) 2017.06.27
(38/500) Suninatas - Binary(10)  (0) 2017.06.27


15번째로 푼 문제이다.

SQL Injection 문제인데... 내가 가장 자신있기도하지만
풀기는 귀찮아서 풀기 시작하기가 조금 꺼려지는 문제이기도 하다..!

문제이름은 외로운 사나이
lonely guys이다.



(lonely guys)



아래는 문제 페이지다.
문제 이름과 어울리게 외로운 남자들의 이름이 적혀있다.



(문제 페이지)



당연히 소스코드가 주어졌으니 소스코드를 보고 우리가 공략할 수 있는 부분을 확인해보자.



(소스 코드)



소스코드를 보니 select 문을 이용할 수 있는데
ordey by 뒤에 붙일 수 있다.. (몰랐지만 이게 조금 검색을 하게 만들었던 부분이다.)

order by reg_date 뒤에는 일반적으로 asc desc 가 오거나 혹은
order by reg_date, [컬럼명], 컬럼명 ... 등등 이렇게 올수 있다.

나는 콤마로 붙여 여러게를 있는 방법을 사용했다.
if 분기문을 사용해 Blind injection을 할 것이다.

우리가 공략해야할 테이블 이름은 authkey이며 컬럼이름은 authkey이다. (코드에 나와있다.)

먼저 POST방식으로 sort를 전달해야하므로 post form 문을 만들어주자.



(form 문 제작)



기본적으로 내가 사용하려는 if 문으로 blind injection의 공격 가능성을 체크해본다.

if(1=1, sleep(2),2)
만약 공격이 된다면 슬립이 걸려 2초가 멈췄다 동작할 것이다.




(인젝션)





(실행결과)



실행결과 2초가 멈추는 것을 알 수 있었다.

즉 if문을 사용해 공격할 여지를 확인했다.

if(조건,참,거짓) -> 조건문에 내가 확인하고 싶은 쿼리를 사용할 것이고 참에는 sleep을 걸어줄 것이다.
헌데.! sleep은 시간이 좀 걸리니까 에러기반으로 전향했다.
참 부분에 에러를 유발 시킬 수 있는 문구를 넣는것이다. 
내가 자주 사용하는 에러 유발 문구 cot(0)을 사용할 것이다.
cot(0)은 무한대이므로 에러가 난다.

먼저 길이를 알아보자.!
길이를 알기위한 조건문
length((select authkey from authkey limit 0,1))=길이
사용한 쿼리문
,if(length((select authkey from authkey limit 0,1))=i,cot(0),0)
i를 30부터 45까지 돌려주었다. (30이상으로 참이 나왔고 45 이상으로 거짓이 나왔기 때문)



(길이 확인)




(실행결과)



실행 결과 flag길이는 40글자라는 것을 확인 할 수 있었다.

이제 본격적으로 blind injection에 들어간다. 40글자를 찾을 것이다.
사용한 쿼리
,if(ord(substr((select authkey from authkey limit i,1),1,1))=j,cot(0),0)



(authkey 찾기)



(실행결과)



실행결과 authkey를 찾았고 문제를 해결할 수 있었다.


'WarGame > 500 Project' 카테고리의 다른 글

(17/500) Lord of the BOF - gremlin  (0) 2017.05.05
(16/500) Wargame.kr - ip log table  (0) 2017.04.20
(14/500) Wargame.kr - strcmp  (0) 2017.04.16
(13/500) Wargame.kr - SimpleBoard  (0) 2017.04.16
(12/500) Wargame.kr - tmitter  (0) 2017.04.15


6번째로 푼 문제이다!
사실 이 사이트를 시작하려고 한 이유가 처음 이사이트에 들어와서 아무문제를 클릭한 문제 중 이 문제였는데 엄청 재밌어 보여서 가입하고 풀기 시작했다.!

자바스크립트 우회인줄 알았지만 생각외로 간단하게 풀렸다. :)



(flee button 문제)



문제 시작전 ' 난 저걸 잡을수없어요!' 라고 귀여운?멘트가 나온다.



(문제 스타트)




(문제 페이지)



문제 페이지를 보면 클릭미가 나오고 마우스를 가져가 클릭하려고 해도 저 버튼이
막 날라댕긴다... 클릭을 못한다 ㅜㅜ

관리자 도구를 열어서 확인해보니.. 헉...
스크립트가 난독화 되어있다. 풀면 쉽게 풀 수 있을 듯 보였지만 그보다 내 눈에 가장 먼저 들어온 것은...



(소스코드)



위 빨간색 표시이다..!
클릭미를 누르면 key변수에 ca3e를 담아서 전송한다??

그건 나도 할 수 있는데??
실제로 해보니



(문제 해결)



flag가 실제로 나왔다..!ㅎㅎ

나의 호기심을 자극했던 문제



'WarGame > 500 Project' 카테고리의 다른 글

(8/500) Wargame.kr - fly me to the moon  (0) 2017.04.13
(7/500) Wargame.kr - WTF_CODE  (0) 2017.04.12
(5/500) Wargame.kr - QR Code Puzzle  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06


5번째 푼 문제이다!

QR Code Puzzle이라는 재밌는 이름의 문제이다.



(QR Code Puzzle 문제)



문제 페이지는 다음과 같다.



(문제 페이지)



퍼즐을 클릭하면 실제 옛날에 많이 가지고 놀던 퍼즐처럼 조각이 움직인다.
요리 조리 움직여서 QR 코드를 완성하는건가?.. 싶었지만

개발자 도구에 들어가서 확인해보니 QR코드 원본 이미지가 따로있었다.! (물론 원본 이미지가 있을거란 생각을 하긴했었다.)



(발견)



이 사진을 열어보면



(QR코드 등장)



나는 폰으로 QR코드를 입력하였다.. ㅎㅎ



(폰으로 확인한 모습)



flag가 나온다!


'WarGame > 500 Project' 카테고리의 다른 글

(7/500) Wargame.kr - WTF_CODE  (0) 2017.04.12
(6/500) Wargame.kr - flee button  (0) 2017.04.11
(4/500) CodeShell.kr - dummy 64  (0) 2017.04.10
(3/500) Solve Me - Winter Sleep  (0) 2017.04.06
(2/500) Solve Me - Bad Compare  (0) 2017.04.06



Wechall 이라는 워게임 사이트가 있다.

여기서 여러 문제를 해결하면서 실력을 쌓을 수 있다.

오늘 풀이를 할 문제는 Coding 카테고리의 Training이다.



(Training: Programing 1 선택)



초록색으로 표시된 이유는 내가 한번 풀었기 때문에
초록색으로 표시된 것이다.

들어가보면



(문제화면)



문제를 보면 this link를 들어가서 받은 메세지를 다시 보내라는 뜻이다.

일단 this link에 들어가보자



(메세지)



메세지가 보인다.
이 메세지를 다시 보내라는 것이다.
어디로?

아래 드래그한 주소로!


(솔루션 보낼 곳)


뒤에 the_message부분에 우리가 받은 코드를 입력해서 전송하면 된다.

물론 시간제한이 1.337초 이므로 손으로는 불가능하며
네트워크 통신도 원활해야한다...

먼저 파이썬 챌린지에서 했던 urllib.request를 이용해 접근해보겠다.!




(??..)



url로 접속하니 로그인을 한 후
해당 쿠키로 접속을 해달라고 메세지가 왔다.

즉, 그냥 url만 보내면 안되고
접속했을 때의 쿠키값을 HTTP 헤더에 포함시켜서 보내야하는 것이다.!

와이어샤크로 나의 쿠키값을 확인해보겠다.



(쿠키값 확인)



와이어샤크로
나의 쿠키값을 확인 할 수 있다.

이제 이 값을 포함시켜서 url접속할 것이다.



(쿠키 추가)



쿠키를 추가한 모습이다.
그리고 code에 decode하여 우리가 원하는 문자열을 받았다.



(결과화면)



우리가 보내야할 코드가 잘 전달 되었다 :)

이제~ 이 값을 url 뒤에 붙여서 전송할것이다.



(답 전송)



전송 하고나서 수신된 메세지는 텍스트로 오기때문에 읽기가 힘들다...
그래서
와이어샤크로 확인을 해야한다.
와이어샤크로 확인!


(..?)



정답이다! 하지만,, timeout... 1.63초로..
현재 카페에서 하고있어서 빠르지 못했나보다..

다시 여러번의 시도를 한 후에야 통과했다. ( 네트워크가 빠른 곳에서 하는걸 추천한다.)



(정답화면)



나는 이미 한번 풀었기 때문에
이미 풀었던 문제라고 메세지가 돌아왔다.

문제 해결!


'WarGame > WeChall' 카테고리의 다른 글

WeChall - (Training) Prime Factory  (0) 2017.02.13

+ Recent posts