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