缘由
跳槽来新公司的时候,老板就和我提过说以后需要参加OWASP的活动,然后据说我司曾经获胜多次,因此某天就被老板叫去报名了。网络安全类的比赛应该算是第一次,之前比较多参加的反而是Hackathon的活动,考虑到比赛时间的限制都差不多,很多经验应该可以共享。
总结
这类活动和黑马一样,时间限制都被限制得较死,我觉得以下几点对于参赛者来说比较重要
- 提前准备好各类工具、脚本
- 先从最基本的事情做起
- 团队沟通要顺畅
- 一个人负责一块,尽量不要有交叉
工具&脚本
考虑到这是一个以运营网站为前提的活动,以下工具是提前准备比较好的
- 文件传输工具
- WinSCP (Windows) / ForkLift (Mac)
简单易用,可以保存密钥。
- WinSCP (Windows) / ForkLift (Mac)
- 数据库管理工具
- Navicat / Sequel Pro / TablePlus
手搓命令容易翻车,相信GUI
- Navicat / Sequel Pro / TablePlus
- 团队协作
- Notion / Discord
- 比赛环境
在办公室吹着空调喝着饮料,放松心情
快速导入团队公钥并拒绝密码登陆
rm -f ~/.ssh/authorized_keys
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
echo "#Key#" >> ~/.ssh/authorized_keys
sudo sed -i 's/#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo service sshd restart
一条命令换掉root密码
echo "root:1145141919" | chpasswd
冻结其他非活跃用户
compgen -u #查看用户一览表
passwd -l user01
连接中转服务器并开启SSH隧道代理
#SSH隧道
export REMOTE_HOST=""
export REMOTE_PORT="22"
export REMOTE_USER="proxy"
ssh -N -f -D localhost:1080 -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST
#经由隧道访问其他SSH
ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p" xxx@xxx
#因为RDP不支持Socks5代理,因此可以把远程端口转发至本地后再连接(或者使用Proxifier来强制走代理)
ssh -L 3389: ターゲットIP:3389 xxx@xxx
防火墙
这是这次比赛里翻车最严重的地方,因为我配置错了导致数据库断连了近两个小时,队友也没通知我。主要原因还是现在各个发行版的默认防火墙都有略微区别,手敲iptables容易翻车,建议使用发行版自带的配置工具firewall-cmd/ufw
Firewall-cmd
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="" port protocol="tcp" port="22" accept" #允许中转机器访问ssh
sudo firewall-cmd --remove-service=ssh
sudo firewall-cmd --add-service=dns
sudo firewall-cmd --add-service=smtp
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --add-service=mysql
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload
ufw
sudo ufw enable
sudo ufw default deny
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow from xxx.xxx.xxx.xx to any port 22 proto tcp
处理顺序
因为这是一个8个小时左右就结束的活动,因此主办方会使用的方法能做到简单预测,且因留有一个小时的准备时间,把最基本的事情做好还是比较重要的。
- 更改root密码、停用非活动账户
- 配置系统防火墙,限制端口暴露
- 配置自动备份脚本
- 修改数据库root密码,分离数据库,限制IP
- 检查CMS的设置(新用户权限、评论、插件等)
—-以上为必做—- - 检查Apache/Nginx权限,限制跨域访问
- 如果有非开源CMS存在,检查源代码
- 配置网络防火墙(VyOS),隔离机器访问
团队沟通
这次选用的是Notion来作为进度管理,但中途犯了一件错误,禁止复读机!(一个项目一个页面,不要重复),管理密码的页面因为沟通不畅的原因出现了重复,导致有些密码没有及时同步到另外一个页面,查找密码的时间增长。
这次由于是远程参赛,所以大家都在Discord里语音,语音虽然在传达上非常效率,但在大家都很忙的情况下容易把任务给忘掉,如果出现了问题,一定要用文字留下描述,不仅方便跟进,也方便时候查看时间点。
另外团队人手不足的情况下,任务范围尽量不要又交叉,容易导致沟通失效。例如这次数据库单独拆分出去了,但修改数据库信息时又需要修改程序的配置,然而这次负责数据库的人完全没管程序那边,直接改掉了数据库信息导致服务下线。以防类似的情况,最好两个区域都由同一个人负责。
感想
这次原本打算划水一下不拿个倒数第一就行,结果就。。获胜了!XD