문제에 접속해보면 QR코드로 추정되는 사진이 퍼즐게임과 같은 조각으로 나뉜 것을 볼 수 있다. 예전에 주니버네이버에서 해봤을 법한 게임이다. 소스를 보면 QR코드를 어떻게 불러왔는지 알 수 있다. /**/ 에 jQuery의 attr() 함수를 통해 QR 코드를 불러옴을 확인할 수 있다. QR코드의 주소는 URL Encoding 형태로 인코딩되어 있는데 이것을 다시 디코드해보면 QR코드의 경로가 './img/qr.png' 인 것을 알 수 있다. http://wargame.kr:8080/qr_code_puzzle/img/qr.png QR코드 리더기로 불러오면 'http://wargame.kr:8080/qr_code_puzzle/Give_M3_th7_F1aG.php' 로 이동한다. 그리고 플래그를 얻을 수 있다.
해당 문제에 접속해보면 이 문제도 소스를 제공해주는 것을 볼 수 있다. 소스를 보자. SQL 문을 통해서 DB에 있는 값을 검색한다. 취약점은 md5() 함수에서 일어난다. md5()의 raw_input 인자를 true로 넘겨준다면, 16진수의 raw한 값들을 넘겨주는데 만약 0x27 같은 값이 있을 경우 해당 SQL 쿼리에 영향을 줄 수 있다. (참고로 0x27은 char형으로 ' 이다. ) 스크립트를 사용하여 쿼리에 영향을 줄 수 있는 정의역을 구할 수 있다. 따라서, 저 값을 이용해서 password 를 검색한다면 admin 의 권한을 가져올 수 있다. (129581926211651571912466741651878684928) 해당 정의역을 찾는 소스는 다음을 참고하면 된다. ( http://cvk..
해당 문제에 접속해보면 소스를 제공해준다. 소스를 한 번 보자. 알파벳으로만 이루어진 v1 값을 받고, digits로만 된 v2 값을 받고 loose compare 방식으로 두 값을 md5 해시화한 값을 비교한다. PHP의 loose compare 는 굉장히 위험한 코드 중 하나라고 평가받고 있다. 왜냐하면 다음과 같은 현상이 발생하기 때문. md5의 공역은 16진수로된 문자열이다. 따라서 앞에 0e~~ 로 시작하는 정의역을 찾는다면, 우리는 loose compare를 통해서 해당 분기문을 우회할 수 있다. Loose compare는 외국의 여러 해커들이 찾아놓았다. (https://news.ycombinator.com/item?id=9484757) $ echo -n 240610708 | md5sum 0..
해당 문제를 접속하면 다음과 같은 alert가 계속 뜬다. 그래서 Browser의 설정 탭에 들어가서 Javascript를 비허용한 상태에서 Exploit을 진행하면 더 빠르게 문제를 풀 수 있다. Challenge Analyse일단 hint가 swp 이므로 .index.php.swp 가 있을 것으로 예상된다. .index.php.swp 에 접속하면 스왑 파일을 다운 받을 수 있는데, 이 스왑 파일에는 index.php 소스의 일부분이 있다. ( $vim -r .index.php.swp 으로 복구해보려고 했지만, 설정도 약간 해줘야되는 부분이 있어서 그냥 제공된 소스만 보기로 했다.) $q = mysql_query("select * from member where no=".$_GET['no']); 위와 ..
문제 사이트에 접속해보면 아래와 같은 화면이 나온다. HTML 소스를 보면 body에 background-image로 pattern.png 를 지정하고 있음을 알 수 있다. pattern.png 를 다운받았지만 어떻게 접근해야 할지 감이 잡히질 않았다. 그래서 그냥 가장 간단하게 파일의 내용을 볼 수 있는 헥스 에디터를 사용하여 pattern.png 파일을 열어보았다. 보통의 PNG 파일과는 다르게 readable한 문자열이 있다. 뭔지 몰라서 tExtSoftware.Japng 를 구글에 검색해보았다. 맨 위에 나온 툴을 다운 받아서 java -jar 명령어를 이용하여 실행했다. 오 png 파일 두개가 나왔다. 근데 뭔가 QR 코드같이 생겨서 포토샵에 넣고 합성해보았더니 QR 코드가 맞았다. 그리고 QR..
여러 테스트를 해보니, 검색 기능에서 SQL Injection 취약점이 발견되었는데, MSSQL이라서 잘 다루기가 힘들고 세미콜론이 필터링되어 있는 것 같아서 공략하기가 쉽지 않다. 검색 기능에서 일어나는 베네듀의 SQL Injection 취약점은 2번 제보했지만, 모두 거절당해서ㅠㅠㅠ
라이트업이 아닌 그냥 풀면서 작성하는 글- H3X0R 소속 ch4n3 이번 문제는 order by 를 이용해서 SQL Injection을 진행하는 문제인데, 생각보다 빨리 해결할 수 있을 것 같다. 예전에 누군가가 order by로 칼럼의 개수를 알아낼 수 있다고 했었다. order by [n]; # 단 n != 0이 구문에서 에러가 난다면 테이블에 있는 칼럼의 개수는 n-1개인 것을 유추할 수 있다는 것이다. 이 문제에서는 3개의 칼럼이 있었다. 그 외에는 또 다른 정보를 얻을 수 없었다. 하지만, 갑자기 뇌리에 박혀 블로그에 까먹지 않으려고 포스팅을 하게 되었다. 서브쿼리를 이용해서 Blind SQL Injection을 수행하는 것이다. order by 0에서는 오류가 나기 때문에 충분히 가능하다고 ..
Web Chatting write up- H3X0R 팀 소속 ch4n3 - 이 문제는 ajax? 그런 쪽만 알아도 충분히 풀 수 있는 문제였던 것 같다. 내 워게임에도 SQL Injection은 아니지만, 비슷한 문제가 있었는데,,ㅎㅎ 이 문제 풀이를 아직 못 푼 분들께 알려드리자면, 크롬에서 F12를 누르고 Network 탭에서 어떤 네트워크 연결이 생기는지 보면 쉽게 풀 수 있을 것같다. 그리고 무엇보다 스크립트가 필요하다. ip log table 문제를 이미 풀어서 그런지 술술 풀렸던 것 같다. https://github.com/chaneyoon/wargames/blob/master/wargame.kr/webChatting.py 이번 코드는 파이썬 코딩 컨벤션을 지키려고 정말 많이 노력했던 것 같음..
ip log table write upH3X0R 팀 소속 ch4n3 Blind SQL Injection 푸는데 파이썬 코드 100줄 이상인 적은 처음인데,,, 진짜로 워겜닷케알을 풀면서 느끼는 건데, 어쩜 이렇게 문제를 잘 내실까 싶다. 워게임을 운영하고, 한 번 CTF를 개최해본 사람으로써 이렇게 창의적이고, 더럽지 않은 문제는 wargame.kr 이 최고인 것 같다. https://github.com/chaneyoon/wargames/blob/master/wargame.kr/ipLogTable.py 이건 내가 풀면서 작성한 파이썬 코드이다. 보면 알겠지만, 굉장히 드럽다ㅠㅠ 개발쪽은 계속 고쳐나가는 걸로 하고, 이번 문제를 어떻게 풀었는지 설명하겠다. 푸신 문들은 어떻게 느끼셨을지 모르겠는데, 이 문..