one_gadget 확인 명령어
one_gadget /lib/x86_64-linux-gnu/libc-2.27.so
one_gadget을 알고있는지 확인하는 문제이다.
소스코드 부터 보자.
stdout 주소를 출력하고 msg를 read한다. 여기서 버퍼오버플로가 발생한다.
실행파일에 카나리가 없어서 쉘코드를 집어넣을 수도 있지않나 하는데, NX가 있어서 할 수 없다.
NX우회는 ROP도 할 수 있지만 PIE가 적용되어있어서 ROP는 불가능하다.(아마도)
PIE를 우회하려면 free or malloc hook overwrite를 하거나 one_gadget을 사용하면 된다.
이 문제에서는 free나 malloc을 호출하지 않으니 one_gadget문제이다.
ida64로 ./oneshot을 디버그 해서 스택을 본다.
쓰레기 값을 넣는 도중에 check에 해당하는 스택에는 0을 넣어주고 리턴주소에는 one_gadget의 주소를 넣어준다.
remote를 하니 1번째와 4번째 가젯에서 execve가 잘 됐는데 local로 하면 1,2,3번째 가젯 모두 쉘을 딸 수 없다. libc버전이 다르면 원가젯 조건도 바뀌어서 그런가보다...
'system hacking > dreamhack(드림핵)' 카테고리의 다른 글
basic_exploitation_002 (0) | 2022.04.05 |
---|---|
out_of_bound (0) | 2022.04.02 |
hook (0) | 2022.04.01 |
basic_rop_x86 (0) | 2022.03.21 |
basic_rop_x64 (0) | 2022.03.20 |