본문 바로가기

시스템 해킹4

anyaForger - Pwnable BDSec CTF 포너블 문제이다. 문제 코드를 보면 v1의 변수를 bof로 0xDEADBEEF 값으로 덮으면 anyaforger 함수가 실행이 된다. 한번 anyaforger 함수를 살펴보도록 하겠다. 그냥 flag를 출력해주는 함수이다. 그러면 그냥 bof로 v1 변수의 값을 0xDEADBEEF로 덮으면 flag가 출력되는 문제다. 스택 구조를 보니까 A로 dummy 값을 0x20 만큼 덮으면 v1 변수 값을 조작할 수 있다. 아래는 해당 공격 시나리오를 반영한 최종 익스플로잇 코드이다. from pwn import * #p = process("./beef") p = remote("139.144.184.150", 31337) e = ELF("./beef") def log(n, m): return su.. 2023. 7. 21.
bof - pwnable.kr pwnable.kr의 bof 문제이다. bof 문제는 전의 문제들과는 다르게 바이너리와 소스코드를 주는 형태였다(이게 정상이지 ㅎㅎ). 그렇다면 문제 코드를 살펴보도록 하겠다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } 문제 제목도 그렇고 형태도 그렇고 bof를 일으켜서 key 값을 변조.. 2023. 7. 3.
collision - pwnable.kr 위는 pwnable.kr의 collision 문제이다. 이번에도 바이너리를 안 주고 ssh에 접속해서 문제를 보라고 하는거 같다. ssh에 접속해서 문제 파일을 읽어보겠다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i 2023. 7. 3.
fd - pwnable.kr 위는 pwnable.kr 에서 받은 fd 문제이다. 따로 바이너리를 주지 않았던 문제였다. 사실 포너블 문제인데 바이너리를 받지 않았던적이 처음이라 시작부터 당황은 했지만 여기서 준 ssh 접속 정보를 통해서 접속부터 해봤다. ssh 접속을 하니 문제 바이너리, 소스코드, flag 파일이 있었다. flag 파일은 권한이 안된다고 떠서 바이너리를 이용해야 한다는 생각이 들었고 소스코드를 한번 읽어보았다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc 2023. 7. 3.