pwn (96) 썸네일형 리스트형 ptrace 보호되어 있는 글입니다. ezshell shellcode 문제답게 nx bit가 걸려 있지 않고 코드내에서 syscall이나 0x3b 등의 바이트 필터링을 해서 바로 execve syscall을 수행할 수 없었다 또한 입력한 쉘코드가 실행되기 전에 rip를 제외한 모든 레지스터를 초기화시키기 때문에 rip를 제외하면 정보를 얻기가 매우 힘들다 from pwn import * p = process("./ezshell") #gdb.attach(p) shell = b"\x48\x8d\x35\xc9\xff\xff\xff\x48\x89\xf1\xfe\xc9\xfe\xc9\xb2\xff\xff\xe1" shell += b"A" * (30 - len(shell)) p.send(shell) sleep(1) ex_shell = b"\x48\x89\xf4\x4.. 쉘코드 팁 보호되어 있는 글입니다. pwnable.xyz/GrownUp strcpy의 마지막에 추가되는 널바이트와 fsb를 사용하여 푸는 문제였습니다 buf에 0x10 크기의 데이터를 넣을 수 있고 src에 0x80크기에 데이터를 넣고 usr에 strcpy로 저장한 뒤 이를 printf로 출력하여 줍니다 해당 buf에 오직 1byte만을 가지고 검사가 이루어지기 때문에 그 이후로의 원하는 데이터를 스택에 밀어넣을 수 있다 0x80만큼의 데이터가 저장될 usr 영역을 보면 printf의 rdi에 저장되는 서식문자의 주소가 저장되어 있는 것을 확인할 수 있습니다 usr에 0x80만큼 데이터를 넣는다면 qword_601160에 저장된 첫 1바이트가 널이 되면서 usr+0x20의 위치가 rdi에 들어가게 되면서 fsb가 발생할 수 있습니다 from pwn import * p = r.. babyfsb fsb를 애매하게 이해한 것 같아 hackCTF의 babyfsb문제를 푸는데 대체 무슨 기준으로 leak이 되는지.. 등 기초가 많이 부실했구나 느끼게 해 준 문제였습니다 babyfsb write up도 쓸겸 부족한 부분을 정리해볼까 합니다 FSB는 주로 printf함수에서 발생하는 버그인데 포맷 스트링 즉 서식 문자를 잘못 사용하였을 때 생기는 게 됩니다 x64에서는 rdi -> rsi -> rdx -> rcx -> r8 -> r9 -> stack 순으로 인자가 저장됩니다 위의 그림을 참고해서 생각해보면 rdi레지스터에 서식 문자를 지정하여 주고 지정된 서식 문자는 다음의 인자들을 서식 문자에 맞게 출력해주게 됩니다 #include int main(){ printf("%lx\n%lx\n%lx\n%lx\.. IO_FILE 보호되어 있는 글입니다. Keygen 제목부터 역연산이겠구나 싶은 문제입니다 이미 많은 사람들이 푼 문제이기도 하고 풀고 나서 다른 분들 write-up보고 아... 나 정말 이상하게 했네 싶어서 글로 남기려고 합니다 main함수를 보면 check_key함수에 입력한 문자열이 들어가고 반환 값이 1이면 되면 플레그를 출력해줍니다 check_key함수를 보면 encoding함수 호출 후 strcmp함수를 통해 문자열과 비교하여 같고 그때 반환 값인 0이 면 1(True)을 반환하게 됩니다 encoding함수의 경우 일련의 연산을 수행하게 됩니다 여기서 a1[i]가 입력한 문자열이고 v2의 초기 값은 72이고 첫 연산 이후 encode 된 값이 들어갑니다 결국 encode된 값과 비교하기 때문에 여러 결과가 나올 수 있습니다 그래서 결국 비교하.. Unexploitable #1 HackCTF에 Unexploiatable의 첫 번째 문제입니다 main함수에서 fgets함수에서 BOF가 발생하는 것과 gift함수에서 system함수를 제공하는 것을 알 수 있습니다 bof 취약점이 존재하지만 메모리 릭을 위해서 fwrite함수를 사용해야 하고 3번째 인자를 넣어줄 pop rdx 가젯이 없고 rtc기법을 사용하기에는 입력받는 메모리가 너무 적은 등의 문제로 익스 하는데 어려운 이 존재합니다 fgets함수는 rbp-0x10의 주소에 데이터를 저장하게 되는데 fake ebp를 통해 SFP값을 원하는 값 +0x10을 넣어준다면 원하는 주소에 데이터를 넣어 줄수 있습니다 만약이 fgets함수를 SFP를 변조한 뒤 다시 ret를 0x40074d주소를 넣어 다시 fgets가 수행되도록하면 결국 .. 이전 1 ··· 8 9 10 11 12 다음