본문 바로가기

Pwnable9

[Pwnable] GDB로 코드 분석 GDB로 코드 하나를 분석해보려고 한다. 이번에 분석해볼 코드는 아래와 같다. main 함수 내에 functhion 함수가 있고, 매개변수를 넣어 functhion을 실행한다. function 함수를 보면 char는 1바이트 씩이니까 buffer1은 15바이트, buffer2는 10바이트 크기를 가지고 있다. 소스파일 만들어주고 컴파일 시켜준다. +) 32비트로 컴파일 시켜줘야해서 위와 같이 다시 컴파일 시켜주었다. 위의 fatal error은 위의 sudo apt-get ~ 명령어로 해결할 수 있었다. gdb 실행시켜 준다. gdb에서 함수 디스어셈블 시켜봤다. (pdisas 명령어는 disass랑 같은데 색깔이 들어간다.) 프로그램이 시작되면 eip 레지스터 위치는 main함수의 시작점이 된다. (e.. 2021. 5. 11.
[Pwnable] GDB 사용방법 정리 GDB GNU Debugger 디버거는 어떤 라인이 실행할 때 어떤 값이 어떤 메모리 주소에 올라가고, 어떻게 동작하는지 과정을 보여주는 것이다. GDB는 오픈소스로 공개되어 있는 무료 디버거이다. gdb 설치 방법 sudo apt-get install gdb gdb-peda를 이용하면 더 편리하게 볼 수 있다. gdb-peda 설치 방법 git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit 명령어 기능 사용법 breakpoint 걸기 b *[메모리 주소/함수이름/offset] 다음 breakpoint까지 실행 continue breakpoint 정보 확인 info b breakpoint .. 2021. 5. 11.
[pwnable.kr] collision 먼저 ls를 해보면 요렇게 나온다. 당연히 flag는 실행이 안되는데, 그래서 col을 실행해보면 20바이트를 받는 것을 알 수 있다. 그래서 넣어보면 패스워드가 틀렸다고 나온다. 아마 20바이트의 옳은 패스워드를 찾아야 할 것 같다. 한번 코드를 살펴보자 main 함수를 보면 첫 번째 if문에서 매개변수 개수를 체크하고 2개보다 적으면 사용법을 출력한다. 두 번째 if문에서는 입력 값의 바이트가 20바이트인지 확인한다. 세 번째 if문에서는 hashcode와 check_password 함수 들어간 값과 비교해 flag를 출력한다. 그렇지 않으면 wrong passcode가 출력된다. check_password 함수를 보면 입력받은 매개변수 값을 받아와서 int형 포인터 변수로 가리키고 for문에 4바이.. 2021. 5. 5.
[pwnable] swing_pwn_chall 먼저 문제 파일을 다운 받고 ls -al로 권한을 확인했다. swing_pwn_chall에 실행권한이 없어서 실행권한을 부여해주었다. 그리고 실행시켜 보니까 두 수의 덧셈 결과를 입력하라는 창이 계속 나왔다. 소스코드를 확인해보자 소스코드를 보니까 20번 반복 후에 모두 맞으면 flag가 뜨는 것 같다. 그래서 이 문제를 풀기 위해 solve.py를 만들어보려고 한다. (근데 우분투에 vi 편집기가 말썽이라 칼리로 가서 풀어보았다.) 결국 이 코드로 성공할 수 있었다. p.recvuntil(':')로 계산해야 하는 숫자 앞인 :까지 가고 a = p.recvuntil('+')[:-1]로 +앞까지 가서 첫 번째 숫자를 읽어 a에 저장한다. 이때 [:-1]은 p.recvuntil('+')만 하면 읽어야하는 숫.. 2021. 4. 28.
728x90