Linux系统使用指南&渗透测试命令

Linux是一种免费使用和自由传播的类UNIX操作系统,继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的Debian、Arch Linux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

相关阅读:macOS终端常用指令大全&疑难解析

Linux常用命令大全:

Hyplus目录

1 目录结构

在Linux或Unix操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。/表示根目录,.(或./)代表当前目录,..(或../)代表上一层目录。目录或文件名以.开始表示是隐藏目录或文件(如.bashrc)。

1.1 系统目录

根目录下各目录与系统文件的详解如下所示——

系统启动必须:

  • /boot:存放的启动Linux时使用的内核文件,包括连接文件以及镜像文件。
  • /etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
    • /etc/rc.d:系统服务程序
    • /etc/sysconfig:系统配置
    • /etc/X11:X11配置
    • /etc/cron.d:cron服务配置
  • /lib:存放基本代码库(如C++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /sys:(Linux2.6内核重大变化)该目录下安装了2.6内核中新出现的文件系统sysfs,其集成了以下3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。

指令集合:

  • /bin:存放最常用的程序和指令。
  • /sbin:只有系统管理员能使用的程序和指令。

外部文件管理:

  • /dev:存放Linux的外部设备(Device)。注意在Linux中访问设备和访问文件的方式是相同的。
  • /media:Linux系统会自动识别一些设备,例如U盘、光驱等,识别后linux会将设备放到该目录下。
  • /mnt:临时挂载其他文件系统。可以将光驱挂载在该目录下,然后进入该目录即可查看光驱中的内容。

临时文件:

  • /run:临时文件系统,存储系统启动以来的信息。当系统重启时,该目录下的文件会被删掉或清除。如果你的系统上有/var/run目录,应让其指向run
  • /lost+found:一般情况下为空,系统非法关机后,此处会存放一些文件。
  • /tmp:用于存放一些临时文件。

账户:

  • /root:系统管理员的用户主目录。
  • /home:用户的主目录,以用户的账号命名。
  • /usr:用户的应用程序和文件都放在该目录下,类似于Windows中的Program Files目录。
    • /usr/bin:系统用户使用的应用程序与指令。
    • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
    • /usr/src:内核源代码默认放置目录。
    • /usr/include:C/C++文件
    • /usr/lib:应用程序库文件
    • /usr/local:用户自行安装的程序
    • /usr/share:共享文档及文件
    • /usr/X11R6:图形界面系统

运行过程中使用:

  • /var:数据目录,存放经常修改的数据。
    • /var/cache:应用程序产生的缓存文件
    • /var/lib:应用程序产生的数据文件
    • /var/log:系统及程序日志文件
    • /var/run:应用程序的进程PID文件
    • /var/spool:数据文件缓冲池
    • /var/www:Web服务默认网页存放目录
  • /proc:管理内存空间,属于虚拟目录(该目录中的内容不在硬盘上而是在内存里),是系统内存的映射。可直接访问该目录来获取系统信息,亦可直接修改其中文件。

扩展:

  • /opt:默认为空,安装的额外软件会放在该目录下。
  • /srv:存放服务启动后需要提取的数据(不用服务器即为空)

1.2 关键目录

以下目录对进行特权升级/执行后期开发有一定启发作用:

路径 描述
/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 挂载的文件系统。

2 渗透测试命令

WIP - Linux 机器的渗透测试命令备忘表

2.1 网络配置与端口枚举

命令 描述
netstat -tulpn 显示对应了进程ID(PID)的网络端口
watch ss -stplu 通过套接字实时观察TCP、UDP端口
lsof -i 显示确认了的连接
macchanger -m MACADDR INTR 修改MAC地址
ifconfig eth0 192.168.2.1/24 设置ID地址
ifconfig eth0:1 192.168.2.3/24 向现有的网络接口添加IP地址
ifconfig eth0 hw ether MACADDR 使用ifconfig修改MAC地址。
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 google.com 阻止从主机访问google.com
echo "1" > /proc/sys/net/ipv4/ip_forward 启用IP转发,将Linux盒子变成一个路由器——由此方便通过这个盒子来进行路由流量的控制
echo "8.8.8.8" > /etc/resolv.conf 使用Google的DNS

2.2 系统信息命令

适用于本地的枚举检查。

命令 描述
whoami 显示当前已登录用户
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脚本历史记录,还有敲入的命令

2.3 基于Redhat/CentOS/RPM的发行版

命令 描述
cat /etc/redhat-release 显示Redhat/CentOS版本号
rpm -qa 在基于RPM的Linux上列出所有已经安装上的RPM包
rpm -q –changelog openvpn 检查已安装的RPM是否针对CVE打了补丁,可以用grep命令过滤出跟CVE有关的输出。

2.4 YUM命令

基于RPM的系统使用了包管理器,可以用这些命令获取到有关已安装包或者其它工具的有用信息。

命令 描述
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 显示一个包的用途,例如Apache HTTPD Server
yum info httpd 显示包的信息、架构、版本等
yum localinstall blah.rpm 使用YUM来安装本地RPM,从资源库进行安装
yum deplist package 显示包的提供方信息
yum list installed | more 列出所有已安装的包
yum grouplist | more 显示所有的YUM分组
yum groupinstall 'Development Tools' 安装YUM分组

2.5 基于Debian/Ubuntu /.deb的发行版

命令 描述
cat /etc/debian_version 显示Debian版本号
cat /etc/*-release 显示Ubuntu版本号
dpkg -l 在基于Debian/.deb的Linux发行版上列出所有已安装的包

2.6 用户管理

命令 描述
useradd new-user 创建一个新的Linux用户。
passwd username 重置Linux用户密码,如果你是root用户,只要输入密码就行了。
deluser username 删除一个Linux用户。

2.7 压缩与解压缩命令

在Linux上解析不同的压缩包(tar、zip、gzip、bzip2等格式),以及其它一些在压缩包中进行搜索等操作的小技巧。

命令 描述
unzip archive.zip 提取zip包中的文件
zipgrep *.txt archive.zip 在一个zip压缩包中搜索
tar xf archive.tar 提取tar包中的文件
tar xvzf archive.tar.gz 提取tar.gz包中的文件
tar xjf archive.tar.bz2 提取tar.bz2包中的文件
tar ztvf file.tar.gz | grep blah 在一个tar.gz文件中搜索
gzip -d archive.gz 提取gzip中的文件
zcat archive.gz 以不解压缩的方式读取一个gz文件
zless archive.gz 用较少的命令实现对.gz压缩包相同的功能
zgrep 'blah' /var/log/maillog*.gz 对.gz压缩包里的内容执行搜索,例如被压缩过的日志文件
vim file.txt.gz 使用vim读取.txt.gz文件
upx -9 -o output.exe input.exe 使用UPX压缩.exe文件
zip -r file.zip /dir/* 创建一个.zip文件
tar cf archive.tar files 创建一个tar文件
tar czf archive.tar.gz files 创建一个tar.gz文件
tar cjf archive.tar.bz2 files 创建一个tar.bz2文件
gzip file 创建一个.gz文件

2.8 文件命令

命令 描述
df -h blah 显示文件/目录的大小
diff file1 file2 比对/显示两个文件之间的差别
md5sum file 生成MD5摘要
md5sum -c blah.iso.md5 检查文件的MD5摘要(此处假设文件和.md5处在相同的路径下)
file blah 查找出文件的类型,并显示文件是32还是64位
dos2unix 将Windows的行结束符转为Unix/Linux的
base64 < input-file > output-file 对输入文件进行Base64编码,然后该Base64编码文件
base64 -d < input-file > output-file 对输入文件进行Base64解码,然后该Base64解码文件
touch -r ref-file new-file 使用来自于引用文件的时间戳数据创建一个新文件(-r用于简单创建)
rm -rf 不显示确认提示就删除文件和目录

2.9 其他命令

命令 描述
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 修改文件/目录的权限设定(详见文件系统权限)

3 文件系统权限

Linux文件系统权限通过符号表示法八进制数值表示法共同标识。符号表示法由9个字符组成,按所有者(Owner)- 所属组(Group)-其他用户(Others)划分为三组,每组 3 个字符依次对应读(r)、写(w)、执行(x)权限,若某权限未开启则用“-”替代;八进制数值表示法通过累加每组权限对应数值(r=4w=2x=1)得到,用于快速设置权限。
我将以清晰的Markdown表格格式呈现Linux文件系统权限内容,表格前会先以准确正式的语言说明权限表示法,确保信息结构清晰、易于查阅。

八进制取值 意义
777 rwxrwxrwx:所有用户(所有者、所属组、其他用户)均具备读、写、执行权限,无权限限制。
755 rwxr-xr-x:所有者拥有读、写、执行权限,所属组与其他用户仅拥有读、执行权限。
700 rwx------:仅所有者拥有读、写、执行权限,所属组与其他用户无任何权限。
666 rw-rw-rw-:所有用户均拥有读、写权限,无执行权限。
644 rw-r--r--:所有者拥有读、写权限,所属组与其他用户仅拥有读权限。
600 rw-------:仅所有者拥有读、写权限,所属组与其他用户无任何权限。

《Linux系统使用指南&渗透测试命令》有1条评论

  1. Pingback: 网络安全基础教程(1):基础入门 – Hyperplasma

发表评论