[setuid] ruid, euid
passwd 등 내부적으로 `` ruid``를 체크하는 작업을 수행하려면 `` ruid``를 변경해 주어야 한다.
`` setuid`` bit가 설정 되어있는 바이너리를 실행하면 `` euid``가 변경된다.
`` ruid``는 `` euid``가 변경된 상태에서 직접 ``c setuid()``를 호출해줄 때 변경된다.
때문에 ``c setuid()``를 호출하지 않는 바이너리를 이용해 쉘을 실행하더라도 `` euid``만 변경되고 `` ruid``는 그대로인 상태다.
이런 경우,
- 쉘을 실행하기 전에 ``c setuid()``도 실행하도록 하면 ``c ruid == euid``인 쉘을 얻을 수 있다.
- `` euid``만 변경된 쉘에서 ``c setuid(geteuid()) / system("/bin/sh")``를 새로 컴파일해서 실행하면 ``c ruid == euid``인 쉘을 얻을 수 있다.
일단 `` euid``가 변경되고 나면 그 이후 실행되는 subprocess는 모두 그 `` euid``로 실행되기 때문에 가능하다.
'OS > LINUX & UNIX' 카테고리의 다른 글
[compile process] Shared Library (0) | 2016.11.21 |
---|---|
main startup routine bt (0) | 2016.11.15 |
[shell] pipe (0) | 2016.11.03 |
PLT, GOT (0) | 2016.11.01 |
NetCat ( nc ) (0) | 2016.10.25 |