目录
用到的全套工具脚本:https://pan.quark.cn/s/da4fcf9dd04b
- 准备阶段
- 攻击阶段
准备阶段
1.登录比赛平台(获取资产)
查看账号
ssh远程登录
ssh [username]@[hostname]
第一次登录一直yes就行
个人参赛建议这里用finalshell来运维:http://t.csdnimg.cn/fCskf
账号修改
服务器SSH口令
passwd #ssh口令修改
系统会提示你输入当前的密码,然后输入你想要设置的新密码两次以确认
mysql
修改mysql登录密码
方法一:
- 使用以下命令登录MySQL:
root与password替换为你当前的账号密码mysql -u root -p password
- 选择
mysql
数据库:use mysql;
- 使用
UPDATE
语句来更改密码,其中new_password
是你想要设置的新密码:
如果你使用的是MySQL 5.7及以上版本,请使用以下语句:update user set authentication_string=password('new_password') where user='root';
update user set authentication_string=passworD('new_password') where user='root'; 或者 UPDATE mysql.user SET authentication_string = MD5('123456') WHERE user = 'newuser'; UPDATE mysql.user SET authentication_string = '123456' WHERE user = 'newuser';
- 刷新权限并退出:
flush privileges; exit;
方法二:
mysqladmin -u root -p 123456 password 123
root=用户名; 123456=旧密码; 123=新密码;
关闭 MySQL 远程登录(有些比赛会检查这个的check,建议慎用)
mysql -u root -p
mysql> use mysql;
mysql> update user set host = 'localhost' where user='root' and host='%';
mysql> flush privileges;
mysql> exit;
WEB服务口令(后台密码)
配置文件方式的后台密码
find /var/www//html -path ' config ’ #查找配置文件中的密码凭证
数据库后台管理员密码
mysql -u root -p
show databases;
use test;打开站点的数据库
show tables;打开站点的用户表
select * from admin;
updata admin set user pass=’123456’; //updata 表名 set 字段名 = ‘值’;
flush privileges;
账号用户检查
SSH
隐藏用户
- 检查
/etc/passwd
文件:是否有/bin/bash的用户cut -d : -f 1 /etc/passwd
cat /etc/shadow
- 使用
usermod
命令禁用可疑用户:usermod -L 用户名 删除 userdel -r 用户名
查看home目录下是否有其他用户
ls /home
MYSQL
删除多余的账号
登录MySQL数据库
mysql -u root -p password
查询所有用户:
SELECT DISTINCT CONCAT('User: ''', user, '''@''', host, ''';') AS query FROM mysql.user;
删除用户:
DROP USER user1, user2, user3;
确保将user1, user2, user3替换为实际的用户名列表。
刷新权限:
FLUSH PRIVILEGES;
2.dump源码(方便应急响应恢复靶机)
网站源码备份
使用ssh工具保留源码,复制两份,用d盾去扫一份
防止在对源码进行修改时出问题,或者被攻击方删除源码而准备
压缩源码:
tar -cvf web.tar /var/www/html
zip -q -r web.zip /var/www/html
解压缩源码:
tar -xvf web.tar -c /var/www/html
unzip web.zip -d /var/www/html
备份源码:
mv web.tar /tmp
mv web.zip /home/xxx
上传和下载源码:
scp username@servername:/path/filename /tmp/local_destination //从服务器下载单个文件到本地
scp /path/local_filename username@servername:/path //从本地上传单个文件到服务器
scp -r username@servername:remote_dir/ /tmp/local_dir //从服务器下载整个目录到本地
scp -r /tmp/local_dir username@servername:remote_dir //从本地上传整个目录到服务器
压缩文件
tar -cvf web.tar /var/www/html
zip -q -r web.zip /var/www/html
解压文件
tar -xvf web.tar -c /var/www/html
unzip web.zip -d /var/www/html
备份到服务器
mv web.tar /tmp
mv web.zip /home/xxx
本地上传下载文件
scp username@servername:/path/filename /tmp/local_destination #从服务器下载单个文件到本地
scp /path/local_filename username@servername:/path #从本地上传单个文件到服务器
scp -r username@servername:remote_dir/ /tmp/local_dir #从服务器下载整个目录到本地
scp -r /tmp/local_dir username@servername:remote_dir #从本地上传整个目录到服务器
通过ssh传文件
使用scp
命令
scp
(Secure Copy)是基于SSH协议的文件复制工具,它允许用户在本地和远程系统之间安全地复制文件或目录。
-
从本地复制到远程服务器:
scp /path/to/local/file username@remote_host:/path/to/remote/directory
这个命令会提示输入远程服务器的密码,然后将本地文件复制到远程服务器指定的目录。
-
从远程服务器复制到本地:
scp username@remote_host:/path/to/remote/file /path/to/local/directory
同样,这个命令也需要输入远程服务器的密码,然后将远程服务器上的文件复制到本地指定的目录。
2. 使用rsync
命令
rsync
是一个功能强大的文件同步和传输工具,它支持本地和远程之间的文件同步,并且可以进行增量备份。
-
基本的**
rsync
**命令:rsync -avz -e ssh /path/to/local/file username@remote_host:/path/to/remote/directory
这个命令通过SSH连接到远程服务器,并将本地文件同步到远程目录。选项
-a
表示归档模式,-v
表示详细模式,-z
表示压缩数据。 -
增量同步:
rsync
可以只同步发生变化的文件,这在频繁备份时非常有用:rsync -avz -e ssh --delete username@remote_host:/path/to/remote/file /path/to/local/directory
--delete
选项会删除本地目录中不存在的文件,确保两边的文件保持一致。
3. 使用sshfs
挂载远程文件系统
sshfs
(SSH File System)允许你将远程文件系统挂载到本地,就像操作本地文件系统一样。
-
挂载远程文件系统:
sshfs username@remote_host:/path/to/remote/directory /path/to/local/mountpoint -o follow_symlinks
这个命令会将远程目录挂载到本地的挂载点。
-o follow_symlinks
选项允许跟随符号链接。
数据备份
php网站数据库配置信息为 config.php/web.conf
php.ini
文件、postgresql.conf、settings.py、mongod.conf、web.config
备份指定数据库
mysqldump – u username – p password databasename > bak.sql
备份所有数据库
mysqldump – all -databases > bak.sql
导入数据库
mysql – u username – p password database < bak.sql
3、漏洞审计
源代码审计
D盾
解压然后运行exe
选择查杀模式直接扫
Seay
打开exe,和d盾类似的步骤
河马
不要将本软件放置到web目录下
普通扫描
./hm scan /home/kali/桌面/20190511_awd_docker-master
/home/kali/桌面/20190511_awd_docker-master 为目录的完整路径
扫描完成之后结果会保存为result.csv文件,使用记事本或者excel打开查看
扫描时开启深度解码
./hm deepscan 你的web目录
查看资产
明确Linux机器信息
uname -a //系统信息
ps -aux //查询进程信息
ps -ef | grep 进程名称 //筛选指定进程
id //用于显示用户ID,以及所属群组ID
cat /etc/passwd //查看用户情况
ls /home/ //查看用户情况
find / -type d -perm -002 //可写目录检查
ifconfig //Linux上查看网卡信息
ip addr show //Linux上查看网卡信
检查环境
Python2
python2 --version
Python3
python3 --version
go
go version
4、安全加固
后门查杀
扫描预留后门,御剑,k8飞刀,D盾,扫描目录,发现后门,注释代码
find . -name '*.php' | xargs grep -n 'eval('
find . -name '*.php' | xargs grep -n 'assert('
find . -name '*.php' | xargs grep -n 'system('
关闭进程端口
netstat -napt ,lsof -i 查看端口,
kill -9 PID 杀掉进程
nmap -sV ip地址(-sV参数可以探测目标主机的服务器版本)
nmap扫描对方开启的端口,21,22,21,3306,进行爆破
msfconsole进入metasploit,hydra可以对22端口进行爆破
Windows加固流程
- 445加固,开启防火墙或IP高级安全策略
netsh advfirewall set allprofiles state on
netsh advfirewall firewall add rule name="Block445" dir=in action=block protocol=TCP localport=445
#阻止445端口
- 开启系统日志审计功能
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
- 禁用guest账户、关闭文件共享
net user guest /active:no
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=No
- 确保启动项内容是可控的
msconfig
- 限制3389远程访问控制的连接数:在本地组策略编辑器里面,依次展开计算机配置–>管理模板–>Windows组件–>远程桌面服务–>远程桌面会话主机–>连接–>限制连接的数量
Linux加固流程
- 通过
.bash_history
查找历史命令操作,发现痕迹 - 查看计划任务:
crontab -l
;编辑计划任务:crontab -e
- 查看
/etc/init.d/rc.local
中启动服务有无异常 - 系统加固:iptable
以下是一些基本的 iptables
命令示例:
-
查看所有规则:
sudo iptables -L
-
添加规则: 例如,允许来自特定IP地址的所有流量:
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 80 -j ACCEPT
这个命令添加了一条规则到 INPUT 链,允许 TCP 协议从 192.168.1.100 地址到端口 80 的所有流量。
-
删除规则: 删除特定的规则,假设规则编号为 2:
sudo iptables -D INPUT 2
-
保存规则: 将当前的规则集保存到一个文件中,通常保存到
/etc/iptables.rules
:复制
sudo iptables-save > /etc/iptables.rules
-
恢复规则: 从文件中恢复规则集,通常从
/etc/iptables.rules
:sudo iptables-restore < /etc/iptables.rules
-
设置默认策略: 例如,设置默认的 INPUT 链策略为拒绝:
sudo iptables -P INPUT DROP
关键端口修改
-
查找服务的配置文件: 服务的配置文件通常位于
/etc/
目录下,或者在特定的子目录中,如/etc/nginx/
、/etc/httpd/
或/etc/mysql/
等。例如,对于Apache HTTP服务器,配置文件可能是/etc/httpd/conf/httpd.conf
或/etc/apache2/apache2.conf
。sudo find / -name "httpd.conf" ls /etc/default/ | grep apache2
-
修改端口号: 打开服务的配置文件,找到监听端口的指令。例如,在Apache中,可能会有类似
Listen 80
的指令。将端口号从80更改为其他端口,如8080,修改后的指令应为Listen 8080
。 -
保存并关闭配置文件: 在编辑器中保存更改后,关闭编辑器。
-
重启服务: 为了使更改生效,需要重启服务。大多数服务都可以通过
systemctl
命令来重启。例如,对于Apache HTTP服务器,可以使用以下命令:sudo systemctl restart apache2
或者,对于其他服务,如Nginx或MySQL,可以使用相应的命令:
sudo systemctl restart nginx sudo systemctl restart mysql
-
检查端口更改: 使用
netstat
、ss
或lsof
等命令来检查端口是否已经更改为新的端口号。例如:sudo netstat -tulnp | grep :8080
或者
sudo ss -tulnp | grep :8080
系统安全配置
1.设置只读权限
对Web文件设置只读和执行权限(PHP等动态语言需要执行权限)
chmod 0555 /var/www/html/*
chmod 0555 /var/www/html/*.php
Web根目录设置只读和执行权限
chmod 0555 /var/www/html
改变文件的属主和属组来设置严格的权限
chown -R root:root /var/www/html/ //设置拥有人为 root:root 或 httpd:httpd (推荐)
2.配置 .htaccess
利用 .htaccess
配置文件禁止php文件执行
<Directory "/var/www/html/upload"> //指定目录后续的指令将应用于该目录
Options -ExecCGI -Indexes //禁用了目录中的 CGI 执行和目录索引(显示目录内容列表)功能。
AllowOverride None //不允许在该目录中使用 .htaccess 文件来覆盖服务器的配置。
RemoveHandler .php .phtml .php3 .pht .php4 .php5 .php7 .shtml
RemoveType .php .phtml .php3 .pht .php4 .php5 .php7 .shtml
//这两个指令移除指定文件扩展名的处理器和类型。
//在这种情况下,这些指令从 Apache 的处理列表中移除了与 PHP 相关的扩展名和服务器端包含(SSI)文件类型。
php_flag engine off //这个指令将 PHP 的引擎标志(engine)设置为关闭状态,从而禁用了在该目录中执行 PHP 脚本的能力。
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
deny from all
</FilesMatch> //这三行命令使用正则表达式匹配了以 .php、.phtml、.php3、.pht、.php4、.php5、.php7、.shtml 结尾的文件,并将其访问权限设置为拒绝所有
</Directory>
3. PHP参数安全配置
首先找到PHP的配置文件
/etc/php/{version}/php.ini
禁用高危函数
disable_functions = dl,exec,system,passthru,popen,proc_open,pcntl_exec,shell_exec,mail,imap_open,imap_mail,putenv,ini_set,apache_setenv,symlink,link
配置 open_basedir
(将用户访问文件的活动范围限制在指定的区域)
open_basedir=/var/www/html
禁用魔术引号(自动对外部来源数据进行转义,防止SQL注入)
magic_quotes_gpc = Off
关闭PHP伪协议
allow_url_fopen = Off
allow_url_include = Off
重启PHP
sudo service php7.0-fpm restart
sudo systemctl restart php7.0-fpm.service
数据库安全加固
1.Mysql加固
为了防范弱口令攻击,Mysql密码默认都是root,phpstudy默认密码123456
- 不使用默认口令,修改成复杂的,并确保和web环境连接
- 设置只允许本地127.0.0.1账户登录:修改
bind-address=127.0.0.1
;在配置文件中加入seccure_file_priv=NULL
- 开启日志审计功能:
general_log_file=
路径
因为最常用的是Mysql数据库,所以基本的攻防大部分都是用MySql数据库的命令
备份指定数据库:
mysqldump –u username –p password databasename > target.sql
备份所有数据库:
mysqldump –all -databases > all.sql
导入数据库:
mysql –u username –p password database < from.sql
对于MySQL的攻防,可以看这篇文章:https://blog.zgsec.cn/archives/26.html
MySQL默认配置文件路径:
C:\\Program Files\MySQL\MySQLServer 5.1\my.ini //Windows
/etc/my.cnf //Linux
/etc/mysql/my.cnf //Linux
修改 secure_file_priv
参数(日志功能的对应目录)
secure_file_priv=""
重载MySQL配置
FLUSH PRIVILEGES
重启MySQL服务
sudo service mysql restart
sudo systemctl restart mysql
2. Mssql加固
- 删除不必要的账号
- SQLServer用户口令安全
- 根据用户分配帐号避免帐号共享
- 分配数据库用户所需的最小权限
- 网络访问限制
- SQLServer登录审计
- SQLServer安全事件审计
- 配置日志功能
远程控制加固
1. SSH安全加固
限制IP登录方法
sudo nano /etc/ssh/sshd_config //以root权限编辑SSH配置文件
AllowUsers username@192.168.0.100 //找到并编辑以下行,确保其取消注释并设置为所需的IP地址
禁用 root
远程登录
sudo nano /etc/ssh/sshd_config //以root权限编辑SSH配置文件
PermitRootLogin no //将PermitRootLogi设置为“no”
按用户和组限制SSH登录
sudo nano /etc/ssh/sshd_config //以root权限编辑SSH配置文件
AllowUsers testuser //设置只允许 testuser 登录SSH
AllowUsers testuser@192.168.1.100 //设置只允许 192.168.1.100 的机器用 testuser 账户登录SSH
AllowGroups test //设置用户组白名单
//需要注意的是:如果同时指定了 AllowUsers 与 AllowGroups 那么必须要在两个选项中都匹配到的用户才能进行SSH登录
重启SSH服务
sudo service sshd restart
sudo systemctl restart sshd.service
2. RDP远程登录安全加固
删除默认帐户并手动添加新用户:
- 步骤1:按
Win + R
打开运行对话框,输入secpol.msc
并单击 “确定” - 步骤2:导航至此处:本地策略–>用户权限分配,再双击打开 “允许通过远程桌面服务登录”
- 步骤3:删除此窗口中列出的管理员和远程桌面用户(或计算机上的任何其他用户或组)
- 步骤4:之后单击 “添加用户或组” 并手动添加您要授予远程桌面访问权限的用户
更改默认RDP端口号:
- 步骤1:打开运行对话框,输入
regedit
并单击 “确定” - 步骤2:打开
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
,向下滚动并找到PortNumber
然后双击它 - 步骤3:选择 “十进制”,修改为您想要设置的端口号,然后单击 “确定”
5.站点防御部署
先输入python3命令,看看有没有,有python3就可以跳过
下载Python
3.1- 解压源码包
1.对压缩包进行解压
tar -xvf Python-3.10.14.tgz
编译和安装
cd Python-3.10.14
配置源码编译后的安装路径
./configure --prefix=/usr/local/python3.10
开始编译和安装(大约10分钟)
make
sudo make install
编译完成后,cd配置的安装路径下,并查看文件夹内容
cd /usr/local/python3.10/bin
查看bin目录下是否有python3.10,此时已经完成python安装
5.设置软链接
rm python
which python3
找到的路径建立新的链接
sudo ln -s /usr/local/bin/python3 /usr/bin/python
6.设置python的环境变量
vim ~/.bashrc
在bashrc里面添加一下代码
alias python=‘/usr/local/bin/python3’
然后让变量生效
source ~/.bashrc
最后直接输入python就可以了
php环境安装
-
解压源代码: 下载完成后,使用
tar
命令解压下载的文件到你选择的目录。例如,如果下载到了/home/username/Downloads
目录,可以使用以下命令解压到/home/username/php-src
目录:tar -zxf /home/username/Downloads/php-x.y.z.tar.gz -C /home/username/php-src
其中
php-x.y.z.tar.gz
是下载的文件名,x.y.z
代表PHP的版本号。 -
编译安装PHP: 解压后,进入到解压的目录,然后运行以下命令来编译和安装PHP:
`cd /home/username/php-src ./configure --prefix=/path/to/php/install/dir
make
make install`
其中
--prefix=/path/to/php/install/dir
指定了安装PHP的目标目录。 -
验证安装: 安装完成后,你可以通过运行以下命令来验证PHP是否安装成功:
/path/to/php/install/dir/bin/php -v
Go环境安装
将下载好的包解压缩到你想要安装的目录下,如/home/go。
sudo tar -C /home -zxvf go1.22.2.linux-amd64.tar.gz
添加环境变量,在终端中输入以下命令:
编辑/etc/profile
或用户的~/.bashrc
文件,并添加以下内容
sudo vi /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
编辑完环境变量后,使用source
命令使配置立即生效
source /etc/profile
验证Go环境是否安装成功
go version
部署WAF、EDR
PHP脚本
https://github.com/PlutoaCharon/AWD-Attack-Defense
waf的激活方式:
- php.ini选项:auto_prepend_file =与auto_append_file =包含waf,需要权限较高。
- config.php 中包含waf
- 让所有的文件都包含waf
WAF保护文件脚本
在需要保护的 PHP 文件中包含 CTF_WAF.php
在每个需要保护的 PHP 文件的最开始(通常在任何其他代码之前),添加以下代码行:
include_once('/path/to/CTF_WAF.php');
这里的 /path/to/CTF_WAF.php
应该替换为实际的路径,指向你存放 CTF_WAF.php
的位置。使用 include_once
确保即使多次引用也只包含一次文件,防止重复执行。
WAF日志记录脚本
创建放日志的文件夹
mkdir -p /home/web/Desktop/log/waflog
编辑脚本,设置正确的日志目录路径
$WAF_log = '/home/web/Desktop/log/waflog';
使用 cat
, less
, 或 tail
等命令查看日志文件:
tail -f /home/web/Desktop/log/waflog/log_* # 实时查看最新的日志条目
在每个需要保护的 PHP 文件的最开始(通常在任何其他代码之前),添加以下代码行:
include_once('/home/web/Desktop/log-record.php');
2.1.5 找本地Flag
grep -r "flag" /var/www/html/ //Linux:在Web目录下查找flag
findstr /s /i "flag" *.* //Windows:当前目录以及所有子目录下的所有文件中查找"flag"这个字符串
2.1.6 设置禁Ping
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all //临时开启禁ping
文件监控
可以使用ssh远程去连接靶机进行监控
vscode‐>ssh插件或者是phpstorm,实时在线编辑
监听还原脚本‐>5分钟还原一次
使用本地py环境运行,需要更改sshIP及端口
Python脚本
文件监控脚本1(内网环境无需依赖)
使用方法:,命令行Python3 main.py,然后输入需要监控的目录的绝对路径
缺点:只能监控文件不能监控文件夹
文件监控脚本2(内网环境无需依赖)
使用方法:命令行Python3 monitorpro.py,自动监控文件夹,删除文件自动恢复,自动备份到特定文件夹,新上传的文件会被转移到特定文件夹并修改后缀为.txt,日志输出到特定文件夹
Python2版本:
flag文件隐藏
备份检查
find /var/www/html/ -name " .tar"
find /var/www/html/ -name " .zip"
后门查杀
一般查杀
find /var/www/html -name .php -mmin -20 #查看最近20分钟修改文件
find ./ -name ' .php' | xargs wc -l | sort -u #寻找行数最短文件
grep -r --include= .php '[^a-z]eval($_POST' /var/www/html #查包含关键字的php文件
find /var/www/html -type f -name " .php" | xargs grep "eval(" |more
不死马查杀:杀进程后重启服务、写一个同名的文件夹和写一个sleep时间低于别人的马(或者写一个脚本不断删除别人的马)
<?php
system("kill -9 pid;rm -rf .shell.php"); #pid和不死马名称根据实际情况定
?>
不死马清理:
ps aux www|grep shell.php
找到pid后杀掉进程就可以,你删掉脚本是起不了作用的,因为php执行的时候已经把脚本读进去解释成opcode运行了
重启php等web服务
用一个ignore_user_abort(true)脚本,一直竞争写入(断断续续)。usleep要低于对方不死马设置的值。
创建一个和不死马生成的马一样名字的文件夹。
后门用户查杀:UID大于500的都是非系统账号,500以下的都为系统保留的账号,使用userdel -r username 完全删除账户
其他查杀**:** 部分后门过于隐蔽,可以使用ls -al命令查看所有文件及文件修改时间和内容进行综合判断,进行删除。可以写脚本定时清理上传目录、定时任务和临时目录等
漏洞修复
漏洞修复遵循保证服务不长时间宕机的情况下进行修复, 多使用安全过滤函数,能修复尽量修复,不能修复先注释或删除相关代码,但需保证页面显示正常。
可以下载文件到本地进行修改后上传到服务器进行覆盖操作,也可以直接通过vim编辑器进行代码修复操作 ,恢复参考:
- Web常见漏洞描述及修复建议 - 我超怕的 - 博客园 常规漏洞修复建议
- PHP中的安全函数 - 踏雪无痕SS - 博客园 PHP安全函数
工具
文件监控脚本: GitHub - TheKingOfDuck/FileMonitor: 文件变化实时监控工具(代码审计/黑盒/白盒审计辅助工具)
流量监控
流量监控也是可以使用aoiawd进行,aoiawd还是在后边,或者用别的脚本记录流量,有的比赛也会定时提供上阶段流量
被上马一定要先备份到本地,再删除、去分析反打别人
关闭进程
ps -aux #查看进程
kill -9 pid #强制进程查杀
wireshark
过滤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的数据包
过滤端口
(1) tcp.port eq 80 #不管端口是来源还是目的都显示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 #过滤端口范围
流量分析
查看当前访问量前十的链接
cat /var/log/apache2/access.log | cut -f4 -d | sort | uniq -c | sort -k -r | head -
文件监控增删改查的文件使用脚本Monitor(一个简单的文件监控示例脚本,可以监控创建、删除、移动、属性修改操作,自动删除新增文件或目录。已使用pyinstaller打包成了linux可执行程序)
chattr +i 命令锁死网站目录和文件,防止其他队伍删除网站宕机。注:添加后不取消特殊权限 即使是root用户也无法删除/修改文件
chattr -R +i /var/www/html
chattr -R +i /var/www/html/*
(取消命令将+号改成- chattr -R -i /var/www/html)
使用waf全局包含waf,注意waf的日志和weblogger日志与第二项文件监控冲突,建议建立文件夹将日志和weblogger日志放到指定文件夹中,避开文件监控,
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命令利用 / 区分文件中的原字符串和修改的字符串,所以我们要对 / 进行转义。类似于在单引号中再次使用单引号时我们也要用反斜杠转义。
后台一定要登陆后台,有没有弱口令,修改成强口令。
不只是后台,phpmyadmin、测试页面容易出现sql注入,rce之类的这些
端口监控
netstat -ano/-a #查看端口情况
uname -a #系统信息
ps -aux、ps -ef #进程信息
cat /etc/passwd #用户情况
ls /home/ #用户情况
id #用于显示用户ID,以及所属群组ID
find / -type d -perm -002 #可写目录检查
grep -r “flag” /var/www/html/ #查找默认FLAG
关闭端口
netstat -anp #查看端口
firewall-cmd --zone= public --remove-port=80/tcp –permanent #关闭端口
firewall-cmd –reload #重载防火墙
攻击阶段
6、信息收集
内网信息收集
0.内网探活(自动扫内网私有地址)
**netspy **
初始化
sysctl -w net.ipv4.ping_group_range="0 2147483647"
内网可达网段默认存到alive.txt
./netspy is
强制进行网段内所有IP存活探测,默认存到alive.txt
./netspy -c 192.168.52.0/24 -r 255 -f is
1、扫c段(主机探测(nmap、httpscan))
2、扫端口(nmap)
- 首先搜集自己端口信息 ,再类比扫描其他主机
3、应用发现(指纹识别)
TideFinger_Linux
扫端口、服务、指纹以及poc
./TideFinger_Linux -h 192.168.52.10 -pd
探测指定url文件的指纹,每个服务指纹超时为120秒(打点)
TideFinger -uf url.txt -nobr -nopoc -pt 120
watweb
whatweb url
内网主机扫描(打点)
whatweb --no-errors -t 255 192.168.0.0/24 //可以和-a -v 参数结合使用
导出扫描结果到文件(打点)
whatweb www.topreverse.cn --log-brief=FILE
4.综合漏洞快速探测(中间件、组件框架、系统漏洞)
nuclei
初始化
./nuclei -u 192.168.52.10
然后将模版解压到/home/kali/nuclei-templates里面(只解压内容,文件夹名字要和nuclei-templates一致)
然后就正常打点
针对 URL 列表运行模板:
./nuclei -list http_urls.txt
详细教程:
运行 Nuclei - ProjectDiscovery 文档
4、敏感文件扫描
https://github.com/sry309/ihoneyBakFileScan 多进程批量网站备份文件泄露扫描工具
https://github.com/maurosoria/dirsearch WEB网站目录扫描
- 字典参考:
https://github.com/cpkkcb/fuzzDicts
GitHub - TheKingOfDuck/fuzzDicts: Web Pentesting Fuzz 字典,一个就够了。
5、进行攻击
出题人设计漏洞
代码审计(之前bash自己资产的代码)
综合工具扫描
后门利用
写Python脚本批量提交flag
流量混淆
发送混乱的流量
自动化攻击脚本
back_door()
: 这个函数用于在指定的IP地址范围内尝试通过一个后门地址(shell_addr
)和密码(shell_pass
)来执行一个特定的payload(一段代码或命令)。它使用requests
库来发送HTTP请求。这个函数会检查响应中是否包含特定的字符串(“flag”),如果包含,则将IP地址和响应内容写入到一个文本文件中。make_sudo()
: 这个函数的目的是在一个IP地址范围内通过后门种植一个不死马(一种持久化攻击手段),并将维持了权限的IP地址写入到一个文本文件中。它使用base64编码来传输PHP代码,并通过HTTP请求发送到目标服务器。make_crontab()
: 这个函数用于在指定的IP地址范围内通过后门创建一个crontab任务,这通常用于自动化任务的执行。它同样使用requests
库发送请求,并检查响应长度来确定是否成功。
远程命令执行
命令执行,直接cat /flag,尽量混淆流量也可以通过命令执行执行上传一句话木马
“查找”
查找可能的password
cd /var/www/html
find .|xargs grep “password”
查找后门
find /var/www/html -name " *.php" |xargs egrep ‘assert|eval|phpinfo()|(base64_decoolcode|shell_exec|passthru|file_put_contents(.*$|base64_decode(’
查找flag的位置
使用find / -name *flag*
或grep -rn "flag" *
类似的语句可以快速发现 flag 所在的地方,方便后续拿分
备份网站源码和数据库
mobaxterm直接拖
备份数据库在dump源码部分有
scp -r -P Port remote_username@remote_ip:remote_folder local_file
检查有没有多余无用端口对外开放
netstat -anptl
文件读取
sql注入,数据库中有flag,或者sql注入写shell
文件上传,绕过黑白名单上传一句话,小马拉大马或者不死马
中间件漏洞
琴音安全漏洞利用集成工具箱
其他队发现的漏洞
通过日志来分析流量
提权
Linux 提权总结 - 腾讯云开发者社区-腾讯云 一般提权
6、权限维持
不死马
不死马
将该文件重命名为xxx.php(根据实际情况定)
然后get请求访问url:xxx.xxx.xxx/path/.kaiyko.php?kaiyko=password
然后再访问curl -X POST http://target-server.com/path-to-file/.kaiyko.php?kaiyko=password -d “kaiyko=phpinfo();”
如果有回显,就可以连接webs hell管理工具,密码是kaiyko
定时马
内存马
7.编写脚本批量拿分
1.手写POC利用漏洞或者攻击
一系列exp
awd_attack_framework-master.zip
awd_attack.py
------awd批量攻击主框架
利用主办方欲留后门进行攻击
rsa_client.php
------rsa加密后门客户端
加密攻击的payload并发送给种植在其他队伍服务器上的rsa_server.php
rsa_server.php
------rsa加密后门服务端
解密攻击payload并返回执行结果
rsa_attack.py
------rsa木马测试
测试rsa客户端和服务端是否可以实现互相通信
nodie.php
------不死马
主要负责写入rsa不死马
------定时任务写入脚本
crontab.txt
------定时任务要写入的内容
kill_crontab.php
------清除crontab
kill.php
------清除不死马
2.批量修改ssh账号密码
3.通过脚本批量获取flag
批量利用框架工具
参考:https://github.com/Ares-X/AWD-Predator-Framework
AWD-Predator-Framework-master.zip
这个是Python2驱动的工具,在AWD攻防赛中通过给定的webshell批量获取提交flag
批量通过后门获取flag再删库
直接运行,代码注释的部分需要自定义参数
批量获取flag 可视化gui软件
Github资源
- (⭐235) AWD攻防赛脚本集合: https://github.com/admintony/Prepare-for-AWD
- (⭐124) Attack-Defense-Framework: https://github.com/SniperOJ/Attack-Defense-Framework/tree/v2
- (⭐99) AWD攻防赛webshell批量利用框架: https://github.com/Ares-X/AWD-Predator-Framework
- (⭐28) awd-frame: https://github.com/xnianq/awd-frame
- (⭐4) WEB-AWD-Framework:https://github.com/dahua966/WEB-AWD-Framework
- (⭐0) AWD-helper: https://github.com/sarleon/AWD-helper
AWD经验
- CTF线下赛AWD模式下的生存技巧: https://www.anquanke.com/post/id/84675
- CTF线下赛AWD套路小结: https://xz.aliyun.com/t/25
- AWD混战攻略: https://www.jianshu.com/p/d21b7e1bffaf
- CTF线下AWD攻防模式的准备工作及起手式: https://blog.csdn.net/like98k/article/details/80261603
- 2017强网杯线下AWD攻防总结(适合新手): https://www.t00ls.net/articles-42278.html
- AWD攻防线下生存之道: http://47.95.201.153/blog/AWD攻防线下生存之道.html
- CTF AWD模式攻防Note: https://www.cnblogs.com/nul1/p/9576386.html
权限维持
- 不死马的删除: https://yq.aliyun.com/zt/325638
- awd攻防之kill不死马: https://www.jianshu.com/p/ba79686987da
- python中的后渗透|也可用于AWD攻防–shell管理: https://www.jianshu.com/p/2e8e7330b73e
- 从0到1掌握AWD攻防之RSA必杀: https://www.360zhijia.com/anquan/456324.html
- 资深大牛教你如何web端权限维持(内附具体步骤): http://www.sohu.com/a/127074604_472906