以下是Linux机器的渗透测试备忘录,我无意间在网上看到的,便搬运到这边。
Linux机器渗透测试#
| 命令 | 描述 |
|---|
| netstat -tulpn | 在Linux中显示对应于ID(PID)的网络端口 |
| watch ss -stplu | 通过套接字实时观察TCP,UDP端口 |
| lsof -i | 显示确认了的连接 |
| macchanger -m MACADDR INTR | 在KALI Linux上修改MAC地址 |
| ifconfig eth0 192.168.2.1/24 | 在Linux中设置ID地址 |
| ifconfig eth0:192.168.2.3/24 | 在Linux中向现有的网络接口添加IP地址 |
| ifconfig eth0 hw ether MAC ADDR | 使用ifconfig修改Linux中的地址 |
| ifconfig eth0 mtu 1500 | 使用ifconfig修改MTU的大小,将1500改为想要的MTU |
| dig -x 192.168.1.1 | 对IP地址进行反向查找 |
| host 192.168.1.1 | 在一个IP地址上进行反向查找,适用于没有安装dig的情况 |
| dig @192.168.2.2 domain.com -t AXFR | 使用dig执行一次DNS区域传输 |
| host -l domain.com nameserver | 使用host执行一次DNS区域传输 |
| nbtstat -A x.x.x.x | 获取IP地址对应的域名 |
| ip addr add 192.168.2.22/24 dev eth0 | 添加一个隐藏的IP地址,执行ifconfig时不会显示这个IP地址 |
| tcpkill -9 host goole.com | 阻止从主机访问goole.com |
| echo "1">/proc/sys/net/ipv4/ip_forward | 启用IP转发,将Linux盒子变成一个路由器——这样就方便通过这个盒子进行路由流量的控制 |
| echo "8.8.8.8">/etc/resolv.conf | 使用Goole的DNS |
系统信息命令#
对于本地的枚举检查有很大的帮助
| 命令 | 描述 |
|---|
| whoami | 显示Linux上当前已登录用户 |
| id | 向用户显示当前已登录的用户和组 |
| last | 显示最后一次登录的用户 |
| mount | 显示已挂载的驱动 |
| df -h | 用人类可读的输出显示磁盘使用情况 |
| echo "user:passwd" | chpasswd | 用一行命令重置密码 |
| getent passwd | 列出Linux上的用户 |
| strings /usr/local/bin/blah | 显示非文本文件的内容,例如:一个二进制文件里面有什么 |
| uname -ar | 显示运行中的内核版本 |
| PATH=$PATH:/my/new-path | 添加一个新的路径,方便进行蹦迪文件系统(FS)操作 |
| history | 显示用户在之前执行的bash脚本历史记录,还有敲入的命令 |
基于Redhat/CentOS/RPM的发行版#
| 命令 | 描述 |
|---|
| cat /etc/redhat-release | 显示Redhat/CentOS版本号 |
| rpm -qa | 在基于RPM的Linux上列出所有已经安装上的RPM包 |
| rpm -q --changelog openvpn | 检查已安装的RPM是否针对CVE打了补丁,可以用grep命令过滤出跟CVE有关的输出 |
YUM命令#
| 命令 | 描述 |
|---|
| yum update | 使用YUM更新所有的RPM包,也会显示出哪些已经过时了 |
| yum update httpd | 更新单独的包,在此例中是HTTPD(Apache) |
| yum install package | 使用YUM安装一个包 |
| yum --exclude=package kernel* update | 在使用YUM时将一个包排除在外不更新 |
| yum remove package | 使用YUM删除包 |
| yum erase package | 使用YUM删除包 |
| yum list package | 列出有关YUM包的信息 |
| yum provides httpd | 显示一个包的用途 |
| yum info httpd | 显示包信息,架构,版本等信息 |
| yum local install blah.rpm | 使用YUM来安装本地RPM,从资源库进行安装 |
| yum deplist package | 显示包的提供方信息 |
| yum list installed | more | 列出所有已安装的包 |
| yum grouplist | more | 显示所有的YUM分组 |
| yum groupinstall 'Development Tools' | 安装YUM分组 |
基于Debian/Ubuntu/.deb的发行版#
| 命令 | 描述 |
|---|
| cat /etc/debian_version | 显示Debian版本号 |
| cat /etc/*-release | 小时Ubuntu版本号 |
| dpkg -l | 在基于Debian/.deb的Linux发行版列出所有已安装的包 |
Linux用户管理#
| 命令 | 描述 |
|---|
| useradd new-user | 创建一个新的Linux用户 |
| passwd username | 重置Linux用户密码,如果你是root用户,只要输入密码即可 |
| userdel username | 删除一个Linux用户 |
用户创建命令#
adduser:会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本
用户删除命令#
userdel:删除用户,添加选项-r可以删除与用户相关的所有文件,-f可强制删除用户,即使用户处于登录状态
deluser:将一个用户从一个组中删除(即退出用户组)deluser username usergroup
Linux解压缩命令#
| 命令 | 描述 |
|---|
| unzip archive.zip | 在Linux上提取zip包中的文件 |
| zipgrep *.txt archive.zip | 在一个zip压缩包中搜索 |
| tar xf archive.tar | 在Linux上提取tar包中的文件 |
| tar xvzf archive.tar.gz | 在Linux上提取tar.gz包中的文件 |
| tar xjf archive.tar.bz2 | 在Linux上提取tar.bz2包中的文件 |
| tar ztvf file.tar.gz | grep blah | 在一个tar.gz文件中搜索 |
| gzip -d archive.gz | 在Linux上提取gzip中的文件 |
| zcat archive.gz | 在Linux上以不解压缩的方式读取一个.gz文件 |
| zless archive.gz | 用较少的命令实现对.gz压缩包相同的功能 |
| zgrep 'blah' /var/log/maillog*.gz | 在Linux上对.gz压缩包里面的内容执行搜索,比如搜索被压缩过的日志文件 |
| vim file.txt.gz | 使用vim读取.txt.gz文件 |
Linux压缩命令#
| 命令 | 描述 |
|---|
| zip -r file.zip /dir/* | 在Linux上创建一个.zip文件 |
| tar cf archive.tar files | 在Linux上创建一个.tar文件 |
| tar czf archive.tar.bz2 files | 在Linux上创建一个tar.gz文件 |
| tar cjf archive.tar.bz2 files | 在Linux上创建一个tar.bz2文件 |
| gzip file | 在Linux上创建一个.gz文件 |
| upx -9 -o output.exe input.exe | 在Linux上使用UPX压缩.exe文件 |
Linux文件命令#
| 命令 | 描述 |
|---|
| df -h blah | 在Linux上显示文件/目录的大小 |
| diff file1 file2 | 在Linux上对比/显示两个文件之间的差别 |
| md5sum file | 在Linux上生成MD5摘要 |
| md5sum -c blah.iso.md5 | 在Linux上检查文件的MD5摘要,这里假设文件和.md5处在相同的路径下 |
| file blah | 在Linux上查找出文件的类型,也会将文件是32还是64位显示出来 |
| dos2unix | 将Windows的行结束符转成Unix/Linux的 |
| base64 input-file output-file | 对输入文件进行Base64编码,然后输出一个叫做output-file的Base64编码文件 |
| base64 -d input-file output-file | 对输入文件进行Base64解码,然后输出一个叫做output-file的Base64解码文件 |
| touch -r ref-file new-file | 使用来自应用文件的时间戳数据创建一个新文件,放上-r以简单地创建一个文件 |
| rm -rf | 不显示确认提示就删除文件和目录 |
Misc命令#
| 命令 | 描述 |
|---|
| init 6 | 从命令行重启Linux |
| gcc -o output.c input.c | 编译C代码 |
| gcc -m32 -o output.c input.c | 交叉编译C代码,在64为Linux上将编译出32位的进制文件 |
| unset HISTORYFILE | 关闭bash历史日志记录功能 |
| rdesktop x.x.x.x | 从Linux连接到RDP服务器 |
| kill -9 $$ | 关掉当前的会话 |
| chown user:group blah | 修改文件或者目录的所有者 |
| chown -R user:group blah | 修改文件或者目录,以及目录下面文件/目录的拥有者——递归执行chown |
| chmod 600 file | 修改文件/目录的权限设定,详情见Linux文件系统权限 |
清除bash历史#
$ ssh user@x.x.x.x | cat /dev/null > ~/.bash_history
.bash_history文件可保存多条历史记录,可通过设置HISTFILESIZE和HISTSIZE参数来减少保存的命令数。
两个参数的意义:
- HISTSIZE: 定义了history命令输出的命令数
- HISTFILESIZE: 定义了.bash_history文件保存的命令数
$ HISTFILESIZE=<num>
$ HISTSIZE=<num>
命令history -c可以清空本次输出的命令,但不清空.bash_history文件,所以下次登陆后,旧命令还将出现。
Linux文件权限#
| 取值 | 意义 |
|---|
| 777 | rwxrwxrwx 没有限制,完全可读可写可执行(RWX),用户可以做任何事情 |
| 755 | rwxr-xr-x 拥有这可完全访问,其他人只能读取和执行 |
| 700 | rwx------ 拥有者可完全访问,其他人都不能访问 |
| 666 | rw-rw-rw- 所有人可以读取和写入,但不可执行 |
| 644 | rw-r--r-- 拥有者可以读取和写入,其他人只可以读取 |
| 600 | rw------- 拥有者可以读取和写入,其他人都不能访问 |
Linux文件系统的渗透测试备忘录#
| 路径 | 描述 |
|---|
| / | /也被称为“斜杠”或者根 |
| /bin | 由系统、系统管理员以及用户共享的通用程序 |
| /boot | Boot文件,启动加载器(grub),内核,vmlinuz |
| /dev | 包含了对系统设备、带有特殊属性的文件的引用 |
| /etc | 重要的系统配置文件 |
| /home | 系统用户的主目录 |
| /lib | 库文件,包括系统和用户都需要的所有类型的程序的文件 |
| /lost+found | 文件操作失败会被保存在这里 |
| /mnt | 外部文件系统的标准挂载点 |
| /media | 外部文件系统(或者某些发行版)的挂载点 |
| /net | 整个远程文件系统的标准挂载点——nfs |
| /opt | 一般都是包含一些附加的或者第三方软件 |
| /proc | 一个包含了系统资源相关信息的虚拟文件系统 |
| /root | root用户的主目录 |
| /sbin | 由系统和系统管理员来使用的程序 |
| /tmp | 供系统使用的临时空间,重启时会被清空 |
| /usr | 供所有用户相关程序使用的程序、库、文档等等 |
| /var | 存储所有由用户创建的可变文件和零食文件,比如日志文件、邮件队列、后台打印程序、Web服务器、数据库等等 |
Linux中一些有趣的文件/目录#
对特权升级/执行后期开发有较大帮助
| 路径 | 描述 |
|---|
| /etc/passwd | 包含了本地Linux的用户 |
| /etc/shadow | 包含了哈希过的本地账户密码 |
| /etc/group | 包含了本地账户分组 |
| /etc/init.d/ | 包含了服务网初始化脚本——具体都安装了写什么值得一看 |
| /etc/hostname | 系统的hostname |
| /etc/network/interfaces | 网络接口 |
| /etc/resolv.conf | 系统的DNS服务 |
| /etc/profile | 系统的环境变量 |
| ~/.ssh/ | SSH密钥 |
| ~/.bash_history | 用户的bash历史日志 |
| /var/log/ | Linux系统的日志文件一般被存放在这里 |
| /var/adm/ | UNIX系统的日志文件一般就被存放在这里 |
| /var/log/apache2/access.log /var/log/httpd/access.log | Apache访问日志文件通常的存放路径 |
| /etc/fstab | 挂载的文件系统 |
突破shell限制#
Python小技巧:
python -c 'import pty;pty.spawn("/bin/bash")'
echo os.system("/bin/bash")
/bin/sh -i
Samba命令#
从Linux连接到Samba共享:
$ smbmount //server/share /mnt/win -o user=username,password=password1
$ smbclient -U user \\\\server\\share
$ mount -t cifs -o username=user,password=password //x.x.x.x/share /mnt/share
Linux爱好者