Linux信息自动化收集
程序地址: https://github.com/l3m0n/linux_information
两年前写的东西,写的比较烂,公开出来与大家交流一下。
当前权限判断:是否为root
whoami
1、系统区分
debian系列:debian、ubuntu
redhat系列:redhat、centos
是否为docker、或者为虚拟机
分为通用模块、单独模块的信息获取
2、系统信息收集
内核(是否为x64还是x86):uname -a
版本:cat /etc/issue
cat /etc/*-release
网络地址\mac地址\ipv6地址:ifconfig
主机名:hostname
hosts:
cat /etc/hosts
cat /etc/resolv.conf
3、用户信息
who
last
系统用户:
获取用户名、gid、uid、home路径:awk -F ':' '{print $1,$3,$4,$6;}' /etc/passwd
获取用户组:cat /etc/group
**获取hash**:cat /etc/shadow
列出超级用户:grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}'
查看用户操作:cat ~/.bash_history
获取在线用户:w
4、服务程序
需要实现:得到系统安装程序以及服务,版本信息和运行权限,用文档封装一下
端口:netstat
进程:ps -aux
ps -A -o user,pid,tty,start,time,command | grep -E "[^]]$"
程序:
dpkg -l
rpm -qa
5、敏感文件
/etc/目录下
计划任务
日志文件
bash_history
find / -type f -iname "*.bash_history" -o -iname "*config*" -o -iname "web.xml" -o -iname "*database*" -o -iname "*pass*" 2>/dev/null
config
web.xml
6、常见可使用程序
nmap
nc
netcat
wget
tcpdump
wireshark
rpm
yum
apt-get
ftp
ssh
telnet
scp
nslookup
ruby
6、交互通信的ip
hosts
netstat -antpu
arp -a
tracert
7、提权帮助
根据内核去确认漏洞
8、信息展示
整体流程:信息获取 -> 信息处理 -> 信息输出
系统信息:
内核、x86|x64、主机类型、主机名
ip地址、mac地址
是否存在exp获取root
用户信息:
存在的用户、在线用户
用户组
last信息
用户操作信息 .bash_history
用户hash
服务信息:
端口,可能的服务名
进程,可能的进程名,进程权限,进程开启时间
文件信息:
敏感文件(password/config/database)
打包文件+运行文件(.zip/.tar.gz/.pl/.sh/.py)
服务配置文件(httpd.conf)
log文件(做处理,只显示log所在目录)
常见的信息文件扫描
//需要通过上面获取的信息整理出来
程序信息:
程序名、程序端口、运行的进程、版本、配置文件
命令信息:
可执行的一些程序
通信信息:
hosts
arp缓存
端口
结构信息:
内网主机存活
9、参考
基础内核信息:
uname -a 2>/dev/null
cat /proc/version 2>/dev/null
cat /etc/*-release 2>/dev/null
主机名:
hostname 2>/dev/null
最后用户登录的信息:
lastlog |grep -v "Never" 2>/dev/null
strips out username uid and gid values from /etc/passwd
cat /etc/passwd | cut -d ":" -f 1,2,3,4 2>/dev/null
列出所有用户的组
for i in $(cat /etc/passwd 2>/dev/null| cut -d":" -f1 2>/dev/null);do id $i;done 2>/dev/null
查询是否有hash存储在/etc/passwd(*nix中)
grep -v '^[^:]*:[x]' /etc/passwd 2>/dev/null
根据uid列出本地用户:
grep -v "^#" /etc/passwd | awk -F: '$3 == 0 || $3 == 500 || $3 == 501 || $3 == 502 || $3 == 1000 || $3 == 1001 || $3 == 1002 || $3 == 2000 || $3 == 2001 || $3 == 2002 { print }'
读取shadow文件
cat /etc/shadow 2>/dev/null
bsd的shadow文件
cat /etc/master.passwd 2>/dev/null
能够sudo不需要提供密码
echo '' | sudo -S -l 2>/dev/null
检查root目录是否存在
ls -ahl /root/ 2>/dev/null
显示home目录情况
ls -ahl /home/ 2>/dev/null
寻找文件我们能写但是不属于我们的文件
find / -writable -not -user \`whoami\` -type f -not -path "/proc/*" -exec ls -al {} \; 2>/dev/null
寻找ssh公钥
find / -name "id_dsa*" -o -name "id_rsa*" -o -name "known_hosts" -o -name "authorized_hosts" -o -name "authorized_keys" 2>/dev/null |xargs -r ls
root是否能登录ssh
grep "PermitRootLogin " /etc/ssh/sshd_config 2>/dev/null | grep -v "#" | awk '{print $2}'
如果返回yes则可以登录
环境变量
echo $PATH 2>/dev/null
列出能用的shells
cat /etc/shells 2>/dev/null
hash的密码加密政策
cat /etc/login.defs 2>/dev/null | grep "PASS_MAX_DAYS\|PASS_MIN_DAYS\|PASS_WARN_AGE\|ENCRYPT_METHOD" 2>/dev/null | grep -v "#" 2>/dev/null
所有的计划任务配置文件
ls -la /etc/cron* 2>/dev/null
获取计划任务内容
cat /etc/crontab 2>/dev/null
ubuntu获取计划任务
ls -la /var/spool/cron/crontabs 2>/dev/null
ls -la /etc/anacrontab 2>/dev/null; cat /etc/anacrontab 2>/dev/null
ls -la /var/spool/anacron 2>/dev/null
获取每个用户的计划任务
cat /etc/passwd | cut -d ":" -f 1 | xargs -n1 crontab -l -u 2>/dev/null
获取ifconfig
/sbin/ifconfig -a 2>/dev/null
dns设置
cat /etc/resolv.conf 2>/dev/null | grep "nameserver"
路由配置
route 2>/dev/null | grep default
正在监听的tcp端口
netstat -antp 2>/dev/null
udp端口
netstat -anup 2>/dev/null
正在运行的程序
ps aux 2>/dev/null
查看进程路径和权限
ps aux | awk '{print $11}'|xargs -r ls -la 2>/dev/null |awk '!x[$0]++'
获取inetd.conf文件(监视网络的守护进程)
cat /etc/inetd.conf 2>/dev/null
cat /etc/inetd.conf 2>/dev/null | awk '{print $7}' |xargs -r ls -la 2>/dev/null
cat /etc/xinetd.conf 2>/dev/null
cat /etc/xinetd.conf 2>/dev/null | awk '{print $7}' |xargs -r ls -la 2>/dev/null
列举各种服务的管理脚本
ls -la /etc/init.d 2>/dev/null
寻找不是root的:
find /etc/init.d/ \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null
ls -la /etc/rc.d/init.d 2>/dev/null
find /etc/rc.d/init.d \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null
ls -la /usr/local/etc/rc.d 2>/dev/null
find /usr/local/etc/rc.d \! -uid 0 -type f 2>/dev/null |xargs -r ls -la 2>/dev/null
获取mysql版本
mysql --version 2>/dev/null
mysqladmin -uroot version 2>/dev/null
获取sudo版本
sudo -V 2>/dev/null| grep "Sudo version" 2>/dev/null
测试root/root能否登录
mysqladmin -uroot -proot version 2>/dev/null
postgres版本
psql -V 2>/dev/null
登录成功
psql -U postgres template0 -c 'select version()' 2>/dev/null | grep version
apache详情
apache2 -v 2>/dev/null; httpd -v 2>/dev/null
apache的运行用户
cat /etc/apache2/envvars 2>/dev/null |grep -i 'user\|group' |awk '{sub(/.*\export /,"")}1'
plan(could contain useful information)
find /home /usr/home -iname *.plan -exec ls -la {} \; -exec cat {} 2>/dev/null \;
rhosts(these may allow us to login as another user etc.)
find /home -iname *.rhosts -exec ls -la {} 2>/dev/null \; -exec cat {} 2>/dev/null \;
.plan
.rhosts
hosts.equiv
/etc/exports
.conf
.log
.ini
.*_history
/root/.*_history
ls -la /var/mail 2>/dev/null
head /var/mail/root 2>/dev/null
软件安装判断流程
dpkg -l
rpm -qa
etc目录配置文件
know it then do it