AWD线下攻防万字最完整战术(记第一届“长城杯”半决赛战术)

目录

  • 准备阶段
    • 1.登录比赛平台(获取资产)
      • 查看账号
      • 账号修改
        • 服务器SSH口令
        • mysql
        • WEB服务口令(后台密码)
        • 数据库后台管理员密码
      • 账号用户检查
    • 2.dump源码(方便应急响应恢复靶机)
      • 网站源码备份
        • 压缩文件
        • 解压文件
        • 备份到服务器
        • 本地上传下载文件
      • 数据备份
        • 备份指定数据库
        • 备份所有数据库
        • 导入数据库
    • 3、漏洞审计
      • 源代码审计
      • 查看资产
    • 4、安全加固
      • 后门查杀
      • 关闭进程端口
      • Windows加固流程
      • Linux加固流程
      • 关键端口修改
      • 系统安全配置
        • 2.2.2 设置只读权限
        • 2.2.4 PHP参数安全配置
      • 2.3 数据库安全加固
        • 2.3.1 Mysql加固
        • 2.3.2 Mssql加固
      • 2.4远程控制加固
        • 2.4.1 SSH安全加固
        • 2.4.2 RDP远程登录安全加固
    • 5.站点防御部署
      • 下载Python
        • 3.1- 解压源码包
      • php环境安装
      • Go环境安装
      • 部署WAF、EDR
        • PHP脚本
        • 2.1.6 设置禁Ping
      • 文件监控
        • Python脚本
        • 备份检查
        • 后门查杀
        • 漏洞修复
        • 工具
      • 流量监控
        • 关闭进程
        • wireshark
        • 流量分析
      • 端口监控
        • 关闭端口
  • 攻击阶段
    • 6、信息收集
      • 内网信息收集
        • 0.内网探活(自动扫内网私有地址)
        • 1、扫c段(主机探测(nmap、httpscan))
        • 2、扫端口(nmap)
        • 3、应用发现(指纹识别)
        • 4.综合漏洞快速探测(中间件、组件框架、系统漏洞)
    • 5、进行攻击
      • 出题人设计漏洞
        • 后门利用
        • 远程命令执行
        • 文件读取
        • 中间件漏洞
      • 其他队发现的漏洞
        • 提权
    • 6、权限维持
    • 7.编写脚本批量拿分
      • 1.手写POC利用漏洞或者攻击
        • 一系列exp
      • 2.批量修改ssh账号密码
      • 3.通过脚本批量获取flag
        • 批量利用框架工具
        • 批量通过后门获取flag再删库
        • 批量获取flag 可视化gui软件
    • Github资源
    • [](https://www.neversec.top/20190415/how-to-awd.html#AWD%E7%BB%8F%E9%AA%8C “AWD经验”)AWD经验
    • [](https://www.neversec.top/20190415/how-to-awd.html#%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81 “权限维持”)权限维持

准备阶段

1.登录比赛平台(获取资产)

查看账号

在这里插入图片描述

ssh远程登录

ssh [username]@[hostname]

第一次登录一直yes就行
个人参赛建议这里用finalshell来运维:http://t.csdnimg.cn/fCskf

账号修改

服务器SSH口令
passwd #ssh口令修改

系统会提示你输入当前的密码,然后输入你想要设置的新密码两次以确认

mysql

修改mysql登录密码

方法一:

  1. 使用以下命令登录MySQL:
    mysql -u root -p password
    
    root与password替换为你当前的账号密码
  2. 选择mysql数据库:
    use mysql;
    
  3. 使用UPDATE语句来更改密码,其中new_password是你想要设置的新密码:
    update user set authentication_string=password('new_password') where user='root';
    
    如果你使用的是MySQL 5.7及以上版本,请使用以下语句:
    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';
  4. 刷新权限并退出:
    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

隐藏用户

  1. 检查/etc/passwd文件:是否有/bin/bash的用户
    cut -d : -f 1 /etc/passwd
    
    cat /etc/shadow
    
  2. 使用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加固流程

  1. 445加固,开启防火墙或IP高级安全策略
netsh advfirewall set allprofiles state onnetsh advfirewall firewall add rule name="Block445" dir=in action=block protocol=TCP localport=445
#阻止445端口
  1. 开启系统日志审计功能
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
  1. 禁用guest账户、关闭文件共享
net user guest /active:nonetsh advfirewall firewall set rule group="File and Printer Sharing" new enable=No
  1. 确保启动项内容是可控的
msconfig
  1. 限制3389远程访问控制的连接数:在本地组策略编辑器里面,依次展开计算机配置–>管理模板–>Windows组件–>远程桌面服务–>远程桌面会话主机–>连接–>限制连接的数量

Linux加固流程

  1. 通过 .bash_history 查找历史命令操作,发现痕迹
  2. 查看计划任务:crontab -l;编辑计划任务:crontab -e
  3. 查看 /etc/init.d/rc.local 中启动服务有无异常
  4. 系统加固: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

关键端口修改

  1. 查找服务的配置文件: 服务的配置文件通常位于/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
  2. 修改端口号: 打开服务的配置文件,找到监听端口的指令。例如,在Apache中,可能会有类似Listen 80的指令。将端口号从80更改为其他端口,如8080,修改后的指令应为Listen 8080

  3. 保存并关闭配置文件: 在编辑器中保存更改后,关闭编辑器。

  4. 重启服务: 为了使更改生效,需要重启服务。大多数服务都可以通过systemctl命令来重启。例如,对于Apache HTTP服务器,可以使用以下命令:

    sudo systemctl restart apache2

    或者,对于其他服务,如Nginx或MySQL,可以使用相应的命令:

    sudo systemctl restart nginx sudo systemctl restart mysql

  5. 检查端口更改: 使用netstatsslsof等命令来检查端口是否已经更改为新的端口号。例如:

    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

  1. 不使用默认口令,修改成复杂的,并确保和web环境连接
  2. 设置只允许本地127.0.0.1账户登录:修改 bind-address=127.0.0.1 ;在配置文件中加入 seccure_file_priv=NULL
  3. 开启日志审计功能: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加固
  1. 删除不必要的账号
  2. SQLServer用户口令安全
  3. 根据用户分配帐号避免帐号共享
  4. 分配数据库用户所需的最小权限
  5. 网络访问限制
  6. SQLServer登录审计
  7. SQLServer安全事件审计
  8. 配置日志功能

远程控制加固

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分钟)

makesudo 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环境安装

  1. 解压源代码: 下载完成后,使用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的版本号。

  2. 编译安装PHP: 解压后,进入到解压的目录,然后运行以下命令来编译和安装PHP:

    `cd /home/username/php-src ./configure --prefix=/path/to/php/install/dir

    make

    make install`

    其中--prefix=/path/to/php/install/dir指定了安装PHP的目标目录。

  3. 验证安装: 安装完成后,你可以通过运行以下命令来验证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脚本
  • WAF脚本参考: GitHub - sharpleung/CTF-WAF: 针对CTF线下赛的通用WAF,日志审计功能。

https://github.com/PlutoaCharon/AWD-Attack-Defense

Waf.php

waf的激活方式:

  1. php.ini选项:auto_prepend_file =与auto_append_file =包含waf,需要权限较高。
  2. config.php 中包含waf
  3. 让所有的文件都包含waf

WAF保护文件脚本

CTF-WAF-master.zip

在需要保护的 PHP 文件中包含 CTF_WAF.php

在每个需要保护的 PHP 文件的最开始(通常在任何其他代码之前),添加以下代码行:

include_once('/path/to/CTF_WAF.php'); 

这里的 /path/to/CTF_WAF.php 应该替换为实际的路径,指向你存放 CTF_WAF.php 的位置。使用 include_once 确保即使多次引用也只包含一次文件,防止重复执行。

WAF日志记录脚本

log-record.php

创建放日志的文件夹

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及端口

awd.py

Python脚本

文件监控脚本1(内网环境无需依赖)

文件变化实时监控工具.zip

使用方法:,命令行Python3 main.py,然后输入需要监控的目录的绝对路径

缺点:只能监控文件不能监控文件夹

文件监控脚本2(内网环境无需依赖)

monitorpro.py

使用方法:命令行Python3 monitorpro.py,自动监控文件夹,删除文件自动恢复,自动备份到特定文件夹,新上传的文件会被转移到特定文件夹并修改后缀为.txt,日志输出到特定文件夹

在这里插入图片描述

Python2版本:

monitor.py

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还是在后边,或者用别的脚本记录流量,有的比赛也会定时提供上阶段流量

被上马一定要先备份到本地,再删除、去分析反打别人

lljk.php

关闭进程
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_linux_amd64.zip

**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))

1n7erface/Template: Next generation RedTeam heuristic intranet scanning | 下一代RedTeam启发式内网扫描 (github.com)

2、扫端口(nmap)
  • 首先搜集自己端口信息 ,再类比扫描其他主机
3、应用发现(指纹识别)

TideFinger_Linux

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_3.2.4_linux_amd64.zip

初始化

./nuclei -u 192.168.52.10

然后将模版解压到/home/kali/nuclei-templates里面(只解压内容,文件夹名字要和nuclei-templates一致)

nuclei-templates-9.8.1.tar.gz

在这里插入图片描述

然后就正常打点

在这里插入图片描述

针对 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自己资产的代码)

综合工具扫描

POC-bomberPOC检测利用.zip

后门利用

写Python脚本批量提交flag

流量混淆

jiaosigun.py

发送混乱的流量

自动化攻击脚本

awd_attack.py

  1. back_door(): 这个函数用于在指定的IP地址范围内尝试通过一个后门地址(shell_addr)和密码(shell_pass)来执行一个特定的payload(一段代码或命令)。它使用requests库来发送HTTP请求。这个函数会检查响应中是否包含特定的字符串(“flag”),如果包含,则将IP地址和响应内容写入到一个文本文件中。
  2. make_sudo(): 这个函数的目的是在一个IP地址范围内通过后门种植一个不死马(一种持久化攻击手段),并将维持了权限的IP地址写入到一个文本文件中。它使用base64编码来传输PHP代码,并通过HTTP请求发送到目标服务器。
  3. 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、权限维持

不死马

不死马

不死马.txt

将该文件重命名为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.py

------定时任务写入脚本

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再删库

awd_jiaosigun.py

直接运行,代码注释的部分需要自定义参数

批量获取flag 可视化gui软件

getflag.exe

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640786.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google Ads广告为Demand Gen推出生成式AI工具,可自动生成广告图片

谷歌今天宣布在Google Ads广告中为Demand Gen活动推出新的生成人工智能功能。 这些工具由谷歌人工智能提供支持&#xff0c;广告商只需几个步骤即可使用文本提示创建高质量的图片。 这些由人工智能驱动的创意功能旨在增强视觉叙事能力&#xff0c;帮助品牌在YouTube、YouTube…

Webpack-

定义 静态模块&#xff1a;指的是编写代码过程中的html&#xff0c;css&#xff0c;js&#xff0c;图片等固定内容的文件 打包&#xff1a;把静态模块内容压缩、整合、翻译等&#xff08;前端工程化&#xff09; 1&#xff09;把less/sass转成css代码 2&#xff09;把ES6降级…

1.基于Springboot对SpringEvent初步封装

一&#xff1a;前置知识 Spring Event是Spring框架提供的一种事件机制&#xff0c;用于处理组件之间的通信。在复杂的系统中&#xff0c;模块或组件之间的通信是必不可少的。Spring Event可以用于以下场景&#xff1a; 1.系统间解耦&#xff1a;模块或组件之间通过事件进行通…

.gitignore语法及配置问题

语法及配置 前言.gitignore语法Git 忽略规则优先级gitignore规则不生效Java项目中常用的.gitignore文件c项目中常用的.gitignore注意事项 前言 在工程中&#xff0c;并不是所有文件都需要保存到版本库中&#xff0c;例如“target”目录及目录下的文件就可以忽略。在Git工作区的…

NLP大模型的训练

NLP模型的训练主要分成两步&#xff1a; 1.先进行通用任务的训练&#xff1b;无监督的样本是无穷无尽的&#xff1b; 这里列举两种&#xff1a;MLM和NSP,NSP由于在某些论文中被证明是无效的&#xff0c;所以用的少&#xff1b; MLM: 接下来会在特定任务上进行finetune>su…

夜神、雷电、android studio手机模拟器资源占用情况

夜神、雷电、android studio手机模拟器内存资源占用情况 由于开发电脑只有16G内存&#xff0c;出于开发需要和本身硬件资源的限制&#xff0c;对多个手机模拟器进行了机器资源占用&#xff08;主要是内存&#xff09;的简单比较。 比较的模拟器包括&#xff1a; 1. Android S…

[Kotlin]引导页

使用Kotlin Jetpack Compose创建一个左右滑动的引导页, 效果如图. 1.添加依赖项 androidx.compose.ui最新版本查询:https://maven.google.com/web/index.html com.google.accompanist:accompanist-pager最新版本查询:https://central.sonatype.com/ 确保在 build.gradle (M…

C语言——内存函数的实现与模拟

1. memcpy 函数 与strcpy 函数类似 1.头文件 <string.h> 2.基本格式 • 函数memcpy从source的位置开始向后复制num个 字节 的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有任何的重叠&#xff0…

数据分析_数据分析思维(1)

数据分析_数据分析思维(1) 这篇文章具体的给大家介绍数据分析中最为核心的技术之一: 数据分析思维的相关内容。 一、数据分析的三种核心思维 作为新手数据分析师或数据运营, 在面对数据异常的时候, 好多小伙伴都会出现: “好像是A引起的”, “好像也和B渠道有关”, “也可能…

3D MINS 多模态影像导航系统

3D MINS多模态影像导航系统&#xff08;Multimodal Image Navigation System&#xff09;是SunyaTech研发的建立在DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;图像基础之上的多模态影像导航系统&#xff0c;集二维影像PACS管理、三维影像层级…

李宏毅2022机器学习/深度学习 个人笔记(3)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录代码效果不佳时应该怎么做 如下图所示&#xff1a; 接下来探讨&#xff0c;当optimization不佳的时候&#xff0c;如何判断是遇到了鞍点还是遇到了局部最小值点&#xff1f;可以通过多元函数的泰勒…

Redis - Redisson tryLock 函数参数分析

这里有三个参数&#xff1a; waitTime&#xff1a;等待时间leaseTime&#xff1a;超时施放时间TimeUnit&#xff1a;时间单位 等待时间 如果 ABC… 多个线程去抢夺一把锁&#xff0c;A 成功了&#xff0c;如果设置的是 -1&#xff0c;那么 BCD... 就不等待&#xff0c;直接返…