TOOR

· TOOR
Format String Bug 개발자의 실수로 printf(buf) 이렇게 사용했을 때 입력 값을 포맷 스트링으로 넣으면 입력값을 문자로 취급하는게 아닌, 서식문자로 취급하여 취약점이 일어난다. #include int main(){ char str[0x10]; scanf("%s", str); printf("올바른 출력: %s\n", str); printf(str); return 0; } printf(str) 에서 포멧스트링 버그가 일어난다. str에 hello%x 를 입력하면 printf(str) = printf("Hello%x") 와 같은 동작을 한다. printf 함수는 가변 함수로 인자의 개수는 포맷 문자 개수로 결정된다. 포멧 스트링을 사용하는 대표적인 함수는 다음과 같은데 printf, spr..
· TOOR
RELocation Read-Only 메모리 보호 기법의 일종이다. What is RELRO 바이너리의 symbol 및 got 등에 보호기법을 거는 것을 말한다. RELRO 는 3가지가 있다. No RELRO, Partial RELRO, Full RELRO 취약한 순서대로 이다. Lazy Binding 를 하기 위해서는 프로그램이 실행되는 도중 GOT 에 라이브러리 함수의 주소를 덮어써야 한다. 즉, GOT에 쓰기 권한이 있어야 한다. No RELRO Partial RELRO Full RELRO 컴파일 방식 gcc -WI,-z,norlro gcc -Wl,-z,relro gcc -Wl,-z,relro, -z,now D.S에 BIND_NOW 포함 여부 X X O D.S에 JMPREL 포함 여부 O O X D..
· TOOR
PIE 에 대해서 얘기 하기 전에 PIC 에 대한 이해가 선행될 필요가 있다. What is PIC? Position Independent Code : PIC 위치 독립 코드 이 자체로는 보호 기술은 아니나 PIE를 이해하기 위해서 필요하다. PIC는 공유 라이브러리에 적용되는 옵션으로 공유 라이브러리 내 심볼들이 어느 주소에 로드되더라도 동작하는 코드이다. 주 기억 장치의 어딘가에 배치되어 절대 주소와 관계없이 모든 메모리 주소에서 수정없이 실행되는 기계 코드이다. 일반적으로 공유 라이브러리에서 사용되며, 동일한 라이브러리 코드는 각 프로그램의 메모리 영역에 로드 된다. 각 프로세서들은 PIC를 서로 다른 주소에서 실행할 수 있으며, 실행 시 재배치가 필요 없다. 공유 라이브러리를 만들 때 -fPIC ..
· TOOR
SROP 는 sigreturn 시스템 콜을 이용하여 레지스터에 원하는 값을 저장할 수 있다. 해당 기법을 이용하여 원하는 시스템 함수를 호출할 수 있다. Signal signal은 프로세스에게 이벤트가 발생했음을 알린다. signal은 다른 프로세스에게 시그널을 전송 할 수 있다. signal은 원시적인 형태의 IPC(interprocess communication) 로 사용 할 수 있다. signal은 자기 자신에게 시그널을 보낼수도 있다. signal은 일반적으로 커널이 송신하며, 다음과 같은 이벤트 종류가 있다. 하드웨어 예외가 발생한 경우 사용자가 시그널을 발생시키는 터미널 특수 문자 중 하나를 입력한 경우 Interrupt character ( Control + c) Suspend charact..
· TOOR
실행 바이너리를 실행하면 정수를 입력할 수 있고 여기서 integer overflow 가 발생한다. 그 이후에 comment 를 입력할 수 있는데 그냥 일반적인 입력에서는 ret 를 조작할 수 없다. 그래서 -2147483648 를 입력해주면 이후 comment 를 입력하는 부분에서 sub 1 을 해줘서 양수로 바뀐다. 이후는 그냥 rop 하면 된다. gef➤ disass main Dump of assembler code for function main: 0x00000000004012ad :endbr64 0x00000000004012b1 :push rbp 0x00000000004012b2 :mov rbp,rsp 0x00000000004012b5 :sub rsp,0x70 0x00000000004012b9 ..
· TOOR
rtl, rtl chaining, rop 는 거의 비슷하다. chaining 되는 함수의 종류에 따라 다른 것. What is RTL Chaining system(”/bin/sh”)을 호출하는 것이 최종 목표라면 system(”/bin/sh”)을 호출하기 위해 system과 “/bin/sh”가 필요함 RTL에서는 system과 “/bin/sh”을 정적으로 찾았지만 system과 “/bin/sh”을 모를 경우 “/bin/sh”을 프로그램이 싫애되는 동안 적어주고 system의 주소를 알아내야한다. 이때는 한번의 RTL로 쉘을 따기 힘들기 때문에 RTL을 연계하여 프로그램을 지속적으로 흐르게 해야한다. x86 rtl RTL에서 ret부분에 다음 함수의 주소를 넣어주면 된다. 하지만 pop ret; 과 같은 ..
· TOOR
One Gadget 이란 해당 Gadget 하나만을 이용하여 Shell 을 획득 할 수 있는 Gadget One Gadget은 라이브러리 파일 내에서 “/bin/sh”을 실행하는 Gadget이다. One Gadget을 사용하기 위해서 일부 조건이 만족해야 되는 경우가 있다. 직접 찾기 lmxx@lmxx:~/workplace/adult_canary$ strings -tx libc.2.31.so.6 |grep /bin/sh 1b75aa /bin/sh lmxx@lmxx:~/workplace/adult_canary$ objdump -M intel -d libc.2.31.so.6 | grep -C8 1b75aa 54f90:66 48 0f 6e c1 movq xmm0,rcx 54f95:48 8d 7c 24 0c l..
· TOOR
[TOOR] 8,10 공유 라이브러리 & Lazy Binding & Now Binding What is GOT overwrite //gcc -o test test.c -z execstack -fno-stack-protector -m32 no-pie #include int main()} printf("/bin/sh"); } in gdb plt주소를 알아낸 후 got주소를 확인 원하는 라이브러리 함수의 주소를 알아내고 got주소를 아래 명령어를 통해서 변경 set *got주소 = 바꿀 주소 쉘이 실행되는 것을 확인할 수 있다. 이 글은 옵시디언을 이용해서 작성되었습니다.
lmxx
'TOOR' 카테고리의 글 목록 (3 Page)