RDG Defense Guide
水一篇,文章拷来拷去
一些小操作
一些常见的站点目录,有时候能大派用场
- 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 目录:
- 找之前先运行下
ps -aux
- 一般
/usr/webapp/xxx
或者/app/xxx
- 找之前先运行下
- 其他语言
- 看
ps -aux
- 看
如果实在不知道建议请教裁判
例题1 (web)
题目描述:flag在/secret,admin可以看,但是别人不行;修补白名单命令:[‘mv’, ‘cp’, ‘chmod’];防御环境会在文件替换后重启服务
具体防御方法如下
- 了解flask_login模块鉴权过程
给大家推荐一份文档,Flask-Login — Flask-Login 中文 0.4.1 文档 (flask-login-cn.readthedocs.io),可以简单过一遍,我们待会用到的就是文档里边的 autherization
先导入一个current_user(作用:当前用户的代理对象。)它的值为 models/user.py 里的字段,如 current_user.username == self.username = username
- 设置权限
仔细审题,flag在/secret,只有admin可以看
,题目的意思是我们只需要能让admin看到flag就行了,别的用户不行,所以在 /admin/console
这个路由加个条件判断,修补方法查看注释即可
- 对别的路由进行过滤
由于题目已经事先给我们准备好了waf,我们看看还有没有别的地方需要过滤(如果不是admin用户)
会发现/process_file
这个路由也可以直接读/secret
文件,将上面的WAF稍作修改替换下即可
- 打包
1 |
|
结构如下
例题2 (web)
题目描述:该金融系统开发时引入了不安全的组件,你能找到里面的后门修复漏洞吗?修补的白名单命令[‘mv’, ‘cp’, ‘chmod’,’rm’]
这里需要找到web运行的目录在哪,一般直接 ps -aux
查看当前有哪些进程正在运行
如下图,可以很容易看出来是tomcat正在运行
由此可以找到对应的web目录为 /tomcat/webapps/ROOT
,同样先对其打包操作,然后看看哪里存在漏洞
比如这题,是存在一个 .shell.jsp
木马文件
直接查看该文件得到下图,很明显的木马文件
可以直接用D盾扫,或者用河马查杀工具(如果是线上的话),这题考查的是开发时引入了不安全的组件,所以我们查看tomcat的lib文件,看看最近一次做修改的是哪个文件
最后发现有个依赖是5月份修改的
下载下来拖到jadx反编译看看是不是马
Filter内存马,证据确凿了,利用姿势
修补方法
1 |
|
结构
例题3 (web)
题目描述:你能找到文件读取漏洞吗?
老样子,先看一下用啥跑的
发现使用 java -jar 直接跑jar包,然后搜一下文件在哪,这里搜出来路径为 /meeadmin/mee-admin.jar
查看目录会发现有files和logs,我们以files为入口点,猜测文件写入最终是写到这个目录里的
题目给了源代码,直接用idea打开源代码加载工程,记得重载maven
双击shift搜file,同时可以搜一下sql表在哪,本地起一个数据库,方便调试(可选)
搜到一个FileUploadController类
alt+7看看文件结构,有上传就会有下载
定位到当前类的包里,会发现还有一个CommonFileController类
类里边存在一个fileName和filePath
为了测试是否存在任意文件下载漏洞,可以构造一个payload,http://xxx.xxx.xxx.xxx:32201/mee/common/file?fileName=1.txt&filePath=../../../flag
如图,发现下载成功
知道了漏洞点,那防御方式就非常简单了,filePath
过滤掉 ..
和 /
就行
然后重新打包一下
修补包
1 |
|
结构
例题4 (pwn)
题目描述:Write memos and memo will help you remember things.
IDA打开反编译一下
一个很明显的格式化字符串漏洞,printf少了格式化字符串
所以修补办法很简单,第一种方法考虑把格式化字符串写入rdi中,在eh_frame段中加入一个%s的格式化字符串,然后在eh_frame上面写一段
1 | lea rdi addr |
然后在调用printf函数的时候跳转过来,需要给eh_frame段附上可执行权限 总体来说比较麻烦
第二种方法考虑把格式化字符串换成puts函数
由于这题用的是偏移计算plt函数的方式
首先注意到plt函数距离printf函数0x20的距离
这边的E8的x86汇编表示的是call 79 FC FF FF 表示的偏移的补码形式
我们只需要把0x79-0x20就可以把它变成puts了
但是如果遇到的不是偏移形式的,也就是没开plt.sec保护的情况下 可以直接修改printf为puts
接下来会遇到一个问题 就是puts函数比起printf函数会多打印一个回车也就是/n,但是我们可以看到程序在printf之后又加上了一个 puts。我们可以把上面的printf改成puts,然后再把下面的那个puts给nop掉这样就可以完成修改了
Java防御
使用软件:
IDEA Ultimate Edition,社区版的IDEA功能会不全,打起包来会很麻烦(用途:开发,代码审计,打包用)
Jadx(用途:反编译工具)
定位漏洞点
一些需要注意的函数
方便代码定位,定位代码快捷键IDEA双击Shift,然后直接搜即可
- InputStream(文件写入/读取)
- OutputStream(文件写入/读取)
- FileInputStream(文件写入/读取)
- readObject/writeObject(反序列化漏洞)
- Execute/URLConnection/executeMethod(请求伪造)
打包姿势
如果有源代码
IDEA打开直接加载,重载下Maven,然后数据库该配的配一下,如果懒得配(不调试)直接定位到漏洞点修改文件就行,参考上面的 meeadmin 这题
修改完文件后右边Maven图标点开package按一下就行,然后会在target/*里生成一个jar包或者war包
如果没有源代码
Jadx打开jar或者war包,找到存在漏洞的类,如下图
然后根据Jadx的项目结构新建一个IDEA项目
将反编译后需要修改的代码复制过去(如果有文件依赖也要一起复制)
然后看看有没有lib包,如果有的话在 webapp\WEB-INF\
下新建一个 lib
文件夹,如下图
然后把反编译后的lib里的jar包放进去接着右键IDEA里的lib文件夹创建库即可,打包方式和上面的一样
Java防御
数组循环过滤
1 | String[] filterList = {"apple", "banana", "cherry"}; |
或者一些字符串常用函数
1 | s.contains("xxx") || s.contains("xxx") || s.contains("xxx") || s.contains("xxx") |
关于过滤这块建议下个 https://github.com/Drun1baby/JavaSecFilters
不建议直接用replace替换
PHP防御
1 | function wafrce($str){ |
Python防御
数组过滤法
1 | filter_list = ["apple", "banana", "cherry"] |
字符串匹配法
1 | if 'xxx' in arr: |
针对SSTI进行过滤
1 | 过滤 |
一些常用的Web框架文档
- 基础:Django 教程 | 菜鸟教程 (runoob.com)
- 基础:欢迎来到 Jinja2 — Jinja2 2.7 documentation (jinkan.org)
- 基础:欢迎来到 Flask 的世界 — Flask中文文档(2.3.x) (dormousehole.readthedocs.io)
Node防御
过滤关键词
1 | const keywords = ["apple", "banana", "cherry"]; |
针对命令执行
- child_process
- exec
- execFile
- spawn
- openSync
[
]
- `
+
Reflect
update.sh命令速查
仅针对update.tar.gz修补包传上去后会异常的情况,如果有些题目原文件(没有做修补的)传上去后显示check检测失败,那么有可能需要我们自己重启服务端
Go语言
1 |
|
Python语言
1 | cp /app.py /app/app.py |
PHP语言
1 | #!/bin/bash |
Nodejs语言
1 | Nodejs语言 |
Java语言
1 |
|
一些文档(只看防御)
RDG Defense Guide