Security/System Exploit CHAL
[pwnable.kr] exynos
[pwnable.kr] exynos
2017.10.11이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[pwnable.kr] syscall
[pwnable.kr] syscall
2017.10.09이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[pwnable.kr] brainfuck
[pwnable.kr] brainfuck
2017.10.09이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[pwnable.kr] unlink : normal한 해결책으로 안풀리면, 어셈에 abnormal한 부분이 있나 확인
[pwnable.kr] unlink : normal한 해결책으로 안풀리면, 어셈에 abnormal한 부분이 있나 확인
2017.10.06이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
FC3 evil_wizard - dark_stone : GOT overwrite / ROP ★ ( pop-pop-ret gadget )
FC3 evil_wizard - dark_stone : GOT overwrite / ROP ★ ( pop-pop-ret gadget )
2017.06.22FC3의 마지막 문제.GOT overwrite / RemoteBOF2017/05/08 - [System/Practice] - FC3 dark_eyes - hell_fire : remoteBOF, GOT overwrite, mprotect ★ 와 달리 메모리 초기화 때문에 실행되면서 무조건 fault가 발생해 client로 응답이 돌아오지 않는다.그러나 제대로 리턴해서 exploit하게 되면 exec*하면서 fault가 발생하지 않으니까 위와 같이 /bin/my-pass의 실행 결과를 소켓으로 받아볼 수 있을 듯. ```bash[evil_wizard@Fedora_1stFloor ~]$ python -c 'print "b"*268+"\x60\x65\x74\x00"' | nc localhost 8888dark..
FC3 hell_fire - evil_wizard
FC3 hell_fire - evil_wizard
2017.06.17GOT overwrite / local stdin buffer를 사용할 수 없어 문자열을 삽입할 수는 없지만local이니까 symlink로 메모리에 있는 값을 parameter로 사용할 수 있을 것 같다.파라미터를 삽입할 수 없어 메모리에 있는 값을 활용해야 한다는 점만 제외하면 이전 문제와 비슷하게 해결할 수 있을 듯.그런데, 그냥 삽입하면 연쇄적 ret으로 내려간다 해도 execl Addr을 넣을 때 \x00이 들어가 그 아래가 모두 \x00으로 초기화되기 때문에 메모리에 있던 파라미터도 \x00으로 초기화된다.시도해볼 수 있는 방법은 fake ebp, GOT overwrite 정도인 듯. fake ebpfake ebp도 가능할 것 같아서 일단 fake ebp를 시도했다.``c execl()``을 사..
FC3 dark_eyes - hell_fire : remoteBOF, GOT overwrite, mprotect
FC3 dark_eyes - hell_fire : remoteBOF, GOT overwrite, mprotect
2017.05.08GOT overwrite / Remote BOF / [ stdin buf ] Stack layouttemp1024 Byte 12 Byte saved_sfp4 Byte 여기서부터 아래 1024 사용 가능.단, main의 sfp는 제외.buffer256 Byte 8 Byte sfp ret ... strcpy(buffer, temp)니까 결과적으로 1024만큼 쓸 수 있다.입력을 fgets로 처리한다. fgets로 받는 경우 EOF 또는 개행문자(0x0a)를 입력하지 않는 경우 계속 입력을 대기하기 때문에 끝에 \n을 보내주어야 한다. argv로 받는 경우 공백(0x20)은 " "로 묶어서 받아야 하며 0x00은 받을 수 없지만, fgets는 개행문자와 EOF만 인식하므로 공백이나 0x00이 있어도 상관 없다..
FC3 gate - iron_golem - dark_eyes
FC3 gate - iron_golem - dark_eyes
2017.02.03FC3에 적용된 메모리 보호 기법Stack Dummy : ODown Privileage of bash : ORandom Stack : ORandom Library : XRandom Program Binary Mapped : XASCII Armored Address Space : O mapping address의 첫번째 1Byte가 0x00이라서 library address를 입력하고 나면 이후 parameter 삽입이 불가능하다. phrack의 어떤 문서에서 이렇게 소개되어 ASCII Armor라고 부르는 것 같지만, 요즘 ASCII Armor는 Radix 64를 의미하는 경우가 더 많은 듯.Non-Executable Stack : ONon-Executable Heap : OStack Smashing P..
LOB xavius → death_knight : remote BOF, rawbf
LOB xavius → death_knight : remote BOF, rawbf
2017.01.30xavius - throw me awayremote BOF다. 소켓프로그래밍은 오랜만인데, 그래도 코드가 복잡하지는 않다. 서버 프로그램은 서버에서 돌아가는 거니까, 호스트에서 환경변수 등을 사용할 수는 없지만, 256바이트나 사용할 수 있으니까 그냥 버퍼에 집어넣는게 좋겠다. parent는 while로 계속 돌아가고, child가 recv수행하고 나서 return하므로 child를 사용해 익스플로잇 하게 된다. 근데 recv 직후 close(client_fd) 해서 클라이언트와의 연결이 끊어진다. 따라서 client에 데이터를 전송할 수 없다. 리버스 쉘을 사용하거나, 출력 내용을 저장하도록 해야한다. 리버스 쉘 연결을 대기하도록 쉘코드를 짜기는 귀찮아서 그냥 후자로 진행했다. 주의 )쉘코드가 실행되면..
LOB succubus ~ nightmare → xavius : strcpy / stdin과 fgets
LOB succubus ~ nightmare → xavius : strcpy / stdin과 fgets
2017.01.28succubus - here to stay / strcpystrcpy의 PLT 주소로 리턴해야만 한다. ret이후 4byte를 제외한 공간을 사용할 수 있다.ret+4byte를 제외한 이유는 이전 문제처럼 풀지 않도록 하기 위해서 인 듯. strcpy의 PLT 주소는 0x08048410 PLT-GOT resolve 과정에 문제가 있는게 아니라, main에서 strcpy로 리턴하면서 src와 dest를 내 마음대로 정할 수 있다는게 문제.strcpy의 dest에 retAddr이 있는 곳을 넘겨 수정하면 내가 원하는 곳으로 리턴할 수 있다.(strcpy를 이용하면 FSB처럼 메모리의 어떤 공간에 접근해서 그 부분에 데이터를 쓸 수 있다.)strcpy를 call하고 난 직후 stack의 최상단에 dest, s..
LOB giant ~ zombie_assassin → succubus : ROP
LOB giant ~ zombie_assassin → succubus : ROP
2017.01.18giant - one step closerargv[1][47] == '\xbf' || argv[1][47] == '\x40' 이면 exitstack, library로 return이 불가능하다. 마지막에 memset(buffer, 0, 44); 한다. buffer랑 sfp까지 초기화. 그래도 ret 이후는 남아있다. 당장 생각나는 방법은 shared library의 header를 수정해 library mapping address를 0x40이 아닌 다른 곳으로 바꾸는 것인데... windows의 image base에 대응되는 LOAD 값이 shared library의 경우 0x00000000으로 나온다는게 문제. (readelf -l )linux는 windows와 달리 library에 정해진 mapping ..
LOB darkknight ~ bugbear → giant : ldd와 nm으로 함수 mapping 주소 찾기
LOB darkknight ~ bugbear → giant : ldd와 nm으로 함수 mapping 주소 찾기
2017.01.16darkknight - new attackerargv[1][47] == '\xbf' 이면 exit 한다. 즉 stack으로 return 못한다.RTL 사용하면 된다./bin/my-pass 문자열 삽입은 환경변수를 사용했다. bugbear - new divideret에 들어가는 주소가 execve의 주소여야만 한다. execve인지 검사하기 위해 execve의 주소를 얻는데 ldd와 nm을 사용한다.보통 함수의 주소를 구하기 위해 gdb로 실행한 다음 print 명령을 이용하지만 다음과 같은 방법으로도 가능하다. ldd로 shared library가 mapping되는 주소를 구한다.nm [-D]으로 함수의 offset을 구한 다음 이를 mapping 주소와 더한다. shared library는 fPIC 옵..