분류 전체보기 205

Stack1

This level looks at the concept of modifying variables to specific values in the program, and how the variables are laid out in memory. This level is at /opt/protostar/bin/stack1 Hints If you are unfamiliar with the hexadecimal being displayed, “man ascii” is your friend. Protostar is little endian Key Point 1. 문제를 푸는 것 보다. 변수에 저장되어있는 위치를 알아내는것이 키포인트 2. 파이썬 백트릭 사용하여 매개변수 넣는법을 알아야함. 3. 패턴으로 파악시 패..

[GCC] 컴파일시 보호기법 해재 플래그

# gcc -z execstack -o test test.c // 컴파일 시 nx 해체 # sysctl-w kernel.exec-shield=0 // nx 해체 # sysctl-w kernel.exec-shield=1 // nx 설정 # gcc -fno-stack-protector -o test test.c // ssp 해체 # gcc -mpreferred-stack-boundary=2 // dummy 값 고정 # sysctl -w kernel.randomize_va_space=0 // aslr 해체 # sysctl -w kernel.randomize_va_space=1 // stack aslr 설정 # sysctl -w kernel.randomize_va_space=2 // stack, heap asl..

Debugger/GDB 2019.12.28

[GDB] 사용법, 명령어 정리

컴파일러 디버깅 옵션 gcc -g -W -Wall -o [실행파일] [C파일] 소스 수준의 디버깅을 위한 정보를 실행파일에 포함시킨다. 디버깅 관련 리눅스 기본 명령어 file : 파일 정보 -> not stripped 출력 시 symbol을 볼 수 있다. strings : 문자열 정보 nm -D : 동적으로 남아 있는 정보 -> 프로그램이 사용하는 함수 출력(정적 라이브러리만 해당) objdump -d : 덤프따기 gdb : 디버깅 GDB 명령어 (gdb 실행 후 사용하는 명령어들) 1. 기본 설정 layout asm : 어셈블리 정보창 출력 layout reg : 레지스터 정보창 출력 set disassembly-flavor intel : 인텔 아키텍쳐로 설정 2. 프로그램 실행 r : 실행(run)..

Debugger/GDB 2019.12.28

Whitehorse

This is Software Revision 01. The firmware has been updated to connect with the new hardware security module. We have removed the function to unlock the door from the LockIT Pro firmware. - 분기흐름을 바꾸어 Access Granted 출력을 했지만 정답X - 단지 출력일뿐 unlock 화면이 안나옴... - ret를 이용해 Access Granted 출력으로 분기흐름을 바꾸면 그 이후 ret 실행시 sp위치가 NULL 영역에 빠지기 때문에 정상적인 값을 리턴하지 못함 어렵네....모르겠다...

Reykjavik

Key Point 1. 코드를 인크립트로 인해 볼 수 없음, Current Instruction을 보고 풀어야 함 2. 어떤 부분을 분석해야할지 포인트를 잘 잡아야함. 3. 내 입력 값이 어떻게 영향을 줄 수 있는가 ? 4. 시스템은 리틀엔디안이니까 디스어셈블러에 보이는 것과 반대로 입력하자. 문제 풀이 스포를 자제하기 위해 흰글씨 처리로 가렸습니다. 시작부터 끝까지 드래그 해주세요 시작 값 입력 후 pop sr ret add #0x6, sp : sp+0x6은 내가 입력한 값 첫번쨰 바이트에 위치임 cmp #0x70ab, -0x24(r4) : -0x24(r4) 또한 내가 입력한 첫번째 바이트 위치를 가리킴 (이부분이 핵심이다.) jnz $+0xc : 0xc로 분기되면 프로그램이 그냥 종료된다. ? pus..

[ARM Aseembly basics Part 1 to 7] - v1.0

WritingShellcode 부터 바로 따라하려다 명령어에 막혀서 Basics를 다시 됨. 쉘코드 직접짜는 것도 빡센 작업... 기초부분도 다시 볼게 너무 많으며 x86과 다른 점을 유심히 봐야겠다. LDR과 STR - LDR과 STR (Source와 Destination의 위치가 반대임) ldr r2, [r0] 메모리 r0에서 레지스터 r2로 값 불러오기 str r2, [r1] 레지스터 r2의 값을 메모리 r1에 저장하기 - ARM은 사용되는 모드에 따라 실제 PC의 유효주소가 다름.(항상 다음 명령어 위치를 가리키는 x86과 다른 점) ldr r0, [pc, #12] ->여기서 사용되는 pc의 실제 유효주소는 현재 위치에서 다다음 명령어가 유효주소임 유효주소부터 오프셋+12를 더한 값이 [pc, #..

기본개념 2019.12.25

Cusco

-0x4(r4)에 0x00 값이 들어가면 안됨. 이후 복구 할 수 있는 방안이 없어보임 -0x4(r4) == 0x43e8 = 0x00 : 이 값이 0이면 결국 JZ분기에 의해 실패로 분기된다. 1. mov.b -0x4(r4), r15 로 인해 r15의 첫번째 바이트는 널바이트가 됨 cf) 7d00 -> 0000 사용자 값으로 인해 두번째 바이트가 영향을 받을 수 있는지 찾아보자. 2. call #0x4542 : 호출 뒤에 r15의 값 7dee에서 7d00으로 변환됨 3. sxt r15 1111 => 0011 0000 => 0000 1100 => 0000 0011 => 0011 0110 => 0010 1001 => 0001 1010 => 0001 => 모르겠다!!!!!!!!!!!!! Write up 보고 ..