min8282

[취약점분석] 시스템 해킹 실습 7일차..... 본문

K-Shield.Jr

[취약점분석] 시스템 해킹 실습 7일차.....

min8282 2024. 7. 24. 17:08

1. Dangling pointer 생성

2. 재할당

3. 기능 호출

- AAW

 

setString : 문자열을 read로 입력 받음

setNum : 정수를 scanf("%ld")로 입력 받음. ld = 10진수 ^^^^

- elf.sym["flag"] -> python 숫자 문자열

- str()로 감싸주면 됨. <- python str

- .encode() <- python bytes

 

delete에서 삭제는 시키지만 초기화를 시키지 않아서 seg error 발생


Race Condition

공유 자원에 동시 접근해서 나타난 취약점?

 

race_condition.c 실습

216~230 소켓에 대한 설정.

 

connection_handler 함수부터 분석 시작

 

python thread != c thread

python multiprocessing 검색 후 알아보고 해야 함.

 

실행하고 

새로운 터미널 nc 0 8888

 

.c 분석)

 

목표)

*balance >= 50000

 

Create account : 새로운 계정 생성

Use coupon : 계정의 쿠폰 사용

파이선 익스를 짤 때, 멀티프로세싱 모듈 사용

 

 

exploit 코드 작성 전 구조 짜기)

  1. 새로운 Account 생성 -> 인덱스 0
  2.  Account[0]의 쿠폰 사용
    1. coupon[0] ~ coupon[4] 까지 반복

 

ㅇㅅㅇ?

1. 모든 프로세스를 미리 생성

2. 동시에 작업 수행

 

----

이전 bof 정리)

  • BOF 가 있으니까 RET 변조 가능
    • BOF->RET을 바이너리 내 함수 주소로 변경
  • Shell Code
    • 셸코드로 점프

----카나리

Canary : buf와 sfp 사이에 검증용 데이터 삽입 및 검사하는 보호기법

우회 방법 : Canary 값을 알아내고, 동일한 값으로 덮어쓰기


----GOT

1. scanf@got 를 libc_system의 주소로 변경

-> sacnf("%s", ~~)

2. scanf@got를 system@plt의 주소로 변경

 

GOT Overwrite 공격 기법)

1. GOT에 호출하고자 하는 주소 를 입력 (ex. scanf@got에 0x414141)

2. 변조한 함수를 호출(ex. call sacnf@plt)

-> 실제 scanf 대신 변조한 주소가 실행(ex. RIP = 0x414141)

 

puts@got 를 system@plt 로 변조

puts 호출 -> puts@plt(코드) 실행 -> puts@got(주소) 참조 -> system@plt 호출 ->  system@ ??


----RTL

Return to Library

-> NX는 있고, get_shell은 없을 때 사용.

 

BOF -> RET p64(libc_system)

 

아니 one_gadget이 뭔데요....

 

rtl, rtl.c 분석 및 익스)

libc_base = libc_printf - printf_offset

libc_one = libc_base + {one_gadget 오프셋}

레지스터 조건에 맞는 or 맞춰줄 수 있는 가젯을 사용

 

rtl_exploit.py

 

 

카나리, got 실습 화면 추가