<보안 study>/CTFs 14

[LineCTF2021] babysandbox

[LINE CTF 2021] babysandbox 메인 화면이다. filename 과 content 를 입력하면 filename.ejs 형태의 파일로 app/views/sandbox 디렉토리에 올라가게 되고 입력한 content 를 ejs 포맷에 맞게 출력 가능하다. app.get("/:sandboxPath/:filename", authMiddleware, (req, res) => { try { res.render(`sandbox/${req.params.sandboxPath}/${req.params.filename}`, { flag, }); ... 핵심부분부터 말하면, 파일을 만들어서 접근을 했을 때 페이지에 인자로 전달된 flag 변수를 읽기만 하면된다. 하지만, 몇 가지 제약조건이 설정되어있어서 이 ..

<보안 study>/CTFs 2022.03.08

[TamilCTF2021] HeyImAB

HeyImAB #Android #ab file 원본WriteUp - https://github.com/goseungduk/CTF_WriteUp/tree/master/Tamil_2021/rev/HeyImAB 안드로이드 백업파일 문제이다. .ab 파일확장자는 처음 보았는데 안드로이드 백업파일이라고 한다. adbextractor 링크 위의 extractor 를 이용하여 안의 파일을 추출할 수 있다. java -jar abp.jar unpack backup.ab res.tar 해당 명령어로 추출을 하면, tar 파일 하나가 나온다. 그 파일안에 아래와 같은 경로의 파일을 살펴보다 플래그를 발견했다. apps\com.example.devpack\r\app_flutter\flutter_assets\kernel_bl..

<보안 study>/CTFs 2021.10.07

[TamilCTF2021] Guesser

Guesser #reversing #DotNet #IL Spy #z3 원본WriteUp - https://github.com/goseungduk/CTF_WriteUp/tree/master/Tamil_2021/rev/Guesser 처음에 바이너리를 IDA로 열어보니 .Net 바이너리로 인식하길래 바로 IL Spy 툴로 열어보았다. 소스가 매우 정직하게 잘 나오는 것을 확인할 수 있다. Main 함수를 보면 처음에 Login 을 진행하는 것을 알 수 있는데, check 로직은 생각보다 매우 간단하다. 생각보다 어려운 로직이 없어서 실제로 풀때는 눈으로 그냥 보고 풀었지만, 소스 첨부도 해본다. from z3 import * s=Solver() username=[BitVec(&#39;user_%i&#39;%i..

<보안 study>/CTFs 2021.10.07

[TamilCTF2021] digital_play

digital_play #논리회로 #digital 원본WriteUp - https://github.com/goseungduk/CTF_WriteUp/tree/master/Tamil_2021/rev/digital_play misc 에 가까운 문제가 아닐런지...? 어렵지 않아서 장황한 설명은 하지 않는다. 우선 주어진 .dig 파일은 아래의 프로그램에서 열린다. Digital - 논리회로 설계 프로그램 digital.dig 파일을 Digital 프로그램에서 로드하면 위와 같이 나온다. // enc.txt 00110110111111100000011000101 100001000000100000011000010101 001001111110101001110011001011 11111000001010100001101..

<보안 study>/CTFs 2021.10.07

[TamilCTF2021] Fool Me

foolme #z3 #reversing 원본WriteUp - https://github.com/goseungduk/CTF_WriteUp/tree/master/Tamil_2021/rev/foolme 우선 main 함수가 디컴파일 된 모습은 이러한데... sub_5611AE2071A5 함수가 exit(0) 로 통하는 함수이다 보니 분명 다른 로직이 있다고 판단하였고... 어셈블리로 보면, 해당 함수 호출 이후에 추가 로직이 존재했다. 이 부분은 풀면서 적당히 우회 했다. 그리고 이후 로직은 s 변수에 문자열 입력하고, 해당 문자열에 대해서 first, second, final 함수를 통과해야된다. 1. first 함수 first 함수는 처음에 s 값을 받아서 26바이트 문자열을 갖고있는지 확인한다. 그리고 ..

<보안 study>/CTFs 2021.10.07

[Hack.lu 2019] no_risc_no_future

no_risc_no_future #mips #pwn ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/Hack.lu_2019/pwn/no_risc_no_future제목 그대로 risc 형식의 mips 아키텍쳐로 된 바이너리에 대한 pwnable 문제이다. Ghidra로 열어본 바이너리는 이런 모습이다. 64바이트짜리 배열에 256바이트를 입력할 수 있게 해준다. 그리고 입력한 버퍼를 출력시켜준다. 그리고 Canary 외에는 별다른 보호기법도 걸려있지 않는 것으로 보아, buffer overflow 이후, 쉘코드를 이용하여 쉘을 얻어내면 될 것 같다. 대강 순서는 이러하다. 1. puts 함수를 이용해서 canary를 leak 2...

<보안 study>/CTFs 2019.12.21

[SECCON 2019] Follow me

follow_me #reversing ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/SECCON_2019/rev/follow_me 우리의 숙제는 계산기 프로그램에서 실행했던 기록 중에서도 branch 명령에 대한 기록을 보고, 어떤 공식을 프로그램에 전달했는지 찾는 것이다. 파일은 총 3개, 계산기 프로그램 바이너리와 branch명령에 대한 기록, 그리고 branch명령을 따라가는 추적프로그램에 대한 소스코드를 준다. 필자는 앞의 계산기 프로그램 바이너리와 branch 명령에 대한 기록만 보고 문제를 풀었다. main 함수이다. 바이너리의 사용법과 실제로 계산을 해주는 함수가 들어있다. calculate 함수의 switch문 ..

<보안 study>/CTFs 2019.12.21

[SECCON 2019] Coffee_break

COFFEE_BREAK #crypto #reversing※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/SECCON_2019/crypto/coffee_break 간단히 풀 수 있었던 크립토(?) 라기엔 리버싱에 가까운 문제였다. The program "encrypt.py" gets one string argument and outputs ciphertext. Example: $ python encrypt.py "test_text" gYYpbhlXwuM59PtV1qctnQ== The following text is ciphertext with "encrypt.py". FyRyZNBO2MG6ncd3hEkC/yeYKUseI/CxYoZ..

<보안 study>/CTFs 2019.12.21

[TokyoWesterns 2019] EASY_CRACK_ME

EASY_CRACK_ME #z3 #reversing ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/TokyoWesterns_2019/reverse/easy_crack_me 단순한 Crack Me 유형의 문제입니다. 인자로 플래그를 받는데, 맞지않는 값을 넣으면 incorrect를 출력시켜줍니다. 바이너리를 뜯어보면 알겠지만 플래그 인증과정이 총 8개정도 있고, 모든 조건에 다 맞아야 정확한 플래그로 인지합니다. 첫 번째 조건 플래그길이는 총 39바이트여야하며, TWCTF{ 로 시작하여 } 로 끝나야합니다. 두 번째 조건 우선 0123456789abcdef 의 표본이 될 문자열이 주어집니다. 그리고 반복문으로 순회하면서 인자로 ..

<보안 study>/CTFs 2019.12.21

[CodeGate2017] Goversing

코드게이트 2017 문제인 것 같다. Go 로 만든 elf 파일에서 플래그를 찾는 것이 목적. Go 에 대한 이해가 너무 필요했다. Go 는 스택 기반 호출을 하는 언어로 함수를 호출할 때, 레지스터나 push를 쓰지 않고 스택에 데이터를 삽입 후 원하는 인자들을 그 스택 그대로 가져와서 함수호출 후에 쓴다. 또한 리턴 값을 저장하는데에 rax를 쓰지도 않는다. 확실한건 x86_64 calling convention 과는 다르다는 것이다. 이러한 부분들 때문에 IDA가 있어도 일일히 어셈블리를 보는 수 밖에 없었다. (헥스레이가 깨짐) 우선 Go에서 함수가 어떻게 동작하는지를 조금 살펴보았다. 위 사진은 Go로 작성한 소스코드, 아래는 그 소스에 대한 어셈블리 코드이다. 1번과 2번으로 소스를 나눠서 볼..

<보안 study>/CTFs 2019.07.29
반응형