IP Spoofing 관련 C언어 소스좀 봐주세여.
//raw tcp packet crafter
#include
#include
#include //IP_HDRINCL is here
#pragma comment(lib,"ws2_32.lib") //winsock 2.2 library
typedef struct ip_hdr
{
unsigned char ip_header_len:4; // 4-bit header length (in 32-bit words) normally=5 (Means 20 Bytes may be 24 also)
unsigned char ip_version :4; // 4-bit IPv4 version
unsigned char ip_tos; // IP type of service
unsigned short ip_total_length; // Total length
unsigned short ip_id; // Unique identifier
unsigned char ip_frag_offset :5; // Fragment offset field
unsigned char ip_more_fragment :1;
unsigned char ip_dont_fragment :1;
unsigned char ip_reserved_zero :1;
unsigned char ip_frag_offset1; //fragment offset
unsigned char ip_ttl; // Time to live
unsigned char ip_protocol; // Protocol(TCP,UDP etc)
unsigned short ip_checksum; // IP checksum
unsigned int ip_srcaddr; // Source address
unsigned int ip_destaddr; // Source address
} IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;
// UDP header
typedef struct udp_header
{
unsigned short source_port; // Source port no.
unsigned short dest_port; // Dest. port no.
unsigned short length; // Udp packet length
unsigned short checksum; // Udp checksum (optional)
} UDP_HDR, *PUDP_HDR;
int main()
{
////변수 선언////
char host[100], buf[1000], *data=NULL, source_ip[20]; // packet을 저장할 cahr 배열 변수 필요
SOCKET raw, udp; // socket 2개 선언(raw, udp)
int payload=512; // packet 송수신 시 길이 변수 필요
int optval;// setsockopt시 사용할 변수
-----------------------------------------------------------------------------
// IPHeadr 선언
// UDPHeader 선언
// Server 주소 정보를 저장할 SOCKADDR_IN 구조체 선언
// 자신 UDP 소켓 바인딩을 위한 SOCKADDR_IN 구조체 선언
-----------------------------------------------------------------------------
//Initialise Winsock
WSADATA wsock;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsock) != 0)
{
fprintf(stderr,"WSAStartup() failed");
exit(EXIT_FAILURE);
}
printf("Initialised successfully.");
////////////////////////////////////////////////
//Create Raw TCP Packet
//socket() 함수 사용
printf("nCreating Raw TCP Socket...");
if((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) == SOCKET_ERROR)
{
printf("Creation of raw socket failed.");
return 0;
}
printf("Raw TCP Socket Created successfully.");
///////////////////////////////////////////////
//Put Socket in RAW Mode.
//setsockopt 사용
printf("nSetting the socket in RAW mode...");
if(setsockopt(s, Ipproto_IP, IP_HDRINCL, (char *)&optval, sizeof(optval)) == SOCKET_ERROR)
{
printf("failed to set socket in raw mode.");
return 0;
}
printf("Successful.");
-----------------------------------------------------------------------------
///////////////////////////////////////////////
// 바인딩을 위한 자신의 주소 구조체 setting.
// 이때 port번호는 UDP Header에 Setting한 포트번호로
// recvfrom을 위한 UDP 소켓 생성
// socket()함수 사용
// 포트번호 지정을 위하여 bind() 사용
////////////////////////////////////////////////
//Server 주소 구조체 setting
// IP는 220.149.236.25
// Port는 scanning으로 찾은 후 입력
////////////////////////////////////////////////
-----------------------------------------------------------------------------
// IP Header Setting
// PPT 참조
v4hdr = (IPV4_HDR *)buf;
v4hdr->ip_version = 4;
v4hdr->ip_header_len = 5;
v4hdr->ip_tos = 0;
v4hdr->ip_total_length = htons (sizeof(IPV4_HDR) + sizeof(UDP_HDR) + payload );
v4hdr->ip_id = htons(2);
v4hdr->ip_frag_offset = 0;
v4hdr->ip_frag_offset1 = 0;
v4hdr->ip_reserved_zero = 0;
v4hdr->ip_dont_fragment = 1;
v4hdr->ip_more_fragment = 0;
v4hdr->ip_ttl = 8;
v4hdr->ip_protocol = IPPROTO_UDP;
v4hdr->ip_srcaddr = inet_addr(source_ip);
v4hdr->ip_destaddr = inet_addr("220.149.236.25");
v4hdr->ip_checksum = 0;
// UDP Header Setting
// PPT 참조
udphdr = (UDP_HDR *)&buf[sizeof(IPV4_HDR)];
udphdr -> source_port = htons(12345);
udphdr -> dest_port = htons (50000);
udphdr -> length = htons(sizeof(buf) - sizeof(IPV4_HDR));
udphdr -> checksum = 0;
// Data Setting
// PPT 참조
data = &buf[sizeof(IPV4_HDR) + sizeof(UDP_HDR)];
strcpy(data, "자신학번/ip주소");
-----------------------------------------------------------------------------
///////////////////////////////////////////////
// Packet Send
// sendto 함수 사용
///////////////////////////////////////////////
// Packet Recieve
// recvfrom 함수 사용
-----------------------------------------------------------------------------
WSACleanup(); // socket terminator
return 0;
}
220.149.236.25 서버에서 취약한 포트번호(3230~3270)를 찾고 key 값을 얻어내는건데
도저히 제 힘으로는 더이상 손을 못대겠어여.ㅠㅠ
이거때문에 아 스트레스가 이만 저만이 아니네여...
고수님들 소스좀 도와주세여....ㅠㅠ
울학교 분이시네
윈도우즈 말고 다른 OS에서 하면 의외로 간단히 될꺼에요 전 OSX로 해결했어요ㅎㅎ
울학교 분이시네
윈도우즈 말고 다른 OS에서 하면 의외로 간단히 될꺼에요 전 OSX로 해결했어요ㅎㅎ
어째... 우리학교 학부생분들 같은 느낌이...
어째... 우리학교 학부생분들 같은 느낌이...
댓글 달기