감자 텃밭

[HackCTF] pwning 본문

my_study/HackCTF

[HackCTF] pwning

g2h 2021. 9. 26. 14:33

이번에 풀어볼 문제는 pwning라는 문제이다 제목으로는 어떤 문제인지 추측이 불가능하니 해당 문제를 우선 실행시켜보자.

높은 수를 입력하게 되면 크다고 하고 종료되고 작은 수를 넣으면 통과되어 한번 더 입력을 받도록 되어있다.

해당 프로그램의 메모리 보호기법을 확인해보자.

NX가 걸려있다. 쉘코드작성은 불가능할 것이고, IDA를 통해 상세 확인을 해보도록 하자.

MAIN함수에서는 특별한 걸 발견할 수 없었다 바로 vuln함수를 호출하는 듯하다 해당 함수를 확인해보자.

nptr이라는 변수의 크기를 32로 지정해놓고 get_n이라는 사용자 정의함수로 nptr에 입력을 받는 듯하며 해당 입력값을

v2변수에 넣고 해당 변수가 32이상일 경우 크다는 내용 추려과 함께 종료되며, 그렇지 않을 경우 한번 더 입력받도록 되어있다. 해당 get_n이라는 사용자 정의 함수를 살펴보자

여기서 보면 변수들이 unsigned로 되어있다 음수가 가능하기에 이를통해 언더플로우를 이용해서 문제를 해결할 수 있다. 즉 -1을 입력 시 정수의 최댓값이 입력되게 된다.

그 후 두번째 get_n에서 v2의 값으로 nptr에 넣게 된다

해당 페이로드는 우선 vuln에서 printf가 우선적으로 호출되므로 printf함수를 이요하여 leak 하여 함수들의 실제주소를 얻어 system함수로 rop 하는 방법이다.

준비물

1. printf_plt

2. printf_got

3. vuln_plt( 첫 번째 페이로드가 종료되면 main으로 돌아가기 때문에 다시 vuln으로 돌아가야 함)

4. pr 가젯

여기서 나는 기존에 있던 libc.so.6 파일을 사용해서 해결했다.

익스 코드는 아래와 같다.

필요한 함수들의 주소를 모두 구한 후 ret까지의 거리인 48까지 더미 값을 주고 printf_plt로 printf_got주소를 구해 

시스템 함수와 binsh문자열을 구한 후 해당 -1 값을 보내 rop를 진행했다

성공적으로 쉘을 획득할 수 있다.

'my_study > HackCTF' 카테고리의 다른 글

[HackCTF] - RTC  (1) 2021.11.25
[HackCTF] - yes or no  (1) 2021.08.26
[HackCTF] ROP  (0) 2021.08.16
[HackCTF] gift  (0) 2021.08.16
[HackCTF] Look at me  (0) 2021.08.16