Pwnable (18) 썸네일형 리스트형 SROP 32bit, 64bit BOB 과제하면서 SROP 관련 문제가 나왔다.하지만 SROP에 대해 잘 몰라서 여러 문서들을 보고 따라해보면서 감을 익혔다.일단 간단한 32bit 예제와 64bit 예제를 만들고 SROP를 적용해 쉘을 따보는 연습을 내용에 담았다. 32bit SROP 예제 (test.c)gcc -o test test.c -fno-stack-protector (Ubuntu 14.04 32bit)char sh[] = "/bin/sh"; void int80() { asm("int $0x80"); } void main() { char buf[8]; read(0, buf, 128);//Overflow 취약점 } 32bit sigcontext # ifdef __i386__ struct sigcontext { __u16 gs, _.. pig_hunting 보호되어 있는 글입니다. netcat -e option 보호되어 있는 글입니다. lob 20 1234567891011121314151617181920212223242526from socket import *import struct p = lambda x : struct.pack(" lob 18 plt를 이용하라는 문제다. 보면 strcpy로 오버플로우가 일어나는데 ret부분에 덮을 주소가 strcpy 주소여야한다.그 다음 ret+4 에 'AAAA'로 바꾼다.전에 lob 문제 풀때 보면 함수가 main, f1, f2, f3, f4, f5 이런식으로 있었는데 이 문제에서도 strcpy 때문에 오버플로우가 일어났었다. 버퍼가 40이라고 가정하고 "A"*44 + (f1 시작주소) + (f2 시작주소) + (f3 시작주소) + (f4 시작주소) + (f5 시작주소)이런식으로 payload 를 입력했는데 출력이 f1~5 함수 printf 내용이 다 출력되었다.gdb로 leave ret에다 브포 걸어놓고 si ni 명령어 이용해서 하나하나 i reg esp, i reg ebp 치면서 스택구조를 보았던게 도.. shellcode 정리 보호되어 있는 글입니다. ftz level20 fgets 로 입력 문자열 제한을 걸어놨기 때문에 오버플로우는 불가능하다. 취약점이 터지는 부분은 바로 printf 부분이다.보통 printf 함수를 쓸때는 앞에 서식문자를 쓰고 뒤에 인자를 넣기 마련인데 해당 문제 printf함수를 보면 인자만 들어가있다.문제가 뭐냐면 만약 fgets로 입력받은 문자열에 서식문자(%x, %d등) 이 존재한다면 이를 문자열로 처리하지 않고 서식문자로 판단하게 된다.여기서 문제가 발생하는데 %n 서식문자를 사용하면 특정 메모리 주소에 값을 덮을 수 있다. 1. 환경변수 SHELL 등록 (export SHELL=$(python -c 'print \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\ x6e\x89\xe3\x50\x53\x89.. ftz level19 해당 문제 코드는 정말로 간단하다.그래서 일반적인 RTL 페이로드를 작성한 후에 실행하였더니 권한이 level20으로 올라가질 않는다.이유를 찾아봤더니 setreuid 함수가 없다.RTL 에서 setreuid 도 추가하여 RTL Chaining 기법으로 문제를 풀었다. (참고 - 일단 구조먼저 살펴보면str[20] + dummy[20] + sfp[4] + ret[4] 이다. 필요한 것1. system() 함수 주소 (0x4203f2c0)2. /bin/sh 함수 주소 (0x421273a4)3. pop_pop_ret gardget (setreuid 인자가 2개이므로 pop 이 두개다) (0x804849d)4. setreuid 함수 주소 (0x420d7920) 5. setreuid 인자3100 3100 이므로.. 이전 1 2 3 다음