일단, setreuid()에 대해 알아보자.
http://shayete.tistory.com/entry/1-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%95%B4%ED%82%B9%EC%9D%B4%EB%9E%80-linux-%EA%B8%B0%EC%B4%88%EB%AA%85%EB%A0%B9%EC%96%B4-vim-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95
이번 포스팅은 기본적인 내용들이 많기 때문에 혹시 (지루하실까봐) 리눅스를 한번이라도 접해보신 분들이라면 아실법한 /bin/sh 와 /bin/bash의bash drop privileges에 대해 잠깐 설명드리고자 합니다.
해킹 공부해보신 분들 중에, 왜 우분투에서는 setuid bit가 걸린 바이너리에서 system("/bin/sh")만 쓰면 특정 권한을 얻을 수 있는데 system("/bin/bash")를 했을 때 특정 권한을 얻을 수 없는지 궁금했던 적 없으신가요.
이상하게 /bin/bash를 이용할 때는 setreuid(0, 0)를 걸어줘야 루트권한을 얻을 수 있는데요,
이건 debian계열 bash 의 특정버전 이상부터 bash drop privilege 정책이 걸려있어서 bash를 이용할 때는 setuid 권한이 임시적으로 제거됩니다.
cd /usr/bin입력
ls -al bof 를 한다.
bof 실행
buffer overflow문제 기초중의 기초
char buf2[10];
char buf[10];
메모리는 위에서 아래로 가고
스택은 아래서 위로 간다.
일단, 10byte 채우고,
fgets가 최대 40byte 받으니까
넘어가게끔 한다.
그런데, buf2와 buf1사이에 더미가 생긴다.
더미가 6byte라고 하는데, 그 의미를 조금 더 생각해보자.
쨌든 그래서,
a를 16번 입력, go 입력하면 level10의 id를 갖게 된다.
그 다음 level10의 권한으로 my-pass
interesting to hack!