Howie's Notes

Machine Learning and Cyber Security

HTTP,全称 Hypertext Transfer Protocol,即超文本传输协议。HTTP 定义了 Web 客户向 Web 服务请求 Web 页面的方式,以及服务器向客户传送 Web 页面的方式。HTTP 使用 TCP 作为它的支撑运输协议。

术语

在详细解释 HTTP 之前,应当回顾某些 Web 术语。

Web 页面(Web page)(也叫文档)是由对象组成的。一个对象(object)只是一个文件,诸如一个 HTML 文件、一个 JPEG 图形、一个 Java 小程序或一个视频片段这样的文件,且它们可通过一个 URL 地址寻址。多数 Web 页面含有一个 HTML 基本文件(base HTML file)以及几个引用对象。HTML 基本文件通过对象的 URL 地址引用页面中的其他对象。每个 URL 地址由两部分组成:存放对象的服务器主机名和对象的路径名。

因为 Web 浏览器(Web browser)(例如 Chrome 和 Firefox)实现了 HTTP 的客户端,所以在 Web 环境中我们经常交替使用“浏览器”和“客户”这两个术语。Web 服务器(Web server)实现了 HTTP 的服务器端,它用于存储 Web 对象,每个对象由 URL 寻址。流行的 Web 服务器有 Apache 和 Nginx。

Read more »

环境变量

环境变量,顾名思义由环境和变量两部分组成,本质上就是一些变量,每个进程都有一个自己的运行环境,而在这些环境中又有一些定义的变量,Shell 也是如此,同样的,通过 Shell 所运行的命令,相当于从父进程创建了一个子进程,它们共享同样的环境变量。

在 Linux 中,环境变量可以大致分为 Shell 环境变量和用户环境变量两大类,不同的 Shell 有不同的 Shell 环境变量,例如 bash 与 Zsh 的 Shell 环境变量就不相同,而用户环境变量通常是由用户自定义的,Shell 环境变量包含了用户环境变量。

在 Linux 中可以使用 declare 命令直接定义 Shell 环境变量,如:

1
2
3
# 定义Shell环境变量A,值为hello,注意等号两边不能有空格
# 按照传统,环境变量一般为全大写
declare A=hello

同样的,在 Linux 中使用 echo 命令即可打印环境变量的值,如:

1
2
3
# 打印A的值,环境变量前需加“$”符号,
# 表示要打印的是环境变量而不是一般字符串
echo $A

值得注意的是,这种定义只对当前终端有效,关闭终端后失效。

常见的 Shell 环境变量有:

  • COLUMNS:当前终端的宽度
  • LINES:当前终端的高度

常见的用户环境变量有:

  • PATH:用以指定命令的搜索目录
  • HOME:用以指定用户的家目录
  • SHELL:用以指定用户的登录 Shell
  • HTTP_PROXY:用以指定终端的 HTTP 代理信息,与下一个变量要同时设置
  • HTTPS_PROXY:用以指定终端的 HTTPS 代理信息
Read more »

source

source a.sh 在当前 Shell 中执行 a.sh,a.sh 不需要有执行权限。source 也可以简写为 .,比如 . a.sh。

sh

sh a.sh 打开一个子 Shell 去执行 a.sh,a.sh 不需要有执行权限。在子 Shell 里执行的 a.sh 里设置的变量,不会影响到父 Shell。类似的,bash 与 sh 同理。

./

./a.sh 打开一个子 Shell 去执行 a.sh,a.sh 需要有执行权限。注意,这里 ./ 与 a.sh 之间没有空格,换个角度看,其实没有使用任何命令,只是指定了当前文件夹下的这个文件而已。这就相当于双击这个文件去运行一样,那这个文件肯定要具有可执行权限。至于为什么要加 ./,我猜想是为了预防与环境变量中相同的名称引起冲突。

前面采用了相对路径的方法,当然也可以采用绝对路径,比如 /root/a.sh 这样,同样可以执行。

另外,./ 运行的文件里通常有 Shebang 一行,也就是以 #! 开头的第一行,用以指明执行这个脚本文件的解释程序。如果没有 Shebang 一行,那么以 ./a.sh 运行脚本时,会自动使用环境变量中的 $SHELL 变量所指定的解释器来运行。

最后,在以 sh a.sh 或 bash a.sh 这样的命令运行脚本时,即使文件中指明了 Shebang,也会自动忽略,因为在命令中已经明确指定了所采用的解释器。

不同 Linux 发行版的主要区别是其包管理机制不同,Linux 发行版大致可以分为 2 个派别:一派以 Red Hat 为首,主要包括 CentOS(社区版)、Fedora(桌面版)等;另一派以 Debian 为首,主要包括 Ubuntu、Kali 等。Red Hat 系采用 rpm 为其包格式,yum 为其包管理工具;Debian 系采用 dpkg 为其包格式,apt-get 为其包管理工具。

rpm 与 yum

rpm 全称 Red-Hat Package Manager(RPM 软件包管理器),是 Red Hat 系中的包格式,同时也是其本地包管理工具,常用命令有:

1
2
rpm -i a.rpm  # 安装a
rpm -e a # 卸载a

yum 全称 Yellow dog Updater, Modified(修改后的黄色狗更新器),是 Red Hat 系中的包管理工具,常用命令有:

1
2
3
4
yum update     # 更新包列表
yum upgrade # 更新包
yum install a # 安装a
yum remove a # 卸载a
Read more »

手机号码

国内手机号码为 11 位数,按照各部分编码的含义可以分为 3 段:前 3 位是网络识别号,用以标识一个通信运营商;第 4-7 位是地区编码,由 HLR 归属位置寄存器确定;第 8-11 位是用户号码,此段随机分配。

身份证号码

国内居民身份证号码为 18 位数,按照各部分编码的含义可以分为 4 段:前 6 位是地址码,即编码对象常住户口所在县的行政区划代码,其中第 1-2 位表示省,第 3-4 位表示市,第 5-6 位表示县;第 7-14 位是出生日期码;第 15-17 位是顺序码,即在地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号,其中第 17 位奇数分给男性,偶数分给女性;第 18 位是校验码,根据前面 17 位数字码,按照如下算法计算出来的:

浏览器密码、历史,电脑密码,邮箱密码,QQ 聊天记录,最近打开的文件,环境变量,持久后门

我们假设客户端为 Windows 系统,服务器为 Linux 系统,下面分别针对客户端与服务器进行信息收集。

Windows

登录密码

Windows 的登录密码保存在 %windir%\System32\config\SAM 中,

Linux

编码

编码(encode)是信息从一种形式或格式转换为另一种形式的过程。相应的,解码(decode)是编码的逆过程。

常见的编码算法有 ASCII 编码、URL 编码、HTML 编码、Base64 编码等。

加密

加密(encryption)是将明文(plaintext,cleartext)信息改变为难以读取的密文(ciphertext)内容,使之不可读。只有拥有解密方法的对象,经由解密(decryption)过程,才能将密文还原为正常可读的内容。

现代密码学中的加密算法可以分为两类:对称加密(Symmetric encryption)和非对称加密(Asymmetric encryption)。

对称加密就是将信息使用一个密钥进行加密,解密时使用同样的密钥,同样的算法进行解密。

非对称加密,又称公开密钥加密,是加密和解密使用不同密钥的算法,一个是公开密钥,一个是私有密钥,一个用作加密的时候,另一个则用作解密,虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个。在通信中,加密通常使用的是对方的公钥,当对方收到密文后可以使用自己的私钥解密。如果加密使用的是自己的私钥,则密文可由任何人解密,由此可验证该文件必定出自该用户,这亦称作数字签名(Digital Signature)。

跑题一下,实际上为了性能,数字签名并不是直接使用私钥加密明文,而是使用私钥加密明文的哈希值。

常见的对称加密算法有 DES、3DES、AES、RC5 等。

常见的非对称加密算法有 RSA、DSA、ECDSA、Elgamal 等。

非对称加密在计算上相当复杂,速度远远比不上对称加密,因此,在一般实际情况下,往往通过非对称加密来随机创建临时的对称密钥,亦即对话键,然后才通过对称加密来传输大量、主体的数据。

加密算法实质上是密码算法中的一种,另一种则是哈希(hash)算法。

Read more »

MACE 时间

和 反取证之 Linux 中的一样,Windows 也有 MAC 时间,不过在 Windows 中,C 指的是 Created,即创建时间,Windows 中默认显示的是修改时间,另外,在 Windows 的 NTFS 文件系统中还有 E 时间,即 MFT entry,其中包含了文件的大量信息,包括大小、名称、目录位置、磁盘位置、创建日期等,在擦除痕迹时也要擦除 E 时间,同样,meterpreter 中的 timestomp 命令可以方便的修改 MACE 时间。

隐藏新建账号

当在目标系统上新建了用户账号后,通常会在登录界面上显示出来,要实现隐藏,可以修改注册表项,采用如下命令:

1
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList /v uname /t REG_DWORD /d 0

注意:这种隐藏只是在登录界面的隐藏,用户使用 net user 或“本地用户和组”仍然可以查到新建的账户。

日志文件

清除相关日志文件

系统日志

Windows 系统日志文件一般存放在 Windows 文件夹下,可以使用如下命令删除之:

1
del %windir%\*.log /a/s/q/f

另外,meterpreter 中的 clearev 命令可以删除事件查看器中的日志信息。

Web 日志

IIS 的日志文件位于 %windir%\System32\LogFiles 目录下。

最后,请不要忘记 HIDS/IPS/WAF/集中的日志服务器的痕迹擦除。

0%