목록분류 전체보기 (365)
프로그램 두 개 있는데 먼저 첫 번째를 실행했다. 알림 창을 제거하라고 나온다. 여기서 프로그램을 종료하면 알림 창이 또 나온다. 알림창 두 개를 제거해야 한다. JE를 JMP로 바꾸어 무조권 넘어갈 수 있게 한다. 그럼 알림 창 하나를 건너뛸 수 있다. 바꿔주었다. 그 후 프로그램을 종료하려 할 때 나오는 알림 창이다. 전부 NOP으로 바꿔도 되고 JMP로 0x40104c로 이동해도 되고 방법은 다양하다. nop으로 채워주었다. 알림 창 없이 잘 진행된다. 그다음 옆에 있는 프로그램도 디버깅을 진행해본다. 들어오자마자 에러가 난다. 주소를 0X401000으로 옮겨서 BP를 걸고 진행해도 된다. 근데 PE VIEW를 사용해보기로 한다. PE 파일이 잘못되어있다. 원본과 헥스디를 이용해 비교를 진행한다. ..
PE 포맷 WINDOW에서 사용하는 실행 파일을 일컫는 말이다. MS에서 다른 OS와 이식성을 향상하기 위해 만든 파일 포맷이다. PE 파일 종류 4개의 계열 가지고 있다. 실행 파일 EXE, SCR 라이브러리 파일 DLL, OCX, CPL, DRV 오브젝트 파일 OBJ 드라이버 파일 SYS, VXD PE 파일 구조 IMAGE_DOS_HEADER e_magic : Signature 어떤 구조인지 알려준다. 각 파일의 형식에 따라 다른 파일 시그니처를 가진다. e_lfanew : Offset to New EXE Header 실제 파일이 어디서 시작하는지 알 수 있다. 저 지점으로 가보면... PE가 있는것을 알 수 있다. MS-DOS Stub Program Signature: e_lfanew에서 알려주었던..
프로그램을 누르면 바로 해결했다고 나온다. 이번 문제는 key file의 내용을 분석해 보는 것이다. 기존의 key file을 지우고 새로 만들어주고 프로그램을 실행하면 키 값이 틀렸다고 나온다. 이제 그 값을 알아보도록 한다. 숫자 8개를 넣고 디버거를 켰다. 파일을 읽는 부분에 bp를 걸고 잘 읽어 왔는지 확인했다. 파일의 길이가 8이란 것을 알 수 있다. 조건문에서는 길이가 16이어야 통과할 수 있다. 일단 flag를 꺼두고 계속 진행해 보았다. 0x4010c7 라인을 보면 al이 0이면 0x004010d3으로 이동한다. 문자열이 끝났다는 것을 알 수 있다. 그리고 esi가 8이면 성공했다는 문자열을 출력하고 아니면 키 값이 실패했다는 문자열을 뛰운다. 그럼 esi를 8 이상으로 만들어주어야 하는데..
프로그램 실행 시키면 이런 오류창이 뜬다. 디버깅툴 키고 문자열 부터 찾았다. 마지막 성공 했다는 문자열이 있다. 성공 했다는 문자열까지 도달하기 위한 방법을 찾는다. Z flag를 하나씩 꺼보면서 진행 했다. 조건문들을 모두 통과하면 이런 화면을 볼 수 있다. 강의에서는 점프구문들을 모두 JMP로 바꾸어 진행하였지만 사실 하나만 바꿔도 해결할 수 있다. 바로 flag로 가는 주소로 바꾸면 된다. 크랙판으로 새롭게 프로그램을 만들고 실행한 모습이다. IDA랑 단축키가 비슷해서 생각보다 편했다.
보안프로젝트에서 강의하는 윈도우 리버싱 ( window reversing) 완벽 이해 - 레나 챌린지 풀이 를 듣게 되었다. 리버싱에 대해서 혼자 독학 해서 공부를 하고 있었으나 아무래도 혼자 공부하기 보단 전문가의 강의를 들으면서 놓친 부분을 찾아가는 시간을 가지는게 좋다고 생각해서 듣게 되었다. 10강 이후부터는 유료이기 때문에 포스팅도 비공개로 돌릴 것이다. 운영체제는 xp에서 하고 올리디버거를 사용한다고 한다. IDA나 기드라만 사용했던 나에게는 생소 했다. 암튼 강의에서 시키는대로 세팅을 진행 했다. 공유 폴더를 만들어 실습파일들을 옮겼다. 15년 만에 XP를 만나게 되었다. 오랜만에 보니 옛날 기억들이 떠오른다.
https://dreamhack.io/wargame/challenges/101/ validator-revenge Description 1회 CTF에서의 프로그램이 너무나 취약한 것을 인지한 개발자가 몇 가지를 더 추가한 것 같습니다. 취약한 인증 프로그램을 익스플로잇해 flag를 획득하세요! Reference https://dreamhack.io/lectur dreamhack.io 며칠째 삽질 중이다. 처음 조건문들을 모두 통과하고 ROP를 이용하여 풀려했으나 relro가 걸려있어 got overwrite는 불가능했다. 출력 함수도 없다. stdout을 변조해서 leak 하려 했으나 인자를 주는 게 너무 어려웠다. 사람들은 stack pivoting을 이용해서 해결했다고 하나 어떻게 rsi에 stdout..
welcome함수가 진행하고 login함수가 진행된다. 실행을 시켜보았다. passcode1를 치자마자 세그폴트가 뜬다. 그이유는 scanf에 레퍼런스가 없다. 초기화 되지 않은 passcode1에 쓰레기값이 들어가 있어 내가 입력하면 그 쓰레기값에 값을 넣는것이기 때문에 오류가 난다. name입력에서 bof가 일어나 passcode1의 값을 덮을 수 있다. passcode1의 값을 미리 fflush got주소로 덮어두고 passcode1을 입력 받을때 system주소로 입력 해준다. name : ebp-0x70 passcode1 : ebp-0x10 차이는 96 fflush got주소 : 0x804a000 인자 값 가져오는거 까지 생각해서 0x080485e3으로 사용해준다.