wargame.kr WTF_CODE write-up

문제에 처음 접속해보면 "이게 진짜 소스코드라고? 아무것도 안보인다고!!" 라고 쓰여있는 문구를 볼 수 있다. 한 5년 전쯤? 그 때 워게임들에서 Whitespace, Brainfuck 과 같은 괴랄한 프로그래밍 언어들을 사용하는 문제들이 우후죽순 생겨났는데, 비슷한 류의 문제이다. 이 문제는 Whitespace로 코딩되어 있기 때문에 아래 사진처럼 메모장으로 열었을 때 아무 것도 보이지 않는다. 메모장에 있는 내용을 전체선택하여 whitespace interpreter에 붙여넣기 하고 실행하면 플래그를 얻을 수 있다. https://naokikp.github.io/wsi/whitespace.html

SuSec CTF 2020 'Roll dice' write-up

CTF 도중에는 어떻게 푸는지 정말 감을 못잡아서 결국엔 끝날 때까지 못풀었는데, CTF가 끝나고 Defenit 팀에서 어떻게 푸는 문제인지 알려주어서 나중에야 풀 수 있었다. 해당 문제에서는 소스를 제공해주는데, Python 이기도 하고 무엇보다 eval() 을 통해서 사용자로부터 입력된 표현식을 실행시키는 방식이기 때문에 Python Jail임을 확신했다. I couldn't solve this challenge during the CTF, but I resolved later with the help of the Defenit team. Thanks to team Defenit. I was sure that it is a sort of 'Python Jail' because of eval() fun..

SuSec CTF write-up

Sorry for my bad English foreigners lol :0Webweb0 We can get the source which use nodejs express engine. There's some mechanism which compare 'first' and 'second' in post method. As send Array in 'first' and 'second', you can get the flag! Microservice We can access to very simple web service. You can Login, get Flag, and change the Theme of the service. After many tries in JWT Token Attack, I f..

wargame.kr QR CODE PUZZLE write-up

문제에 접속해보면 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' 로 이동한다. 그리고 플래그를 얻을 수 있다.

b01lers CTF, Scrambled write-up

약간 게싱?이기도 하면서 스크립트 짜면 쉽게 풀 수 있었던 문제같다. 문제 사이트로 들어가면 다음과 같은 화면을 볼 수 있다. [*] url : http://web.ctf.b01lers.com:1002/ 이렇게 캡처 사진만 보면 별게 없어보이지만, html 소스를 보면 더 별게 없다. 이게 끝이다. 보통 이런 경우 robots.txt 에 숨겨진 디렉터리가 존재하거나, Cookie에 무언가 값을 넣어두거나, .git, index.php~ 등의 소스유출을 의도하는게 대부분이다. 이 문제에서는 쿠키에 이상한 값을 넣어놓았다. 쿠키를 보면 알 수 없는 값들이 존재한다. 뭔지 영문을 알 수가 없는 이 값 때문에 '게싱'으로 푸는 문제임을 직감하고 그냥 넘어가려고 했지만, 이런 ㅈ밥문제는 내가 뚝배기를 깨버려야 한..

CONFidence CTF 2020 Teaser write-up

Web Cat web XSS 풀자마자 왜 이런 벡터를 생각을 못했는지 자책을 하기도 했던 문제이긴 하지만, 풀이 자체는 깔끔하고 공격 연계 벡터도 내가 생각도 못한 부분에서 발생해서 나름 신기한 문제였다. function getNewCats(kind) { $.getJSON('http://catweb.zajebistyc.tf/cats?kind=' + kind, function(data) { if (data.status != 'ok') { return; } $('#cats_container').empty(); cats = data.content; cats.forEach(function(cat) { var newDiv = document.createElement('div'); newDiv.innerHTML =..

websec.fr level19 write-up

Captcha가 있길래 이 문제를 풀기 위해서 머신러닝으로 저기에 있는 글자를 알아와야하나 생각이 들어서 지금까지 굳이 풀려고 하지 않으려고 했지만, 오늘 이 문제 소스를 보니까 꽤 쉬운 것 같아서 write-up을 작성해보려고 한다. 참고로 아직 풀진 못했다. 로컬에서는 분명히 풀리는데 서버에서는 안풀리는 문제다. random.php의 소스이다. 여기서 microtime(true)로 seed를 설정하는데 여기서 취약점이 발생한다. srand() 함수를 통해 같은 값을 설정할 경우 rand() 의 값이 똑같아진다. 다음 코드를 예를 들어보면 이해하기 쉽다. #!/usr/bin/env php

websec.fr level13 write-up

고등학교 1학년 땐가 페이스북에서 Sakuya Izayoi님께서 "PHP에서 성능 개선을 위한 유용한 팁"이라는 제목으로 어떤 글을 하나 공유하신 적이 있었다. 여러가지 팁들이 있었지만, 가장 인상깊었던 팁 중 하나는 반복문의 조건에 함수가 들어가 있으면 그 함수는 반복문이 한 번 실행될 때마다 호출되기 때문에 성능 향상을 위해서라면 조건문에는 함수를 넣지 말라는 것이었다. 그게 사실 그냥 넘길 만한 사소한 것이어서 나에게는 적쟎은 충격이었기 때문에 아직까지도 반복문을 사용할 때면 머릿 속에 또렷이 그 문장이 새겨진다.( * 링크 : http://www.qdata.co.kr/bo/bbs/board.php?bo_table=pht&wr_id=77) 이 때 이후로 해당사항을 지키면서 코딩을 해왔는데 이걸 여기..

Lord of SQL Injection alien write-up

Exploit point #1 해당 문제에서는 두 가지의 쿼리의 문법적인 요소를 모두 만족해야 한다. 주석을 이용해서 이 문제의 SQL 문법적 조건을 완성시켰다. query : select id from prob_alien where no='#'#' \nunion select 0x61646D696E# query2 : select id from prob_alien where no=''#'#' \nunion select 0x61646D696E#' 주석 이후의 쿼리에서는 개행문자(\n)를 통해 escape 할 수 있다는 점을 이용해서 위와 같이 우회할 수 있다. Exploit point #2 이 부분을 보면 논리적으로 말이 되지 않는 것 같지만 timestamp나 random 같이 event에 따라 결과값을 ..

MySQL에서의 Error Based Injection에 대한 간단한 고찰

MySQL에서 가용한 Error Based Attack은 크게 두 분류로 나눌 수 있다. 첫번째는 GROUP BY, POLYGON, EXP, XPATH와 같은 기능을 사용하여 에러메시지에서 쿼리가 실행된 결과값을 extract하는 direct한 방식이고, 두번째는 MySQL의 조건에 따라 무조건 에러가 발생하게 하는 indirect한 방식이다. Direct 방식은 쿼리 한 번으로 특정한 값을 바로 extract할 수 있다는 점이 강력하나, MySQL Server의 버전과 웹 서비스에서의 SQL 에러 출력 유무에 따라 실행 가능 여부가 달라지기 때문에 범용성이 떨어진다는 단점이 있다. 이와 달리 Indirect 방식은 바로 값을 extract 할 수는 없지만 범용성이 뛰어나다는 장점이 있다. 이 글에서는 ..