system hacking/dreamhack(드림핵)

oneshot

blackbearwow 2022. 4. 1. 12:52

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