본문 바로가기

WHOIS/Pwnable

Whois 9주차 문제 풀이 과제

1. ilovepwn

 

이번 문제는 다음과 같다.

 

전역 배열 변수 fakekey에 임의의 인덱스 에다가 입력을 줄 수 있다. 그리고 두 번째 전역 배열 변수 key와 "ILOVEPWN"이라는 문자열을 비교하는데 해당 바이너리에서 fakekey 임의의 인덱스에 입력을 받을때 범위 검증을 하지 않기 때문에 oob취약점이 발생한다. 해당 oob 취약점을 이용해서 fakekey배열을 벗어나 key 배열에 우리가 원하는 값을 넣어주면 된다.

 

해당 exploit 코드를 실행하면 shell을 얻을 수 있다.

 

2. Part-time Job

 

ida를 통해 보자

 

main함수 전체를 보지 않고 해당 부분까지만 보겠다. 우리가 shell를 얻을려면 v4 <= 0x17d78400 이 조건을 통과해야 한다. 그리고 밑에 보면 v3 == 4일 때 --v4를 해주는데 여기서 v4의 기본값은 30이지만 계속해서 --v4를 해주면 계속 v4의 값이 작아지다가 unsigned int 형이기 때문에 v4가 0일때 --v4를 해버리면 4294967295로 바뀌어 버린다.(unsigned int 형 범위 참고) 그럼 v4 <= 0x17d78400이 조건을 통과하기 때문에 shell을 얻을 수 있다.

python script를 짤것도 없이 손으로 31 번 정도 노가다 해주면서 풀었다.

 

3. military

 

이번 문제는 다음과 같다.

 

printf에 포멧스트링이 안들어간걸 보아 전형적인 포멧스트링 버그 문제인거 같다. 

 

바이너리에 Partial RELRO로 걸려있는걸 보아 got overwrite가 가능하다. 그냥 간단하게 포멧스트링 버그 취약점을 이용해서 if문 로직 검사를 통과할 필요도 없이 strcmp의 got를 system@plt+6 로 덮어주고 strcmp의 첫 번째 인자로 들어가는 buf를 read함수에서 "/bin/sh\x00"으로 넣어주면 풀린당

 

 

exploit 코드는 다음과 같다.

exploit 코드를 이용해 shell을 딴 모습이당

'WHOIS > Pwnable' 카테고리의 다른 글

Whois 8주차 문제 풀이 과제  (0) 2021.11.26
Whois 7주차 문제 풀이 과제  (0) 2021.11.15