RDG防御指南(例题及方法)
字数 1545 2025-08-25 22:59:20
RDG防御指南详解
目录结构知识
常见站点默认目录
- Nginx目录:
/usr/local/nginx - MySQL目录:
/usr/local/mysql - MySQL数据库所在目录:
/usr/local/mysql/var或/var/lib/mysql - PHP配置文件目录:
/usr/local/php或/etc/php/x.x/ - Nginx站点默认目录:
/var/www/html或/usr/local/nginx/html - Apache站点默认目录:
/var/www/html或/usr/local/apache/ - Java目录: 通常为
/usr/webapp/xxx或/app/xxx,可通过ps -aux查看
Web防御实例
例题1:Flask权限控制
题目描述: flag在/secret,只有admin可以访问,其他用户不行;修补白名单命令: ['mv', 'cp', 'chmod']
防御方法:
-
了解flask_login模块鉴权:
- 使用
current_user代理对象检查用户权限 - 参考文档: Flask-Login中文文档
- 使用
-
设置权限:
- 在
/admin/console路由添加条件判断
if not current_user.is_admin: return "Access Denied", 403 - 在
-
过滤其他路由:
- 检查
/process_file路由是否可直接读取/secret - 应用相同WAF规则
- 检查
-
打包脚本:
#!/bin/bash
mv main.py /app/main.py
chmod 755 /app/main.py
例题2:不安全组件移除
题目描述: 金融系统引入不安全组件,存在后门;修补白名单命令: ['mv', 'cp', 'chmod','rm']
防御步骤:
- 通过
ps -aux定位Tomcat运行目录:/tomcat/webapps/ROOT - 发现
.shell.jsp木马文件 - 检查Tomcat的lib目录,查找最近修改的依赖文件
- 使用jadx反编译可疑jar文件,发现Filter内存马
修补脚本:
#!/bin/bash
rm -fr /tomcat/webapps/ROOT/.*.jsp
cp -pa shell.jsp /tomcat/webapps/ROOT/.shell.jsp
cp -pa index.jsp /tomcat/webapps/ROOT/index.jsp
rm -fr /tomcat/webapps/ROOT/*.html
rm -fr /tomcat/lib/tomcat-i18n-bk.jar
例题3:文件读取漏洞修复
题目描述: 存在文件读取漏洞
防御方法:
- 通过
ps -aux定位Java应用路径:/meeadmin/mee-admin.jar - 使用IDEA分析源代码,定位
FileUploadController和CommonFileController - 发现
fileName和filePath参数存在任意文件下载漏洞 - 修复方法: 过滤
filePath中的..和/
修补脚本:
#!/bin/bash
mv mee-admin.jar /meeadmin/mee-admin.jar
例题4:Pwn格式化字符串漏洞
题目描述: Write memos存在格式化字符串漏洞
修复方案:
-
方案一:
- 在eh_frame段添加%s格式化字符串
- 添加lea rdi addr指令
- 修改eh_frame段为可执行权限
-
方案二:
- 将printf替换为puts函数
- 调整plt函数偏移量(0x79-0x20)
- 移除多余的puts调用
语言特定防御方法
Java防御
工具:
- IDEA Ultimate Edition
- Jadx反编译工具
关键函数:
InputStream/OutputStream/FileInputStream(文件操作)readObject/writeObject(反序列化)Execute/URLConnection/executeMethod(请求伪造)
过滤示例:
String[] filterList = {"apple", "banana", "cherry"};
String str = "ana";
for(String s : filterList) {
if(s.contains(str)) {
System.out.println("Hacker!");
return;
}
}
PHP防御
WAF函数示例:
function wafrce($str){
return !preg_match("/openlog|syslog|readlink|.../i", $str);
}
function wafsqli($str){
return !preg_match("/select|and|\*|\x09|.../i", $str);
}
function wafxss($str){
return !preg_match("/\'|http|\"|\`|.../i", $str);
}
Python防御
过滤方法:
filter_list = ["apple", "banana", "cherry"]
strings = "ana"
for i in filter_list:
if i in strings:
print("Hacker!")
SSTI防御: 过滤{{}}{}{%class'"._等字符
Node.js防御
关键词过滤:
const keywords = ["apple", "banana", "cherry"];
for(const i of keywords) {
if(code.includes(i)) {
console.log("Hacker!")
}
}
服务重启命令
Go语言
#!/bin/bash
kill -9 $(pidof app)
cp 修改后的附件 /app
chmod +x /app/app 2>&1 >/dev/null &
Python语言
cp /app.py /app/app.py
ps -ef | grep python | grep -v grep | awk '{print $2}' | xargs kill -9
cd /app && nohup python app.py >> /opt/app.log 2>&1 &
PHP语言
#!/bin/bash
cp /index.php /var/www/html/index.php
Node.js语言
#!/bin/sh
cp server.js /app/server.js
ps -ef | grep node | grep -v grep | awk '{print $2}' | xargs kill -9
cd /app && nohup node server.js >> /opt/aa.log 2>&1 &
Java语言
#!/bin/sh
mv -f ROOT.war /opt/tomcat/webapps/ROOT.war
sh /opt/tomcat/bin/shutdown.sh
nohup sh /opt/tomcat/bin/catalina.sh run > myout.txt 2>&1 &