티스토리 뷰

해당 문제의 소스코드를 읽어보도록 하자.




코드의 내용을 간단하게 살펴보면 다음과 같다.


1. environ( 환경변수값들) 을 전부 0으로 초기화한다.


2. argv[1][47]에는 '\xbf'가 들어가야 한다.


buffer에 주어진 사이즈는 40바이트로 환경변수에 저장하지 않고 버퍼에 쉘코드를 덮어씌우는 방식으로 공격을 수행해야 할 것으로 예상된다.


gdb로 분석을 하기 위해서 복사를 한 뒤에 분석하도록 하겠다.


복사를 할 때는 메모리 주소에 영향을 끼치는 것을 줄이기 위해 프로그램 이름의 길이를 똑같이 해준다.



전체적은 코드를 파악해보도록 하자.



우선 스택의 사이즈를 확인해보면 2c(44) 바이트를 확보한 것을 알 수 있다.


즉, RET의 주소는 buffer의 시작점으로부터 48바이트 떨어진 곳에 있다.


우선 strcpy 의 조건에 맞추어 최대한 입력을 하도록 하여 메모리 주소를 정확하게 알아보자.



A라는 인자로 가득 채움으로 buffer 변수의 시작은 0xbffffad0 임을 알 수 있었다.


따라서 우리는 buffer의 시작점에서 shellcode를 입력하고 RET주소 직전까지 다른 내용으로 채운 다음 RET주소를 buffer의 시작점인 0xbffffad0로 채우면 된다.


하지만 해당 내용을 하였을 경우 실패를 하게되었다.


코드를 직접 복사하여 버퍼의 주소를 직접 출력하는 코드를 추가하였다.



실제 buffer변수의 주소는 0xbffffae0인 것을 알 수 있었다. 이를 고려하여 새로운 주소로 공격을 실행하였다.



내용을 보이기위해 쉘코드를 생략하였다.


보다시피 다음단계의 쉘을 획득하는데 성공하였다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함