Security/System Exploit
[메모리 보호 기법] PIE
[메모리 보호 기법] PIE
2017.07.16symbol 없을 때나 PIE가 걸려있을 때 디버깅`` Entry point + offset``으로 bp 걸면 되는데, offset은 IDA로 알아내고,Entry point는 0x00에 bp걸고 실행한 다음 첫 번째 `` call``에서 리턴되는 값( ``bash $rax`` )이 Enrty point또는 그냥 `` info file`` Entry point == `` start`` 함수의 시작 지점`` start``는 첫 번째 `` arg``로 `` main``의 func ptr을 넘기면서 `` __libc_start_main``을 호출하므로, `` call`` 직전에 넘어가는 `` arg``가 `` main``이다. Position-Independent Executables바이너리에 PIE를 설정하려..
[메모리 보호 기법] RELRO
[메모리 보호 기법] RELRO
2017.07.15RELocation Read-Only!!! ``bash readelf -S`` 결과가 `` W``권한이 있는 것으로 나오더라도 실제로 해보면 fault가 발생하므로 주의. Partial-RELROdefault 옵션이며, `` .ctors(.init_array), .dtors(.fini_array), .jcr, .dynamic`` section이 Read-Only 상태가 된다.`` .got``에 `` W`` 권한이 있기 때문에 GOT Overwrite가 가능하다.```.got.plt : 0x601000 ./p_RELRO 601028WRITE : BBBB(0x601028)```-Wl,-z,norelroFull-RELRO컴파일 시 Full-RELRO 옵션을 주면 `` .got`` section도 추가로 Rea..
[메모리 보호기법] ASLR, FORTIFY_SOURCE
[메모리 보호기법] ASLR, FORTIFY_SOURCE
2017.07.13ASLR : Address Space Layout Randomization프로세스의 가상 주소공간에 heap, stack, libc( shared library's plt ) 등이 mapping될 때 그 위치를 프로그램 실행 시 마다 랜덤하게 변경하는 기법.windows는 vista 이상, linux는 kernel 2.6.12 이상에서 적용. exploit``c fork()``하는 경우 parent의 메모리를 그대로 가져오기 때문에 ASLR이 적용되지 않는다.서버 프로그램을 재시작하는 경우 ASLR이 적용되어 재시작하기 전과 mapping addr이 달라지게 되므로 주의. random stack offset만 적용되어 있고 shared library에는 적용되지 않는다면 쉽게 RTL할 수 있으며, sha..
[메모리 보호 기법] SSP +Canary (prologue) / DEP
[메모리 보호 기법] SSP +Canary (prologue) / DEP
2017.07.11SSP : Stack Smashing Protector ( link )로컬 변수 위치 재배치로컬 변수 전에 포인터 배치stack canary 삽입 disable컴파일 옵션에 다음을 지정한다.```bash-fno-stack-protector``` stack boundary (정렬) 설정 컴파일 옵션```bash-mpreferred-stack-boundary=x````` x``의 기본 값은 4이고, 일반적으로 2를 준다. stack boundary는 `` 2^x``로 설정된다.e.g., 기본 값은 4이므로 기본 stack boundary는 `` 2^4=16`` Byte.`` x == 2``이면 stack boundary는 `` 2^2=4`` Byte. CanaryPrologue 직후 `` fs`` 등 seg..
BOF, Buffer OverFlow ( local exploit )
BOF, Buffer OverFlow ( local exploit )
2016.11.10이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
FSB, Format String Attack/Bug
FSB, Format String Attack/Bug
2016.10.23#1 %08x / n$``c %x``보다 ``c %08x``를 사용하는 편이 보기도 좋고, 출력 문자 개수 맞추기도 편하다.``c %hn`` 이전에 선행 출력 문자 개수를 만들 때도 ``c %*x || %*d``를 사용한다. + 특정 위치 데이터를 출력하려면 ``c n$`` 이용한다. #2 %hn``c %n``이 작용하는 순간 그 위치 포함 +4 bytes가 ``c 0``으로 초기화 되면서 값이 써진다. 그래서 ``c %n``으로 쓰려면 하위주소 부터 쓰고 상위주소를 써야 이후에 쓰는 ``c %n``이 이전에 쓴 하위 2 bytes 값을 덮어 쓰지 않는다.그러나 이렇게 하위주소 부터 쓰고 상위주소를 써도, 4 bytes를 잡고 쓰게 되므로 다음 2 bytes를 덮어 써서 그 부분의 데이터가 손실된다.따라..
System [ Exploit ]
System [ Exploit ]
2016.09.03이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.