해당문제의 프로그램을 실행시켜보자
데이터를 입력받고 입력받은 데이터와 해당 데이터가 들어가있는 buf의 주소를 출력 해주며,
다시 입력할것인지 묻고 다시 입력을 받을 수 있다. 하지만 프로그램을 다시 시작하면 주소가 바뀌는걸로 봐서
이번문제도 ASLR기법이 적용되어 있는 거 같다.
다른것들도 적용되어있는지 확인해보자.
이번 문제도 ASLR을 제외한 메모리 보호기법은 적용되어있지 않는 거 같다.
이번 문제도 이전 문제와 비슷한 방식으로 풀면 될 거 같다.
일단 버퍼의 주소는 나와있으니 크기를 구해보자.
61번줄에서 data :를 입력받고 ebp-0x88위치의 주소를 eax에 넣고 인자값으로받아서 입력하는 거 같다
그렇다면 크기는 0x88(136)이 된다.
그렇다면 payload를 한번 작성해 보자.
해당 공격코드는 이전과 비슷하게 recvuntill을 이용하여 Data :까지 문자열을 받아오고 그 후 aaa(임의 의 값)을 넣어
버퍼의 주소를 확인하고 recv를 이용하여 버퍼에 주소값을 넣는다 int(r.recv(10),16) 즉 int(정수형)으로 받으며,
10바이트만큼 16진수로 받아오겠다는 것이다 그 후 Again (y/n) 까지 문자열을 받아오고 그 후 다음 실행에서 공격을 해야하기에 y를 보낸 후 payload에 쉘코드를 삽입하고 sfp까지 더미값을채운 후 ret주소에 buf의 주소를 넣었다
그 후 동일하게 Data :까지 문자열을 받아오고 페이로드를 전송시키도록 작성하였다.
이제 한번 만들어봤으니 실행을 시켜보자!!
해당 문제도 다행히 쉘을 획득하고 flag를 획득할 수 있었다.
'WriteUP' 카테고리의 다른 글
rtl_world (1) | 2021.05.28 |
---|---|
offset (0) | 2021.05.26 |
Simple_size_bof (0) | 2021.05.21 |
64bof_basic (0) | 2021.05.21 |
[LOB] orge (0) | 2021.05.20 |