Stack OverFlow
Exception Handling
Exception Handling
; 예외처리
- 프로그램에서 에러가 발생했을 때, 에러를 핸들링하는 기능
- 0으로 나누기(devided 0)
- error처리의 경우
- 실패했다
- except처리의 경우
- 어찌할바를 모름
- 운영체제에서 예외가 발생했을 때 처리할 수 있는 기회를 줌
- Exception Handling --> 처리과정에 따라 예외처리됨 --> Structured Exception Handling 구조화 예외처리(SEH)
- SEH Handler
- 처리코드
실습
소스코드에서 취약점을 발견하여
예외의 부분을 컨트롤해 결과값을 바꾸어보기
- C++소스코드
[ While문, Sleep, printf, scanf 사용 ]
- 메인함수 분석
[ printf 와 scanf 함수가 사용되는 주소 확인 ]
[ RETN값 ]
리턴의 주소와 함수가 어떤 식으로 입력되는지 확인
scanf %s 처리되어있어 abc=414243으로 입력됨
= 아스키코드는 16진수로 바뀜
=> 16진수를 아스키코드로 입력해야함
scanf의 리턴값에 입력한 값(123abcd)확인
====>컨트롤 가능
[ scanf 입력값 + dummy+ Return값 순서 ]
4bytes + 4bytes + 주소(8bytes)
- " Success!" 를 띄어보기
[ 리턴값에 Sleep부분의 CALL주소를 대입해보기 ]
리턴값에 Success의 While구문의 아무부분을 대입해도 됨
대신, 인자값에 주의하기
[ 리턴값에 넣어줄 Sleep함수의 CALL주소 ]
아스키코드표를 참고하여 뽑아내기
주소가 거꾸로 입력되는 점 주의!
0040101F->ctrl _ ctrl P @ ctrl @
- 값입력해보기
함수값 + dummy + 주소
4bytes + 4bytes + 아스키코드
아무값(1234+5678) + ctrl _ ctrl P @ ctrl @
- 우회코드입력후 분석
입력한 값 잘 들어감
리턴값도 잘 들어감
성공
2019-01-18
No comments:
Post a Comment