php 명령 주입 공격

이번 실험 내용 은 php 명령 이 공격 에 주입 되 는 과정 을 이해 하고 사고방식 을 파악 하기 위 한 것 이다.
명령 주입 공격
명령 주입 공격(Command Injection)은 해커 가 HTML 코드 입력 메커니즘 결함(예 를 들 어 효과 적 인 검증 제한 이 없 는 표 필드)을 이용 하여 웹 페이지 의 동적 생 성 을 바 꾸 는 내용 을 말한다.시스템 명령 을 사용 하여 원 격 데 이 터 를 사용 하여 실행 할 명령 을 구성 할 수 있 습 니 다.
PHP 에 서 는 다음 네 가지 함 수 를 사용 하여 외부 응용 프로그램 이나 함 수 를 실행 할 수 있 습 니 다:system,exec,passthru,셸exec。
정보 출처-합 천 망 안 실험실
명령 공격 은 왜 구멍 이 생 깁 니까?
우선,응용 프로그램 은 시스템 명령 을 실행 하 는 함수,예 를 들 어 위 에서 말 한 phop 중의 system 등 함 수 를 호출 해 야 하기 때 문 입 니 다.그 다음 에 사용자 가 이 함수 의 인 자 를 제어 할 수 있 으 면 일부 악의 적 인 명령 을 정상 적 인 명령 에 연결 한 다음 에 명령 집행 에 구멍 이 생 길 수 있다.
그래서 우 리 는 명령 수행 에 필요 한 조건 을 얻 을 수 있다.
  • 호출 된 실행 시스템 명령 의 함수
  • 사용 자 는 명령 을 제어 하여 악의 적 인 명령
  • 을 연결 할 수 있다.
  • 응용 프로그램 은 사용자 의 입력 을 여과 하지 않 거나 엄격 하지 않 습 니 다
  • 명령 실행 구멍 을 통 해 서버 에 있 는 파일 을 읽 고 쓸 수 있 으 며,이 파일 들 은 암호 와 같은 민감 한 파일 을 사용자 에 게 보 여주 고 싶 지 않 습 니 다.그리고 저 희 는 명령 을 통 해 서버 의 원 격 서 비 스 를 열 수 있 습 니 다.그러면 서버 의 셸 을 받 아 서버 나 이 웹 페이지 를 조작 할 수 있 습 니 다.게다가 우 리 는 내부 망 에 대해 진일보 한 침 투 를 할 수 있다.
    다음은 실험 을 시작 하 겠 습 니 다.
    1.원 격 서버 에 whoami 명령 을 실행 합 니 다.(whoami 명령 은 현재 사용자 의 신분 을 조회 하 는 명령 입 니 다.예 를 들 어 관리자 나 일반 사용자)
    실험 환경 을 열 어 다음 그림 에서 보 듯 이 우 리 는 그것 으로 하여 금 whoami 명령 을 집행 하 게 해 야 한다.

    돌아 온 결 과 를 보면 서버 는 윈도 우즈 시스템 이 고 뒤에 보충 이 있 을 것 이다.
    서버 의 핵심 코드 는 다음 과 같 습 니 다.

    프로그램 이 GET 매개 변수 ip 를 가 져 온 다음 에 system()함수 에 연결 하여 system()함수 로 ping 기능 을 수행 합 니 다.그러나 여기 서 매개 변수 ip 를 여과 하고 검 측 하지 않 아서 파이프 부 호 를 이용 하여 다른 시스템 명령 을 수행 할 수 있 습 니 다.그 다음 에 파이프 문자 의 보충 이 있 습 니 다.
    "|"windows 에서 앞의 결 과 를 뒤의 입력 으로 생각 하고 ip=127.0.0.1|whoami 으로 시도 해 보 자 는 뜻 입 니 다.

    뒤의 명령 이 성공 적 으로 실행 되 었 습 니 다.우리 의 신분 을 얻 은 것 은 system 입 니 다.
    '&'는 windows 에서 두 명령 을 함께 수행 하고 앞에서 실행 한 다음 에 ip=127.0.0.1&whoami 으로 해 보 자 는 뜻 이다.
    whoami 명령 이 성공 적 으로 실행 되 지 않 았 음 을 알 수 있 습 니 다.그 이 유 는 ulr 에서'&'는 연결 기호 로'%26'으로 바 뀌 기 때 문 입 니 다.그러면 우리 가'%26'을 직접 사용 하면 진정한'&'로 바 뀔 수 있 기 때문에 ip=127.0.0.1%26whoami 을 사용 하여 다시 시도 해 보 세 요.

    명령 이 성공 적 으로 실행 되 었 습 니 다.서버 에서 두 명령(ping 과 whoami)을 실행 한 것 을 볼 수 있 습 니 다.우리 의 신분 은 system 입 니 다.
    "||"windows 에 서 는 앞의 실행 이 실 패 했 을 때 뒤의 것 을 실행 합 니 다.ip=127.0.0.1||whoami 으로 시도 해 보 겠 습 니 다.

    이번 whoami 명령 은 실행 되 지 않 았 습 니 다.이것 은 앞의 명령 이 실 행 될 수 있 기 때 문 입 니 다.우 리 는 앞의 명령 을 실행 할 수 없 는 것 으로 만 들 면 다음 명령 을 자동 으로 실행 할 수 있 습 니 다.앞에서 제공 한 핵심 코드 에 따라 정상 적 인 ip 주소 만 들 어 오 면 명령(ping)이 성공 적 으로 실 행 될 것 이라는 것 을 알 고 있 습 니 다.그래서 우 리 는 ip 주 소 를 없 애 보 겠 습 니 다.ip=||whoami 으로 해 보 겠 습 니 다.

    명령 실행 에 성 공 했 습 니 다.우리 의 신분 은 system 입 니 다.
    2.원 격 서버 로 하여 금 ipconfig 명령 을 실행 하 게 합 니 다.
    서버 의 키 코드 는 다음 과 같 습 니 다.

    보충:
    preg_match()함 수 는 정규 표현 식 과 일치 하 는 데 사 용 됩 니 다.1 을 성공 적 으로 되 돌려 주 었 습 니 다.그렇지 않 으 면 0 을 되 돌려 줍 니 다.
    preg_match()매 칭 이 한 번 성공 하면 매 칭 이 중단 되 며,모든 결과 의 매 칭 을 실현 하려 면 preg 를 사용 해 야 합 니 다.match_all()함수.
    header()함수 의 역할 은 클 라 이언 트 에 원본 HTTP 헤더[Http Header]를 보 내 는 것 입 니 다.헤더(header)는 서버 가 HTTP 협의 로 HTML 자 료 를 브 라 우 저 에 전송 하기 전에 보 낸 문자열 로 헤더 와 HTML 파일 사이 에 빈 줄 로 구분 해 야 합 니 다.
    이 코드 는 ip 주 소 를 간단하게 걸 러 냈 습 니 다.일치 하면 아래 system 명령 을 실행 합 니 다.일치 하지 않 으 면 아래 명령(즉 ping)을 실행 할 수 없습니다.즉,우리 가 시작 할 때 본 인터페이스 입 니 다.

    그래서 우 리 는 서버 에 ipconfig 를 실행 시 키 려 고 합 니 다.먼저 생각 한 아 이 디 어 는 오류 가 발생 하고 실행 에 실 패 했 습 니 다.더 블 파 이 프 를 사용 하여 ipconfig 를 실행 하 게 하 는 것 입 니 다.그 다음 에 ip=127.||ipconfig 으로 시도 해 보 겠 습 니 다.

    성공 하 다.
    마찬가지 로 우 리 는 단일 파이프(ip=127.0.0.1|ipconfig)를 사용 하여 시험 해 보 자.

    성공 하 다.
    계속,우 리 는"%26"(ip=127.0.0.1%26ipconfig)을 사용 하여 시험 해 봅 시다.


    두 명령 을 실 행 했 습 니 다.성공!
    지식
    우 리 는 ping 명령 을 통 해 결과 의 TTL 항목 을 되 돌려 서버 의 운영 체 제 를 볼 수 있다.LINUX―64 WIN2K/NT―128 WINDOWS 시리즈―32 UNIX 시리즈―255(앞 은 운영 체제,뒤 는 TTL 값)는 ping 을 통 해 결 과 를 되 돌려 주 고 TTL 값 이 어떤 것 과 가장 가 까 운 지,서버 는 어떤 운영 체제 인지 볼 수 있다.
    우리 핑 한번 해 보 자.바 이 두 한번 해 보 자.

    TTL 값 이 52 이면 64 와 12 개의 경 로 를 뛰 어 넘 기 때문에 서버 는 LINUX 일 것 입 니 다.
    다음은 자주 사용 하 는 파이프 부 호 를 보충 합 니 다.
    Windows 시스템 이 지원 하 는 파이프 문 자 는 다음 과 같 습 니 다.
  • "|":뒤의 문 구 를 직접 집행 합 니 다.
  • "||":앞의 문 구 를 실행 하 는 데 실패 하면 뒤의 문 구 를 실행 하고 앞의 문 구 는 가짜 일 수 밖 에 없습니다.
  • "&":두 명령 을 모두 집행 하고 앞의 문장 이 가짜 라면 뒤의 문장 을 직접 집행 하 며 앞의 문장 은 정말 가짜 입 니 다.
  • "&&":앞의 문장 이 가짜 라면 바로 오류 가 발생 하고 뒤의 문장 도 실행 하지 않 습 니 다.앞의 문장 이 진실 이면 두 명령 이 모두 실 행 됩 니 다.앞의 문장 은 진실 일 수 밖 에 없습니다.
  • Linux 시스템 이 지원 하 는 파이프 부 호 는 다음 과 같 습 니 다.
  • “;”:앞의 문 구 를 실행 하고 뒤의 문 구 를 집행 하 다.
  • "|":뒤의 문장의 실행 결 과 를 보 여 줍 니 다.
  • "||":앞의 문 구 를 잘못 실 행 했 을 때 뒤의 문 구 를 실행 합 니 다.
  • "&":두 명령 을 모두 실행 합 니 다.앞의 문장 이 가짜 라면 뒤의 문장 을 실행 합 니 다.앞의 문장 은 정말 가짜 입 니 다.
  • "&&":앞의 문장 이 가짜 라면 바로 오류 가 발생 하고 뒤의 문장 도 실행 하지 않 습 니 다.앞의 문장 이 진실 이면 두 명령 이 모두 실 행 됩 니 다.앞의 문장 은 진실 일 수 밖 에 없습니다.
  • 요약:코드 를 분석 해 야 하 는 이런 문 제 는 방심 해 서 는 안 되 고 무슨 뜻 인지 잘 읽 어야 비밀 을 풀 수 있다.이번 실험 은 결코 어렵 지 않 았 다.예전 에 CTF-웹 문 제 를 풀 때 만난 적 이 있다.그것 은 이것 과 차이 가 많 지 않 고 코드 구조 url 을 분석 하여 flag 를 얻 었 다.
    위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 php 명령 주입 공격 에 대한 상세 한 통합 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기