전체 글 (171) 썸네일형 리스트형 [ASM] 1~19 구구단 및 입력한 정수 구구단 출력 보호되어 있는 글입니다. 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, _.. [pwnable.kr] unexploitable Pwnable.kr unexploitable 해당 문제의 Main을 보면 굉장히 간단합니다.그냥 ROP문제인가 하고 가젯을 살펴봤습니다. READ 함수에서 0x50F 만큼 입력을 받는데 syscall 의 OPCODE가 0F 05 이기 때문에 syscall 함수를 이용할 수 있습니다.하지만 leak을 할 수가 없어서 고민을 많이 했습니다. Main 모습을 보면서 payload를 생각해봤는데 [rbp+buf] 를 이용해 공격을 할 수 있었습니다.Rbp에 넣을 주소는 bss를 활용하여 공격에 사용하였습니다. 시나리오1.rbp 즉 read를 통해 입력당할 주소를 bss로 바꾸기.Ret에 read_ret(lea rax, [rbp+buf] address) 를 덮고 sfp 자리에 bss+0x10 의 주소를 덮었습니다.. [pwnable.kr] Dragon Pwnable.kr Dragon 해당 문제에서 봐야할 부분은 아래 코드들 입니다. 해당 프로그램은 용과 싸워서 이기는 게임입니다드래곤, 전사 의 data를 0x10만큼 malloc 해주면서 사용하고 있는데 해당 데이터를 쓰고 free할 때 초기화 해주지 않고 성공문에서 malloc(0x10)를 똑같이 해주기 때문에 uaf 취약점이 발생합니다.일단 성공문으로 가려면 드래곤과 싸워 이겨야 합니다.드래곤은 엄마 용, 전사는 성직자 일 때 피를 깎아 이길 순 없지만 엄마용의 HP는 127를 넘어가게 되면 인티저 오버플로우가 일어나기 때문에 무적기와 마나 회복으로 버티면 이기게 됩니다. System(“/bin/sh”) address = 0x8048DBFfrom pwn import * #p = process('./.. [pwnable.kr] simple login Pwnable.kr Simple Login Main을 보면 먼저 입력을 받고 base64 디코딩한 문자열 크기를 v6 변수에 저장한 후에 memcpy(&input, B64DecodeStr, len(B64DecodeStr)) 이런식으로 옮기게 됩니다. Auth 함수를 봤을 때 memcpy에서 취약점이 터지게 됩니다. 만약 저희가 12크기의 문자열을 넣는다면 sfp를 변조시킬 수 있습니다. 또한 auth 함수를 나가고 바로 leave ret 으로 가기 때문에 주소가 변하지 않는 input 전역변수 주소를 sfp에 넣고 전역변수 + 4 지점에 메인 ret에서 리턴할 주소를 Correct 문으로 넣는 다면 쉘을 딸 수 있습니다. 0x8049278 = Correct address 0x811eb40 = Global.. [C] AES 128bit Encrypt/Decrypt 보호되어 있는 글입니다. BOB 7기 발표자료 보호되어 있는 글입니다. C base64 encode/decode 보호되어 있는 글입니다. 이전 1 2 3 4 5 6 ··· 22 다음