CTF AWD从入门到成长
课时5 AWD攻防Linux基础(二)
文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用ll
或者ls -l
命令来显示一个文件的属性以及文件所属的用户和组,如:
文件属性:连接数:属主:属组:文件大小:修改日期:文件名
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
[d] 表示为目录 [-] 表示为文件 [l] 表示为link file 链接文件 [b] 表示为设备文件中可供存储的接口设备 [c] 表示为设备文件中的串行接口设备,如鼠标、键盘等
第0位确定文件类型
第1-3位确定属主(该文件的所有者)拥有该文件的权限
第4-6位确定属组(所有者的同组用户)拥有该文件的权限
第7-9位确定其他用户拥有该文件的权限
文件 读 写 执行 读 写 执行 读 写 执行
0 1 2 3 4 5 6 7 8 9
[ r]代表可读(read)、[ w]代表可写(write)、[ x]代表可执行(execut e)。这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]。
• 读(r)=4
• 写(w)=2
• 执行(x)=1
• 读+写+执行=4+2+1=7
权限赋予:
chmod 属主:属组:其他用户 目录或文件 (chmod 777 test.php)
user、group、others三种身份的权限,那么可用u、g、o来代表三种身份的权限,此外,用a代表all表示所有的身份。
变更权限的命令的语法为:chmod 身份 符号 权限 文件名或目录名
chmod (u,g,o,a) (+加入,-除去,=设定) (r,w,x) (文件名或目录)
更改文件属性
1、chgrp:更改文件属组
2、chown:更改文件的属主,也可以同时更改文件的属组
chgrp [-R]属组名 文件名
chown [-R]属主名 文件名
chown [-R]属主名:属组名 文件名
用户管理
Linux系统用户是根据用户ID来识别的,默认ID长度为32位,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,分别如下: root用户(ID 0) 系统用户(ID 1-499) 普通用户(ID 500以上)
主办方有可能会藏一个用户在那边,相当于后门
CentOS
在CentOS下useradd与adduser是没有区别的都是在创建用户,在/home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。
Ubuntu
Ubuntu下useradd与adduser有所不同
useradd在使用该命令创建用户是不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,那么这个用户是不能登录的,需要使用passwd命令修改密码。
adduser在使用该命令创建用户是会在/home下自动创建与用户名同名的用户目录,系统shell版本,会在创建时会提示输入密码,更加友好。
userdel 删除用户 userdel只能删除用户,并不会删除相关的目录文件。userdel -r可以删除用户及相关目录。
用户和用户组的对应关系
一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。比如,root。
一对多:即一个用户可以存在多个组中,这个用户就具有这些组。
多对一:即多个用户可以存在一个组中,这些用户这些组的共同权限。
多对多:即多用户可以存在于多个组中。并且几个用户可以归属相同的组;其实多对多的关系是前面三条的扩展。
Linux 系统中的账号文件
用户名配置文件/etc/passwd
。
该文件中的每一行对应一个用户,包含以下 7 个字段:
1. 用户名。
2. 密码(已经加密)。
3. UID(用户标识),操作系统自己用的。
4. GID(组标识)。
5. 用户全名或本地账号。
6. 开始目录。
7. 登录使用的 Shell,就是对登录命令进行解析的工具。
用户密码配置文件/etc/shadow
(1):帐号名称
(2):密码:这里是加密过的,但高手也可以解密的。要主要安全问题(代! 符号标识该帐号不能用来登录)
(3):上次修改密码的日期
(4):密码不可被变更的天数
(5):密码需要被重新变更的天数(99999表示不需要变更)
(6):密码变更前提前几天警告
(7):帐号失效日期
(8):帐号取消日期
(9):保留条目,目前没用
用户组密码配置文件/etc/gshadow
第一字段:用户组名;
第二字段:用户组的密码;
第三字段:用户组管理员的账号;
第四字段:此用户组所包含的用户
命令
- groupadd
注:添加用户组;
列: groupadd test - groupmod
注:修改用户组信息
列 (1): groupmod -g test1 test // 修改用户组名称
列 (2): groupmod -g 1234 test1 // 修改用户组编号 - groupdel
注:删除用户组
列: groupdel test1 - groups
注:查看用户的用户组信息 - useradd
注:创建用户
列 (1): useradd test
列 (2): useradd -g user test // 创建 test 用户,并指定用户组 user - usermod
注:修改用户信息
列 (1): usermod -c admin123 test // 修改 test 用户描述信息为 admin123
列 (2): usermod -l test1 test // 修改 test 名称位 test1
列 (3): usermod -g user test1 // 修改用户的用户组
列 (4): userdel test1 // 删除用户
vim编辑器
vim的工作模式
vim比vi高级
vim 有三种工作模式:
1、命令模式 只能查看内容
2、输入模式 可以对内容进行修改
3、末行模式 可以对内容执行命令
按键说明:
h左/l右/j下/k上/w下一个单词/b上一个单词
文件删除
x 删除游标所在的字符或者输入10x,删除10个连续字符
X 删除游标所在前一个字符
Delete 同x
dd 删除整行或者输入3dd,将会删除3行文本
dw 删除一个单词(不适用中文)
d$或D 删除至行尾
d^ 删除至行首
dG 删除到文档结尾处
d1G 删至文档首部
文件复制
yy:复制光标所在的整行
Y 或 y$ 复制从光标所在处开始到行尾的内容
y0 复制从光标前一个字符开始到行首的内容
y( 复制到上一句的开始
y) 复制到下一句的开始
z) yw 复制一个单词
文件粘贴选择
p 命令:粘贴命令,粘贴当前缓冲区中的内容。
v命令:在命令模式下进行文本选择。在需要选择的文本的起始处按下v键进入块选择模式,然后移动光标到块尾处。这之间的部分被高亮显示,表示被选中。
V命令:在命令模式下按行进行文本选择。在需要选择的文本的第一行按下V键,然后移动光标到块的最后一行。这之间的所有行被高亮显示,表示被选中。
撤销命令
u 命令:该命令撤销上一次所做的操作。多次使用u命令会一步一步依次撤销之前做过的操作(在一次切换到文本输入模式中输入的所有文本算一次操作)。
U 命令:该命令会一次性撤销自上次移动到当前行以来做过的所有操作,再使用一次U命令则撤销之前的U命令所做的操作,恢复被撤销的内容。
查找检索命令
/查找内容
?查找内容
n 重复上一条检索命令
N命令重复上一条检索命令,但检索方向改变。例如上次的检索命令是向前检索,那么此次检索的方向是向后;如果上次的检索命令是向后检索,那么此次检索的方向是向前。
命令 说明
:q! 强制退出,不保存
:q 退出
:wq! 强制保存并退出
:w <文件路径> 另存为
:saveas 文件路径 另存为
:x 保存并退出
:wq 保存并退出
ZZ保存并退出相当于 wq
按键 作用
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,相当于Home键
Ctrl+e 将光标移至输入行末,相当于End键
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动
Shift+zz 普通模式下输入即可保存退出vim
末行模式
行号设置命令:set nu (nonu)
显示设置命令:set hlsearch (nohlsearch)
语法缩进命令:set autoindent
文件存储命令:set backup(nobackup)
显示选项命令:set all
语法高亮命令:syntax on (off)
大小写区分命令:set ignorecase(noignorecase)
课时6 AWD流量分析(一)
软防御,看流量,自己没有扫到,但是别人挖到了
AWD比赛中我们会进行流量监控,通过linux中的tcpdump进行流量记录,我们记录了流量之后可以对我们的攻击进行分析,我们通过wireshark查看流量包对我们哪里进行了攻击并且对其进行了溯源,进行防御并且编写脚本进行得分。
工具:wireshark和tcpdump
三次握手:SYN,SYN+ACK,ACK
过滤规则(Wireshark)
比较运算符 (Comparison operators):
英文写法 | C语言写法 | 含义 |
---|---|---|
eq | == | 等于 |
ne | != | 不等于 |
gt | > | 大于 |
lt | < | 小于 |
ge | >= | 大于等于 |
le | <= | 小于等于 |
逻辑运算符 (Logical expressions):
英文写法 | C语言写法 | 含义 |
---|---|---|
and | && | 逻辑与 |
or | || | 逻辑或 |
xor | ^^ | 逻辑异或 |
not | ! | 逻辑非 |
1、[过滤IP地址]
(1)ip.addr==192.168.1.1
//只显示源/目的IP为192.168.1.1的数据包
(2)not ip.src==1.1.1.1
//不显示源IP为1.1.1.1的数据包
(3)ip.src==1.1.1.1 or ip.dst==1.1.1.2
//只显示源IP为1.1.1.1或目的IP为1.1.1.2的数据包
2、[过滤端口]
(1)tcp.port eq 80
//不管端口是来源的还是目标的都显示
(2)tcp.port == 80
(3)tcp.port eq 2722
(4)tcp.port eq 80 or udp.port eq 80
(5)tcp.dstport == 80
//只显示tcp协议的目标端口80
(6)tcp.srcport == 80
//只显示tcp协议的来源端口80
(7)udp.port eq 15000
(8)tcp.port >= 1 and tcp.port <= 80
//过滤端口范围
3、[过滤MAC地址]
(1)eth.dst == A0:00:00:04:C5:84
//过滤目标MAC
(2)eth.src eq A0:00:00:04:C5:84
//过滤来源MAC
(3)eth.dst == A0:00:00:04:C5:84
(4)eth.dst == A0-00-00-04-C5-84
(5)eth.addr eq A0:00:00:04:C5:84
//过滤来源MAC和目标MAC都等于A0:00:00:04:C5:84的
4、【http请求方式过滤】
(1)http.request.method == "GET"
(2)http.request.method == "POST"
(3)http.host matches "www.baidu.com|baidu.cn"
//matches可以写多个域名
(4)http.host contains "www.baidu.com"
//contains只能写一个域名
(5)http contains "GET"
5、[http请求方式过滤]
http.request.method == "GET" && http contains "Host:"
http.request.method == "GET" && http contains "User-Agent:"
http.request.method == "POST" && http contains "Host:"
http.request.method == "POST" && http contains "User-Agent:"
http contains "HTTP/1.1 200 OK" && http contains "Content-Type:"
http contains "HTTP/1.0 200 OK" && http contains "Content-Type:"
Tcpdump
常用参数
tcpdump采用命令行方式,它的命令格式为:
tcpdump [-adeflnNOpqStvx] [-c 数量]
[-F 文件名] [-i 网络接口]
[-r 文件名] [-s snaplen]
[-T 类型] [-w 文件名] [表达式]
选项介绍
• -A
以ASCII格式打印出所有分组,并将链路层的头最小化。
• -C
在收到指定的数量的分组后,tcpdump就会停止。
• -C
在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数filesize中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数filesize的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。
• -d
将匹配信息包的代码以人们能够理解的汇编格式给出。
• -dd
将匹配信息包的代码以C语言程序段的格式给出。
• -ddd
将匹配信息包的代码以十进制的形式给出。
• -D
打印出系统中所有可以用tcpdump截包的网络接口。
• -e
在输出行打印出数据链路层的头部信息。
• -E
用spi@ipaddr algo:secret
解密那些以addr
作为地址,并且包含了安全参数索引值spi
的IPsec ESP分组。
• -f
将外部的Internet地址以数字的形式打印出来。
• -F
从指定的文件中读取表达式,忽略命令行中给出的表达式。
• -i
指定监听的网络接口。
• -l
使标准输出变为缓冲行形式,可以把数据导出到文件。
• -L
列出网络接口的已知数据链路。
• -m
从文件module
中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
• -M
如果tcp报文中存在TCP-MD5选项,则需要用secret
作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
• -b
在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
• -n
不把网络地址转换成名字。
• -nn
不进行端口名称的转换。
• -N
不输出主机名中的域名部分。例如,nic.ddn.mil
只输出nic
。
• -t
在输出的每一行不打印时间戳。
• -O
不运行分组分组匹配(packet-matching)代码优化程序。
• -P
不将网络接口设置成混杂模式。
• -q
快速输出。只输出较少的协议信息。
• -r
从指定的文件中读取包(这些包一般通过-w
选项产生)。
• -S
将tcp的序列号以绝对值形式输出,而不是相对值。
• -S
从每个分组中读取最开始的snaplen
个字节,而不是默认的68个字节。
• -T
将监听到的包直接解释为指定的类型的报文,常见的类型有rpc
(远程过程调用)和snmp
(简单网络管理协议)。
• -t
不在每一行中输出时间戳。
• -tt
在每一行中输出非格式化的时间戳。
• -ttt
输出本行和前面一行之间的时间差。
• -tttt
在每一行中输出由date
处理的默认格式的时间戳。
• -u
输出未解码的NFS句柄。
• -V
输出一个稍微详细的信息,例如在ip包中可以包括ttl
和服务类型的信息。
• -vv
输出详细的报文信息。
• -W
直接将分组写入文件中,而不是不分析并打印出来。
列举1:(端口过滤)
抓取所有经过ens33,目的或源端口是22的网络数据:
tcpdump -i ens33 port 22
指定源端口:tcpdump -i ens33 src port 22
指定目的端口:tcpdump -i ens33 dst port 22
列举2:(网络过滤)
tcpdump -i ens33 net 192.168.1.1
tcpdump -i ens33 src net 192.168.1.1
tcpdump -i ens33 dst net 192.168.1.1
列举3:(协议过滤)
tcpdump -i ens33 arp
tcpdump -i ens33 ip
tcpdump -i ens33 tcp
tcpdump -i ens33 udp
tcpdump -i ens33 icmp
课时7 AWD流量分析(二)
在攻防比赛中,如何通过TCP dump和Winshark工具结合进行流量分析,识别攻击来源。内容涵盖了TCP dump的抓包命令使用技巧,如指定网卡、端口等。随后,通过实战实验展示了如何利用靶机的多个漏洞,包括命令执行、文件包含、SQL注入和文件上传漏洞,进行渗透测试,演示如何通过流量分析发现这些攻击行为。
使用命令进行抓包:
root@user:~# tcpdump -i eth0 -s 0 -w c.pcap port 8801
监控的时候基本只保留服务端口,不然抓的包太乱
1、命令执行
筛HTTP,然后找特殊的包,追踪HTTP流,看到shell=
,
2、文件包含
筛完HTTP,筛选字符串flag
3、SQL注入
文件-导出-HTTP
4、万能密码
首先,外部的端口直接筛选http
,其余不用看,然后追踪TCP流和HTTP流
,然后用查找来定位,搜索password
,看一下哪个目录,先找一下对应的包(如login.php目录),筛选一下再追踪流,docker配出的环境基本都是http
5、文件上传
筛HTTP,然后找upload
,追踪流一眼过去就能看到eval木马,
或者通过日志监控(脚本)
python sqlmap.py -u “xx.xx.xx.xx:port/xx.php?id=1”
log_record.php
试试通防扣不扣分,流量可能比较多,自己写脚本log比较好用
终于又开始写了,这学期的课结束了,快点填坑