AWD线下赛经验总结

第二次打ctf国赛了,去年虽然进了分区赛,但是因为疫情还是线上赛,今年进分区赛终于是线下了,这应该是我进大学来第一次打线下赛,都是因为疫情的影响。这次华东南赛区的分区赛打的是AWD,之前只打过一次星盟的AWD,不过是坐在电脑前一下午什么也不会罢了。这次应该才算第一场正式的AWD,正是因为第一次,经验完全不足呀。

下面总结一下这次比赛,从0到1的提升是巨大的。

赛前准备

之前没打过AWD所以对这种形式的比赛没有什么了解,比赛前就根据网上的资料去准备。

大概总结了一下比赛开始需要做的一些基础防御。

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
39
40
41
42
43
44
45
46
1、备份网站
网站
情况一:有tar命令,可以一条命令备份。
tar -zcvf /tmp/web.tar.gz /var/www/html/*
将网站根目录下面的所有文件打包后存到靶机根目录的tmp文件夹下(可根据需要下载到本地)。
情况二:命令用不了
ftp下载到本地

2、备份mysql
方法一:
mysqldump -u root -p test > /tmp/test01.sql(test是数据库名,具体名称可以看网站目录config文件)
方法二:
ftp下载网站目录下面的xxx.sql文件

3、恢复网站,mysql

4、修改ssh密码,mysql密码,网站后台密码
ssh密码修改:
命令行输:passwd
ssh新密码:**********(最好是队友都方便记但又不是弱口令)


mysql密码修改:
mysql命令行下(mysql -u root -p)
set password =password('********');

网站后台密码修改:
后台账号密码一般保存在数据库里,修改也直接在数据库修改即可
show databases;
use test;
show tables;
select * from admin;
update admin set user_name="admin123"; 前一个是原账号
update pass set user_pass="admin1234"; 前一个是原密码

5、关闭多余端口(22803306保留)
netstat -a查看当前开放端口
lsof -i:999查看999端口的进程
kill pid杀进程

D盾,注释代码,不要删文件

6、扫别人的端或者端口
nmap -sP 172.20.128.1/19
nmap 10.241.180.159 -p1-65535
nmap -iL ip.txt

有意思的是我们的赛前准备除了备份其他都用不上,这就是实战和理论的区别吧。

比赛前期

现在总结一下实际上本场比赛开始需要做的。

连接ssh

其实本来连接ssh不值得单独分点讲,但是网上的资料说的连接ssh都是给账号密码,所以连上之后就需要改ssh密码。但是这场比赛给的并不是字符密码,它给了一个key

就是这样一个rsa文件,所以连接ssh的时候,如果是用软件连,那就要把这个文件导入到ssh里面当做密码。

这里用的是Mac的Termius软件,password右边有个Keys点一下就可以导入进去了,这样才能连接上。

忘了说了,每一题都有一个ip所以有几道题目就需要连几台靶机,然后每队的每道题目的ip都是公开的,我们都可以在平台上看到。

因为给的是密钥,所以这不需要修改ssh密码

备份网站

因为第一步连接ssh其实就弄了挺久的,刚开始都没找到那个密钥文件,所以连上ssh立马就用ftp拖文件到本地,总共好像开了5道题目,所以要备份5个网站。

刚进入ssh或者ftp并不是根目录,我们需要现cd到根目录,然后进入/var/www然后把整个html文件夹拖到本地,但是这里会出现一个问题,就是因为我们拿到的用户并不是root用户,所以有些文件可能无法备份,这个除了提权应该没有什么办法,不过大部分题目都是可以备份的,不需要太担心。

对于pwn题的话,应该是有个challenge文件夹的,我猜是备份这个文件夹,如果有错请大佬指正。

如果需要恢复备份文件,上传上去之后注意看一下题目的文件权限,如果没有执行权限就需要执行一下chmod命令

1
chmod +x 文件名

不然check过不了。

找各种密码

比如mysql密码或者网站后台密码,一般都是在配置文件里面,如果找不到就直接搜索整个网站目录,关键字是password这种。

因为每支队伍的靶机环境都是一样的,所以如果找到密码,最好是修改一下,因为大家的密码都是一样的。

利用D盾和seay代码审计这两个软件扫网站漏洞

因为awd赛制的原因,题目难度不会特别大,并且因为有源码,所以可以直接用这两个软件去扫漏洞,因为实际测试发现两个软件扫出来的结果不一样,所以建议两个软件都扫一遍。

如果扫出漏洞了,比如有一句话木马,赶紧去把自己的注释掉,最好不要删,因为可能check不过,注释一些代码一般没问题。

如果遇到自己不了解的漏洞,一定不要轻举妄动,如果改了很可能check不过,check不过是很危险的,之后会专门将这个check机制。

所以如果扫出漏洞了,直接去攻击别人的靶机,自己如果能修漏洞就修,前提是check一定要过。

其实一些基础漏洞挺多的,所以可能就是拼手速了,谁能最快写出payload谁就可以马上拿分。

比赛中期

首先要强调的是不要随意去改源码,因为很可能check不过,如果大家都因为改了源码check不通过,只有很少人check过了,那么你就很可能利用check机制加很多分,因为check机制是把check没过的队伍都分别扣100分,然后把分数分给check过了的队伍(此规则只适用本次比赛,其他比赛未知)

其次就是找漏洞拿权限了,这一步才是比赛最需要做的。每个题目不只有一个漏洞,漏洞多种多样,但是最终目的都是拿到对方的flag。有时候不需要拿到对方的服务器权限同样可以获取到flag,这就要看漏洞的类型了。

还有一个非常重要的就是提权,拿到普通用户的权限很多时候是不够的,权限越高越好,因为对方一般也就是普通用户权限,如果你提权了,那你拥有对方服务器的权限比他自己的权限都高,那么优势肯定非常大,甚至完全可以控制他了。

其它关于这一块的经验也没什么,主要就是找漏洞的能力了。

比赛后期

这段时间,大部分队伍基本上都解出了很多题目了,所以这时候提交flag拿到的分数很少,这时候一个拿分点就是check,因为这个时候,其实大家的题目基本上都挂了,可能是有人在大家的题目里面放了乱七八糟的东西,目的就是不让你check通过,所以这个时候如果你可以保证自己的题目可以check过,得到的分数是很多的,当然你也可以让别人的题目挂了。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!