본문 바로가기

전체 글31

Librarian - Pwnable 2023 코드게이트 포너블 문제이다. 파일은 문제 바이너리 하나와 libc파일 하나를 주었다. 문제를 살펴보면 case가 총 5가지로 나누어져 있는 것을 확인할 수 있었다. case 1의 함수를 살펴보면 다음과 같다. 특정 메모리의 주소를 카리키며 write 함수의 인자로 해당 데이터들을 출력해주는거 같다. 바이너리 실행 때마다 값이 랜덤함수로 인해서 랜덤하게 바뀌어서 정확히 어디 위치인지는 모르겠다. 그치만 해당 데이터들의 주소의 주변을 살펴보니 got테이블이 있었다. 그래서 여기 부분에서 libc 베이스 주소를 구할 수 있겠다는 생각을 하였다. 다음은 case 2의 함수이다. 아까 write 함수가 인자로 전달 받을 때 참조한 메모리 주소에 데이터를 쓸 수 있는거 같다. 다음은 case 3의 함수이다.. 2023. 6. 26.
vspace - Reversing 2023 코드게이트 리버싱 문제이다. 문제에서는 main.py과 Engine.py을 주었다. 다음은 main.py코드이다. VMengine 에 jason 형태의 데이터를 인코딩한 형태로 보내주면 읽을 수 있도록 만들어놓았다. Engine.py의 코드를 살펴보면 opcode를 결정해주고 적절한 operand를 넣어줌으로써 내가 원하는 명령들을 수행 할 수 있도록 만들었다. 정말 여러가지가 있기 때문에 한번 jason 형태의 데이터를 잘 인코딩해서 보내주면 읽을 수 있는지부터 확인해보았다. 해당 코드는 stack에 문자열 “1234”를 두번 한뒤 스택에 있는 값을 가져와서 그 값들이 정수가 아니면 operand type error를 츨력하도록 만든 코드이다. 잘 동작하는지 확인 됐으니 이제 flag를 읽어보.. 2023. 6. 26.
n0t rand0m - Pwnable 2023 CCE pwnble 문제이다. 문제에서는 바이너리와 libc 파일만 주었다. 위의 코드에서 랜덤 수들은 원하는 숫자가 나올 때까지 돌릴 수 있다. buf와 s배열을 붙이고 인자에 buf를 넣고 strlen함수를 실행하면 buf크기 + s크기를 nbytes에다가 넣을 수 있다. case 3에서 bof가 일어나므로 canary를 릭할 수 있다. canary를 릭한 뒤 이번에는 buf크기 + s크기 + canary크기까지를 nbytes에 저장하고 이번에는 sfp까지 bof로 값을 채운다. 그리고 다시 nbytes + sfp크기를 nbytes에 저장하여 nbytes의 값을 49까지 만든다. 그리고 이번에는 libc base 주소를 구하기 위해 libc_start_call_main 주소를 릭한다. 해당 .. 2023. 6. 26.