분류 전체보기 (25) 썸네일형 리스트형 [BuckeyeCTF] staff Write Up 주어진 파일들이 꽤 많다. 대충 하나씩 열어보니 서버 실행환경이 우분투 20.04이고 도커이미지가 어떻게 구성되는지 알수있었음. 그리고 중요한것은 여기에 플레그가 있다. 원격서버에 접속해서 sp22.txt 파일에 있는 플레그를 읽으면 될듯. 보호기법을 확인해보면 64비트에 바이너리이며, 보호기법이 죄다 걸려있다. 주어진 소스코드를 확인해보았다. #include #include #include struct Course { char name[0x20]; char instructor[0x20]; int is_staff; }; static void find_instructor(struct Course *courses, int course_count); static void find_course(struct Co.. [Dreamhack] ssp_001 Write Up 보호되어 있는 글입니다. [Dreamhack] ssp_000 Write Up 보호되어 있는 글입니다. [Dreamhack] environ Write Up 보호되어 있는 글입니다. [HackCTF] babyheap Write Up 바이너리와 libc가 주어진다. 먼저 보호기법 확인 pie뺴고 다 걸려있고 libc 2.23 환경이라는것을 알 수 있다. 실행해보면? 메뉴 출력하고 입력을받는다. 1번누르면 malloc으로 힙을 할당할 수 있고 2번 누르면 할당된 힙을 free 할 수 있고 3번을 누르면 할당된 힙에 있는 값을 볼 수 있다. gdb로 돌려보자 main함수를 보면 menu함수로 메뉴를 출력하고 input_number로 메뉴를 선택받고, 리턴값에따라 1이면 Malloc, 2면 Free, 3이면 Show 함수를 호출하고 다시 메뉴로 반복하는것을 알 수 있다. input_number은 특이하게 read로 입력을받고 atoi로 문자열로 바꿔서 반환한다. 이쯤되니 귀찮으니까 그냥 ida로 확인해보았다. 코드를보니 malloc은 0~.. [HackCTF] RTC Write Up 보호기법 확인. 64비트 바이너리에 nx, 부분relro가 걸려있다. main함수를 보니 write로 글하나를 띄워주고 read로 입력을받고 종료하는 것을 알 수 있다. 실제로 실행해보니 쓸데없는 문자열하나 띄워주고 입력받고 종료된다. main 함수를 보면 0x40 크기의 버퍼에 0x200 만큼 입력을 받으므로 bof가 발생한다. 이걸 이용해 ROP처럼 하면 될것같다. 그런데 64비트니까 함수 매개변수를 스택이아니라 레지스터로 전달한다. 그러므로 레지스터를 설정해줄 gadget이 필요하다. 여기서 사용되는 함수들인 read write는 매개변수가 3개이상 필요하니까 pop rdi, rsi, rdx 정도는 있어야 될 것같다. 그러나 ROPgadget을 통해 확인해보면 뭔가 애매하다. 그러므로 이 문제의 이.. [HackCTF] ROP Write Up 바이너리와 libc가 주어진다. 먼저 바이너리를 실행해보았다 입력값을받고, Hellow, World! 를 출력하고 종료한다. 바이너리는 32비트에 nx가 걸려있다. 그리고 주어진 libc버전은 2.23인걸 확인할 수 있다. main함수의 어셈블리 코드이다. vulnerable_function 라는 함수를 호출하고 write함수로 Hello World 문자열을 출력하는 것을 확인할 수 있다. vunerable_function 의 어셈블리 코드 이다. 0x88 만큼 버퍼를 할당하고 그 버퍼에 read함수로 0x100 만큼 입력값을 넣어주는 것 같다. 여기서 bof가 발생하고 ROP를통해 쉘을 얻을 수 있을듯. 혹시나해서 킹갓 ida로 psuedo code를 확인해 보았다. int __cdecl main(in.. [Dreamhack] hook Write Up 보호되어 있는 글입니다. 이전 1 2 3 4 다음