wargame/wargame.kr

wargame.kr - Crypto Crackme Basic

2017. 10. 24. 22:12





C# 프로그램 리버싱인듯 하다. 얼마전 악성코드 분석하다 알게된 툴 중 닷넷 관련 괜찮은 디버거&디컴파일러를 찾았다. 

dnspy 라는 툴인데, 무료임에도 불구하고 유료 버전 툴보다 UI 도 예쁘고 디컴파일도 잘 된다. 게다가 디버깅도 쉽게 된다. 

아마 앞으로 이 툴만 쓰게 될 듯 하다.



제목이 cryto 라서 살짝 겁먹었으나 몇 분 안 걸려서 풀었다. basic 이니까...


dnspy 로 디컴파일 해서 보니 소스코드는 매우 짧았다.




핵심은 저 노란줄이다. name 은 BluSH4G 여야 하고, password 는 myEncrypt 를 거친 후의 암호화된 값과 어떤 값을 비교한다. 


우선 myEncrypt 를 살펴보자.



아주 깔끔하게 암호화 방식, key, iv 를 모두 보여주고 있다. DES 이니 그대로 그냥 코드만 짜면 된다.


암호화된 값과 비교하는 값을 만들어 주는 함수를 살펴보면 아래와 같이 워게임 서버에서 받아온다. n 은 name 이다.




접속해보면 아래와 같은 암호화된 값을 뿌려주는 것을 볼 수 있다. 위에서 확인한 암호화 함수를 이용하여 복호화 함수를 만들어서


아래 값을 복호화 하면 끝인듯 하다.


파이썬 몇줄로 간단하게 샤샤샥



C:\> dec.py

key is ********~~~


풀이 끝~



'wargame > wargame.kr' 카테고리의 다른 글

wargame.kr - Crypto Crackme Basic  (0) 2017.10.24
wargame.kr - web chatting (650p)  (0) 2017.09.13
wargame.kr - Simpleboard(600)  (0) 2017.09.12
wargame.kr - Easy CrackMe(500p)  (1) 2016.01.11
wargame.kr - fly to the moon(500p)  (0) 2016.01.07
wargame.kr - login filtering(450)  (0) 2016.01.06



이번 문제도 SQL인젝션 문제라고 한다. 역시 친절하게도 Simple SQLi (blind) 문제라고 알려준다.


채팅을 웹으로 구현해 놓았는데, 페이지 수가 2개인가 밖에 없어서 취약점은 쉽게 찾을 수 있다.


몇번 입력 후 chatview.php 페이지에 취약점이 존재함을 확인했다.




  /web_chatting/chatview.php?t=1&ni=30215{인젝션}





 그런데~~ 인젝션 중 특정 조건이 되면 전체 쿼리를 다 가져오려고 시도해서 응답이 매우매우 느려진다.

(문제 힌트에서 개발자 관점으로 부하를 줄여보라는 걸 보니 일부러 그렇게 구현해 놓은듯)


잠시 고민하다가, 아래처럼 해결했다.


/web_chatting/chatview.php?t=1&ni=30215-(select+case+when+1=1+then+2+else+1+end)

/web_chatting/chatview.php?t=1&ni=30215-(select+case+when+1=2+then+2+else+1+end)


계산 후 ni 값이 바뀌기 때문에 가져오는 대화 내용이 다르다. 늘 사용하던 스크립트로 샤샥



db 잘 가져오는걸 보니 이제 flag 가 있는 테이블만 찾으면 될 듯 하다.


테스트 해보니 ' 는 막혀있기 때문에 아래처럼 like 구문을 이용했다. mysql, information_schema 가 아닌 테이블(=사용자 테이블),칼럼명 조회




select concat(table_name,char(0x2c),column_name) 


from information_schema.columns 


where table_schema not like 0x696e666f726d6174696f6e5f736368656d61 and 

           table_schema not like 0x6d7973716c and 

           table_name not like 0x636861745f6c6f67 limit 1





해당 테이블을 조회하면 flag 가 들어있었다. 끝.

'wargame > wargame.kr' 카테고리의 다른 글

wargame.kr - Crypto Crackme Basic  (0) 2017.10.24
wargame.kr - web chatting (650p)  (0) 2017.09.13
wargame.kr - Simpleboard(600)  (0) 2017.09.12
wargame.kr - Easy CrackMe(500p)  (1) 2016.01.11
wargame.kr - fly to the moon(500p)  (0) 2016.01.07
wargame.kr - login filtering(450)  (0) 2016.01.06

wargame.kr - Simpleboard(600)

2017. 9. 12. 15:46

한동안 문제 안풀었더니 감이 떨어진듯 하여 문제 풀이 시작.



simpleboard 


simple SQL인젝션 문제. union 인젝션이라고 대놓고 알려주는데, 스크립트가 필요할 거라고 한다.(없이 풀었..)






게시판이다. 소스를 보면 아무런 필터가 없으므로 그냥 union 인젝션이 가능하다.


idx=1 union select 1,2,3,4--




테이블명을 group_concat(table_name) 으로 이것저것 뽑아보다가 admin 관련 테이블이 없는지 확인해보려고 %adm% 을 넣었는데


readme 테이블이 얻어걸림 -_-;





escape_string 함수 때문에 ' 문자가 \' 으로 변경되므로 우회를 위해 0x7217273~~ 와 같은 식으로 써주면 된다.


-1 union select (select group_concat(column_name) from information_schema.columns where table_name like 0x726561646d6525),2,3,4-- 


update 쿼리에서 에러나지 않도록 cookie 체크 하는 부분에도 동일하게 넣어줘야 함. 끝.

 



'wargame > wargame.kr' 카테고리의 다른 글

wargame.kr - Crypto Crackme Basic  (0) 2017.10.24
wargame.kr - web chatting (650p)  (0) 2017.09.13
wargame.kr - Simpleboard(600)  (0) 2017.09.12
wargame.kr - Easy CrackMe(500p)  (1) 2016.01.11
wargame.kr - fly to the moon(500p)  (0) 2016.01.07
wargame.kr - login filtering(450)  (0) 2016.01.06

wargame.kr - Easy CrackMe(500p)

2016. 1. 11. 01:27




이번 문제는 리버싱 문제이다. 쉽다고 써있는걸 보니 쉬운가보다.




해당 바이너리는 별 특징 없는 단순한 MFC바이너리이다. MFC 바이너리는 이벤트드리븐 


방식으로 동작하므로 원하는 버튼에 연결된 함수를 찾아야 한다. 


리소스 해커를 통해 버튼의 리소스 번호를 찾은 뒤 메시지 구조체를 찾으면 쉽게 찾을 수 있다. 



 struct AFX_MSGMAP_ENTRY {

   uint  nMessage;

   uint  nCode;

   uint  nID;            // 리소스ID

   uint  nLastID;       // 리소스ID

   uint_PTR nSig;

   uint_PMSG pfn;         // 핸들러 함수 포인터

 }








주소는 0xf16c0 임을 알 수 있다.



핸들러 함수로 가보면 3가지 정도의 조건문이 나온다.



 _my_b 가 포함되어 있는지 검사



wtoi() 함수 실행 결과가 1114 인지 검사



birth 문자열이 들어있는지 검사



이 세개의 조건이 만족해야만 정답을 전송해 주는 듯 하다. 


IDA로 보아도 마찬가지로 3번의 조건 검사가 존재함을 알 수 있다.



조건에 맞춰서 전송하면 끝~



'wargame > wargame.kr' 카테고리의 다른 글

wargame.kr - Crypto Crackme Basic  (0) 2017.10.24
wargame.kr - web chatting (650p)  (0) 2017.09.13
wargame.kr - Simpleboard(600)  (0) 2017.09.12
wargame.kr - Easy CrackMe(500p)  (1) 2016.01.11
wargame.kr - fly to the moon(500p)  (0) 2016.01.07
wargame.kr - login filtering(450)  (0) 2016.01.06
  1. ㅇㅇ 2016.07.21 01:14

    올리디버거 아닌가요? 함수이름 안뜨던데 어떻게 하신건가용



 이번 문제는 자바스크립트 레이싱? 게임이다. 좌우로 움직이며 31337점까지 올리면 클리어되는 문제인데,


소스 자바스크립트가 난독화 되어 있다. 사실 나는 자바스크립트를 분석하는 정공법이 아니라 아주 쉽게 


편법으로 풀었는데(패킷을 살펴보고 패킷조작) 그래도 푼 뒤에 상세히 분석을 해 보았다.






위와 같이 난독화 되어 있으며, eval로 난독화 소스를 실행시켜 주고 있다. 


주로 악성코드에서 많이 보이는 패턴이다.


어쨌든 이 상태로는 알아볼수가 없기 때문에 난독화 소스부터 deofuscation 해주어야 한다.


간단히  eval 대신 document.write 로 찍어보았다.  




 deofuscation 은 되었으나 여전히 보기 어렵다. 


jsbeautifier.org 를 통해 보기 좋게 indent를 조정해서 보자.



이제 조금 알아 볼 수 있게 생겼다. 코드를 살짝 보면 게임을 시작해서 좌우측벽을 움직이고 점수를 


업데이트 하는 소스코드가 보인다. 첫번째 줄에는 출력할 메시지, 소스코드 등이 섞여 있으므로 


첫번째 헥스코드를 보기 좋게 다시 찍어보자. 파이썬을 이용했다.




키워드를 보니 어느정도 감이 온다. post 방식으로 ajax를 이용하여 점수를 보내는 것이라 


예측이 가능하며, token.php 에서 토큰을 받아온 후 "high-scores.php?token=토큰&score=점수" 


와 같은 형식으로 점수가 날아갈 것이다. 실제로 풀이는 이 점수를 바로 조작하여 보내서 클리어 했다. 


하지만 조금 더 소스코드를 분석해 보도록 하자.




아래쪽을 살펴보면 전형적인 ajax 코드가 보인다. 첫번째 줄을 이용해서 난독화를 해 두었지만 


위의 문자열로 치환한 것을 살펴보면 이 부분이 바로 점수를 전송하는 부분임을 알 수 있다.  




함수를 조금 더 쫓아가 보면 score() 함수는 0x8618x6 변수값을 가져오는 것을 확인할 수 있다. 


결론. 0x8618x6 을 31337 로 미리 변조하거나, 


패킷이 전송될 때 score변수의 값을 31337 로 변조해주면 된다.  










'wargame > wargame.kr' 카테고리의 다른 글

wargame.kr - Crypto Crackme Basic  (0) 2017.10.24
wargame.kr - web chatting (650p)  (0) 2017.09.13
wargame.kr - Simpleboard(600)  (0) 2017.09.12
wargame.kr - Easy CrackMe(500p)  (1) 2016.01.11
wargame.kr - fly to the moon(500p)  (0) 2016.01.07
wargame.kr - login filtering(450)  (0) 2016.01.06






login filtering 문제는 쿼리후 PHP 비교구문에 의해 필터링 되는 것을 우회하는 문제이다. 처음에는 mysql char field 최대값 65535 


오버플로우 취약점을 이용한 문제인 줄 알았으나 점수에 비해 너무 깊게 생각했다. 


해당 문제는 "php 구문은 비교시 대소문자 구분한다는 것", "mysql 은 비교시 대소문자를 구분하지 않는다는 것" 이 2가지로 풀 수


있는 문제였다. id = gueST 등으로 입력하면 쿼리 결과는 참이되어 gueST가 리턴되지만 gueST == guest 는 거짓이 되어 패스워드가


출력된다.




'wargame > wargame.kr' 카테고리의 다른 글

wargame.kr - Crypto Crackme Basic  (0) 2017.10.24
wargame.kr - web chatting (650p)  (0) 2017.09.13
wargame.kr - Simpleboard(600)  (0) 2017.09.12
wargame.kr - Easy CrackMe(500p)  (1) 2016.01.11
wargame.kr - fly to the moon(500p)  (0) 2016.01.07
wargame.kr - login filtering(450)  (0) 2016.01.06

+ Recent posts