int main() {
setuid(0);
setgid(0);
system("/bin/bash");
}
이렇게 하고 실행을 시켰는데,(물론 공격대상은 제 컴퓨터입니다. 제가 루트계정으로 해당 소스를 짜고 컴파일한 뒤, chmod 777로 바꿔줬습니다.)
쉘이 안바뀌더군요.
디버깅 하려고 printf 몇개 박아봤는데, setgid까진 잘 되다가 시스템함수를 아예 실행을 안해요. 디버거로 디스어셈블 해봐도 딱히 문제는 없는데, 디버거에서 브레이크 한 줄에 하나씩 박고 감시를 해도, system("/bin/bash"); 를 무시하고 지나가네요.
우분투 12.04LTS 인데, 보안상 막힌건가요?
Hit : 4613 Date : 2012/10/13 07:00
cd80
system함수가 ruid rgid를 가져오기때문에
setuid와 setgid로 설정한 루트 uid gid로는 루트권한의 쉘을 실행할 수 없습니다
소스를
#include <stdio.h>
int main() {
setreuid(0, 0);
setregid(0, 0);
system("/bin/bash");
}
와 같이 바꾸신후 컴파일 하신후
chmod 777이 아닌
chmod 6777 로 권한설정해주시면 원하시는대로 하실 수 있으실것 같습니다
p.s. 그리고 아마 /bin/bash는 실행된거같습니다
ps 명령어로 확인해보세요
2012/10/13
ISHack
setuid라면 4777이 아닐까요?
2012/10/14
cd80
ISHack//
작성자님이 소스에서 원하시는게 uid와 gid 모두 바꾸는거라 setuid와 setgid를 걸어줘야 하는데
setuid는 4고 setgid는 2라 둘을 더한 6이 setuid + setgid입니다