전체 글 156

[Browser] Browser (1) - Codegate jsworld write-up

Browser (1) - Codegate Jsworld write-upContentsEnvironment configurationVulnability analysisPoCAnalysisExploit Environment configuration일단 문제에서 주어지는 파일은 다음(jsworld,jsarray.cpp)과 같다. jsarray.cpp를 확인해보면, mozilla등의 문자열을 확인할 수 있으며, 이를 통하여 mozilla재단에서 관리하는 SpiderMonkey엔진의 코드를 일부 수정한 것임을 추측할 수 있다.파일도 받았으니 환경설정을 진행해보자. bash에서 아래와 같은 명령어를 입력하면 된다. 일단 의존 패키지부터 다운받아보자.sudo apt-get install python-pip gcc m..

[RCTF] vm ( write - up )

RCTF vmConcept64bit짜리(?) 스택 구현구현된 instruction은 ADD,MUL,DIV,SUB,MOV,JR(JUMP REGITSER),JMP 등등등... Analysisstruct vm { uint64_t *registers[8]; uint64_t *rsp; uint64_t *rbp; uint8_t *pc; uint32_t stackSize; uint32_t stackCheck; };일단 사용하는 구조체는 위와 같다. enum{ OP_ADD = 0, // add OP_SUB, // sub OP_MUL, // mul OP_DIV, // div OP_MOV, // mov OP_JSR, // jump register OP_AND, // bitwise and OP_XOR, // bitwise ..

[DefenitCTF] Variable-machine ( write-up )

DefenitCTF Variable-machineConcept원하는 자료형(int, char, string)의 변수를 Allocate, Delete, Edit, Print, Operate, Concat 할 수 있는 프로그램을 VM으로 구현한 바이너리. Analysis동작 방식 : Code입력 -> (getOpcode -> startVM) 반복 -> 종료 initProgram()__int64 initProgram() { pthread_t newthread; // [rsp+18h] [rbp-8h] ​ setvbuf(stdin, 0LL, 2, 0LL); setvbuf(stdout, 0LL, 2, 0LL); if ( pthread_create(&newthread, 0LL, initGclist, 0LL) ptr ..

[codegate] 7amebox1 ( write-up )

CODEGATE2018 7amebox1일단 요즘 분석능력을 기르기 위해서이기도 하고 일반적인 힙문제도 안나오는거같고 해서 vm문제를 좀 보려고 하는데 많은분들이 추천해주셔서 보게되었다.문제를 구성하는 파일은 총 4개이다._7amebox.py : vm을 구현해둔 python 파일해당 파일에서 *.firm파일을 파싱flag : 플래그mic_check.firm : 바이트코드로 이루어짐vm_original.py : 에물레이터 일단 특징을 보면, 21bit로 구현되어있다. (1byte = 7bit) 그리고 31개의 명령어와 6개의 syscall이 구현되어있다.이제 vm_original에서 핵심 부분을 살펴보자. 먼저, EMU calss의 execute이다.def execute(self): try: while 1:..

[ETC] STRIDE Threat modeling 위협 모델링

Threat modeling(위협 모델링)위협 모델링은 공격자가 지정한 목표에 대한 시스템을 조사한 Threat profile을 만들고, 그 Threat profile을 바탕으로 여러가지 방법론에 따라서 실제 공격을 시행하는 것을 말한다.Threat profile은 시스템의 설계 관점에서 할 수 있는 최대한의 조사를 통해 시스템에 관한 여러가지 정보를 말한다. 이를 통해 보다 정확한 Threat modeling을 수행할 수 있다. '위협' 과 '위험'‘위협’과 ‘위험’을 구분하는 것이 중요하다. 위협은 발생 가능한 나쁜 일이지만, 위험은 위협이 발생할 가능성이다. 예컨데, 건물이 무너질 수는 있지만(위협), 이것이 발생할 가능성(위험)은 (지진 발생이 많은) 샌프란시스코가 (지진 발생이 별로 없는) 스톡..

ETC 2020.02.03

[DIMICTF] keychecker (write - up)

DIMICTF qual keycheckerAnalysisint __cdecl main(int argc, const char **argv, const char **envp) { const char *v3; // rdi ​ if ( argc != 3 ) { printf("%s [mod] [text]\n", *argv, envp); exit(1); } if ( !strcmp(argv[1], "encode") ) { encode(argv[2]); } else if ( !strcmp(argv[1], "decode") ) { v3 = argv[2]; decode(); } return 0; }아주 간단한 프로그램. 인자로 encode를 넘겨주면 뒤의 string을 암호화해준다. decode는 구현안됨 __int64 ..