첫번째 관문

문제가 어떻게 구성되어 있는지 분석하는데 1~2시간 정도 걸린다. 왜 로그인이 안되는지 어떻게 파일을 설정해야 로그인이 되는지 확인함. 여기에서는 strace 가 요긴하게 쓰임

두번째 관문

로그인을 해야 하는데 어떻게 하는지 모르겠음. 구성을 다 하고 계정의 유무에 따라서 0,1 리텃하는 값이 달랐음 그래서 admin을 입력해 보니 admin 계정이 있었음

세번째 관문

어드민 계정의 패스워드를 맞추어야 함. 브포를 해 보려고 했으나 패스워드가 8자리가 되어서 브포가 어려움 그리고 내 계정은 23초마다 리셋됨. 그러다 보니 패스워드가 크면 1, 작으면 -1을 리턴한다는 것을 알게됨, 그래서 패스워드를 맞출 수 있겠구나 함. 로컬에서 해보니 200번 정도면 맞춤. 알고리즘없이 순차적으로 계속 대입하는 문제임. 문제는 세션이 다시 시작되면 패스워드가 다시 리셋됨. 패스워드는 랜덤 영소문자대문자숫자 8자리임. 그러나 서버에서는 40번정도 하면 자름. 나중에 보니까 23초 되면 자르는 거 였음. 여기까지가 첫날임. 그래도 또 못푸는 구나 하고 자첵하다가 잠.

네번째 관문

아침에 일어나서 바이러니 서치 를 추가함. 그리고 recvuntil 이 불필요하다는 것을 알게됨 recv는 필요한 경우 한번에 몰아서 해주면 되고 시간을 줄이기 위하여 필요한 것을 모두 보내고 recv는 한번만 함. 참고로 로직을 바꾸었는데 35번에서 자꾸만 잘림 중요한 것은 36~40번 사이에 답을 찾음. 한참을 고민하다가 불필요한 recv문장을 다 빼버림. 그랬더니. 40번 정도 돌아감. 참고로 버그가 있는데 패스워드가 0이나 z가 들어 있으면 못찾음. ㅋㅋㅋ. 이런 결과로 5번 돌리면 2번 정도는 답을 찾음.

다섯번째 관문

여기까지 오면 로그인이 된다고 가정하고 릭과 ret를 변경할 수 있는 부분을 계속해서 찾음. 대상프로그램이 다소 코드가 많아서 내가 풀 수 있겠다고 생각함. 결과는 풀었음. 릭은 못참음. 그러나 프로그램을 분석하다가 패스워드가 길어지면 다시 받아야 하는데 이상하게 사용자를 입력한다는 것을 알게됨. 패스워드는 원래 9자리 이하로 입력하게 되어 있는데 256자가 입력되어도 그냥 방치함 - 올케

여섯번째 관문

여기서는 분석보다는 패스워드 길이를 변경하면 프로그램이 eip가 AAAA 되는 것을 찾음 패스워드가 66자를 입력하면 그 뒤가 eip가 된다는 것을 알게됨. 또한 그 다음은 stack 에 올라감 - 올케2

일곱번째 관문

rop는 할 수 없음, stack 인데 이상하게 컴파일해놔서 친숙하지 않음. 그러다가 cd 80이 들어가 함수를 보게되는 여기서 read, open, write, mprotect 시스템 콜을 발견함.

여덟번째 관문

여기서 부터는 그냥 rop함 여거 저거 해보다가 bss 에 쉘코드를 write 하고 mprotect 함수를 이용하여 실행권한을 부여함. 그리고 그리로. 점프함 - 끝

첨부:1 , 반 브포, admin 함수를 바이너리 서치로 구함

첨부:2, 파일명을 쓰고 오픈하고 읽고 출력하는 방법으로 flag를 구함

첨부:3, sh 코드를 bss 에 복사하고 실행권한을 부여함, 쉘코드는 ./etc/passwd 를 읽는 쉘코드를 조금 수정해서 현재 디렉토리의 flag를 읽도록 변경함 - 로컬에서는 100% 실해되며, 서버에서는 3번 트라이 끝에 답을 구함

 a1.py

 a2.py

 a3.py


Posted by goldpapa
,