분류 전체보기 69

Dreamhack CTF - 2020/09

드림핵에서 처음 CTF 를 열었는데, 6문제중 3문제 풀어서 19위를 했다. 점수 채점 방식이 먼저 푼 사람이 역전당하기 쉽지 않게 되어있어 더 올라간 것 같았다. (퍼블 나온 이후로 일정 시간마다 점수가 내려간다.) 이번 대회에서 분야별로 2문제씩 나왔는데, dreamboard(web) 이랑 Security Mail(reversing), dreamvm(pwn) 이 어려운 역할을 맡았다 생각하고 일찍 포기했는데, dreamboard 제외하고 생각보다 매우 쉬운 문제들이었다. 리버싱 문제는 충분히 날짜에 맞춰 브포했으면 됐었고(무식하게 6자리 다 브포하고있었다..ㅋㅋㅋㅋㅋ) 포너블은 분석하기 힘들어보여서 관뒀는데 보니까 간단한 구조였던 거시다.. 암튼, 매 달마다 열린다는 점에서 매우 기대되고 티어 시스템..

Life 2020.09.29

PWN - 0x00 - 시스템 해킹을 시작하는 길

포너블이 처음이라면, 1년전의 내가 이 글을 봤을때 갈피가 잡히게끔 주저리주저리 해보겠다. CTF에서 포너블 문제는, 결국 서버 쉘을 따내는 것이다. 쉘을 따내는데 쓰이는 기법에 따라 풀이가 달라진다. 기본적으로 쉘을 따려면, system("/bin/sh"); 을 실행해야한다.(exec 등등) 이 구문을 실행하기 위해 수십가지의 방법들이 있고, 그 방법들을 막는 보호기법이 걸려있고, 그 기법을 우회하는 공격이 나오고... 이것들을 많이 아느냐 모르느냐가 실력의 지표라고 생각한다. Stack Frame 아주 기초로 가보자면, 어떤 함수가 끝을 내릴때, 다시 돌아갈 주소가 있어야 돌아갈 수 있다. 중학교때 비유해서 공부했던 기억을 되살려보면, 장보러 가기 위해 메모장에 구매 목록을 써놨는데, 화장실 갔다온 ..

사이버 작전경연대회 2020 예선 Classified Document Writeup

지금 생각해보면 Future Virus도 충분히 풀 수 있었고, Auth Code도 대회 끝난후 팀원이 풀어서 매우 아쉬움이 남는 대회였습니다. 정작 예선 9등으로 본선 가지도 못하지만, 항상 대회 끝나고 이렇게 생각이 나는지 모르겠습니다. 아무튼, Classified Document 문제, 한문제라도 풀라고 출제하신 것만 같은 문제였습니다. p.s. 다음부턴 대규모 대회에선 우분투 18.04 이후 버전에서 테스트하자. 일단, 기드라로 디컴해보았습니다. 그리고, 분석해서 구조체를 정의했습니다. document 구조체는 4바이트의 flag(-1/1) 과 80바이트의 content[10] 가 있습니다. 그리고 처음에 이 문제를 봤을때 menu만 봤는데 Add, Edit, Delete, Show 메뉴가 있길래..

CTF Writeup 2020.09.13

Node JS prototype pollution to RCE / express-fileupload@1.1.6 + EJS

http://blog.p6.is/Real-World-JS-1/ posix님이 발견하신 CVE-2020-7699 취약점이 너무나 흥미로워 보였고, 유익한 내용이기에 적어본다. 실습 환경은 express-fileupload@1.1.6 버전을 사용해야한다. 우선, prototype pollution 에 대해 간단하게 표현해보자면, 아래와 같다. var a = {} var b = {} b.__proto__.pollution = '1' console.log(a.pollution) // '1' 자칫 신경 안써도 될 것 같아 보이지만, express-fileupload@1.1.6 에서 parseNested option이 설정돼있으면 아래와 같은 내부 동작이 이루어진다. // node_modules\express-fi..

Hacking Note/Web 2020.09.07

2019 ROOT CTF Wripteup

I have an eraser qr code를 준다. https://merricx.github.io/qrazybox/ 에서 복구하면 끝난다. FLAG{you_got_the_QRcode} Easy PHP 문자열과 == 비교를 해서 true가 되는 숫자는 0이다. ord('\x00') = 0이므로 널을 넘겨주면 된다. http://sdhsroot.kro.kr/newprob2/?str=%00 FLAG{Nu11_0_5+R!n9} Doctor rand xor_rand 코드를 그대로 복사해서 돌려보면 결과값이 나온다. 5240802525653799023 FLAG{X0R_F4k3_r@^D0m_NuM63r} Hi 직업 3개중 하나 고르고, wizard를 골랐을시 경험치가 100 이상일때 BOF를 준다. 경험치는 사냥 ..

CTF Writeup 2020.09.07

2020 Incognito CTF Writeup

1.Electronic Shock - Reversing A Chromium rendering engine and the Node.js runtime, what a beautiful combination! This challenge was made by CAT-Security from The Catholic University of Korea (CUK) 바이너리(elf) 파일을 실행하면 $PLUGINSDIR 를 압축 푼다. 안에는 아래와 같이 있다. app-64.7z를 풀고 들어가면 Electronic-Shock.exe 파일과 여러 dll, 폴더들이 있는데, electron으로 빌드된 앱이라는 것을 알 수 있다. resources 폴더에 asar 파일이 있는데, 이를 decompile 할 수 있다. $ n..

CTF Writeup 2020.09.07

2019 Layer7 CTF - Login Challenge

1.Login Challenge 이 문제를 새벽 1시 29분에 풀었는데, 상당히 힘들었던 부분이 많은것같다. 우선 내가 아는 것이 별로 없기에 처음에 게싱을 잘 못한것 같고, 힌트 2가 나오자마자 제대로 풀리기 시작하면서 결국 풀었다. 우선 base64로 인코딩한 쿼리를 POST로 보내면서, GET 쿼리에 debug가 있으면 각 쿼리에 따라 debug information을 주석처리해서 페이지에 담아준다. 만약 base64(login)을 보내면 이렇게 뜨는데 힌트2에 index.php 일부분이 공개되었다. https://gist.github.com/debukuk/f4edc592eaf2b89ab4377a9c7fe8724d $input = urldecode($input); $input = base64_dec..

CTF Writeup 2020.09.07