감자 텃밭

[HackCTF] ROP 본문

my_study/HackCTF

[HackCTF] ROP

g2h 2021. 8. 16. 18:38

이번에 풀어볼 문제는 hackctf의 rop문제이다

제목에서부터 유추할 수 있는 rop에 관한 문제이며 rop기초에 관한 문제인 거 같다.

해당 문제를 실행 및 적용된 메모리 보호 기법을 확인하였다.

문자열을 입력받고 입력 후 특정 문자열이 출력된다.

메모리는 역시 nx가 걸려있다.

해당 문제를 IDA를 통해 상세히 분석하였다.

main함수에서는 vulnerable_function함수를 호출하고 write함수를 통해 특정 문자열을 출력한다.

vulnerable_function함수에서는 136만큼의 buf변수를 선언하고 read함수를 통해 0x100(256)만큼 입력을 받는다

이 부분에서 bof가 일어날 거 같다. 정말 기본 rop사용 문제인 듯하다.

익스 코드는 read를 통해 bss영역에 /bin/sh문자열을 입력하고  write를 통해 read의 got를 출력하여 system함수의 실제 주소를 구한다 그 후 read함수를 통해 write의 got를 system함수의 실제 주소로 got overwrite 하고 write를 호출(system)

하여 인자 값으로 bss영역의 주소 값을 적으면 될 것이다.

이러기 위해 필요한 것은

1. read_plt

2. read_got

2. write_plt

3. write_got

4. bss영역의 주소

5. /bin/sh문자열

6. system함수의 주소

7. pppr 가젯

[해당 주소 및 가젯을 찾는 과정은 앞에서 했던 것들과 동일하기에 생략하겠다]

해당 익스 코드는 아래와 같다

좀 더 코드를 이쁘게 짜는 연습을 해야 할 거 같다...

해당 코드를 실행시키면 성공적으로 쉘을 획득할 수 있다.

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

[HackCTF] pwning  (0) 2021.09.26
[HackCTF] - yes or no  (1) 2021.08.26
[HackCTF] gift  (0) 2021.08.16
[HackCTF] Look at me  (0) 2021.08.16
[HackCTF] Beginner_Heap  (0) 2021.08.10