> 技术文档 > Linux - 安全排查 2_linux请求user-agent是什么

Linux - 安全排查 2_linux请求user-agent是什么


文章目录

  • 安全日志详解
  • 查询攻击者使用的操作系统
  • 查找攻击者所使用的资产收集平台
  • 查找攻击者所使用的目录扫描工具

安全日志详解

以下的大部分内容都会用到 安全日志(如Web服务器访问日志) 中的特定字段,推断攻击者的行为特征,所以先详细讲解日志的详细知识以便理解

这里以Apache日志为例

Apache 日志:全面解析安全运维的\"黑匣子\"
Apache 日志是Web服务器运行的完整记录,相当于服务器的\"飞行数据记录器\"。它详细记录了所有客户端请求、服务器响应及交互细节,是安全分析、性能优化和故障排查的核心依据

Apache 日志的核心作用
安全监控故障排查流量分析性能优化
可用于检测恶意扫描,暴力破解,注入攻击,服务中断,设备类型,识别慢请求等等

Apache日志类型详解

  1. 访问日志 (Access Log)
    文件路径:/var/log/httpd/access_log (CentOS)
    记录内容: 所有成功处理的客户端请求
    安全价值:
    检测扫描行为(高频404)
    识别暴力破解(密集POST /login)
    追踪数据泄露(异常大响应)

  2. 错误日志(Error Log)
    文件路径:/var/log/httpd/error_log
    记录内容: 服务器运行错误和警告
    关键信息:
    PHP致命错误(暴露路径信息)
    文件权限问题(Permission denied)
    模块加载失败
    拒绝连接攻击(Connection reset by peer)

  3. SSL/TLS 日志 (当启用HTTPS)
    文件路径:/var/log/httpd/ssl_access_log
    特有字段:
    加密套件(ECDHE-RSA-AES256-GCM-SHA384)
    客户端证书信息
    TLS协议版本(TLSv1.3)

Apache 日志字段详解 (CentOS 7 默认格式扩展版)

  1. 字段一:客户端IP地址 (Remote Host)
    作用: 记录发起请求的客户端 ip 地址
    示例: 192.168.1.1
  2. 字段二:远程逻辑用户名 (Remote Logname)
    作用: 记录客户端标识(RFC 1413标准)
    示例: -(几乎总是连字符)
    说明: 该字段已废弃,99%情况显示为 - (现代系统默认禁用ident服务)
  3. 字段三:认证用户名 (Remote User)
    作用: HTTP基础认证的用户名
    示例:
    -(未认证)
    admin(认证用户)
  4. 字段四:请求时间戳 (Time)
    格式: [日/月/年:时:分:秒 时区]
    示例: [26/Jun/2025:15:32:45 +0800]
  5. 字段五:请求行 (Request Line)
    格式: “请求方法 URI 协议版本”
    示例: “GET /wp-admin HTTP/1.1”
  6. 字段六:最终状态码 (Status Code)
    作用: 服务器返回的HTTP状态码
    常见值:
    200:成功
    301/302:重定向
    404:未找到
    403:禁止访问
    500:服务器错误
  7. 字段七:响应大小 (Bytes Sent)
    作用: 返回给客户端的字节数(不含响应头)
    示例:
    1234:返回1234字节
    -:空响应(如304)
  8. 字段八:来源页面 (Referer Header)
    作用: 记录请求来源的URL
    示例:“https://www.shodan.io/host/1.2.3.4”
  9. 字段九:用户代理 (User-Agent Header)
    作用: 客户端浏览器/工具标识
    结构解析:
    Mozilla/5.0 (操作系统; 平台信息) 引擎/版本 应用/版本

查询攻击者使用的操作系统

原理:

利用安全日志查找攻击者使用的操作系统

详细步骤(注:此日志文件是我自定义的,请以实际为准)

  1. 优先找到攻击者的 IP
awk \'{print $1}\' /var/log/httpd/access_log | sort |uniq -c | sort -nr

工作原理
查找攻击者IP详情

Linux - 安全排查 2_linux请求user-agent是什么

  1. 过滤 ip 查询日志
grep \'192.168.42.205\' /var/log/httpd/access_log | head -n 10

工作原理

  1. grep ‘192.168.42.205’ /var/log/httpd/access_log
    grep直接在文件 /var/log/httpd/access_log 中搜索包含字符串192.168.42.205的行(即该IP的访问记录)

  输出所有匹配的项

  1. | head -n 10
    通过管道 |grep 的输出传递给 head 命令

  head -n 10 截取前10行结果并显示

grep命令详解

Linux - 安全排查 2_linux请求user-agent是什么
由此可以得出攻击者操作系统为:X11; Linux x86_64; rv:68.0

注:因为User-Agent可以被伪造,不能直接作为攻击者操作系统的证据,只能作为间接参考,可以结合结合TCP指纹TTL值等网络层分析加以佐证,因为此篇涉及不到,以后有机会再讲


查找攻击者所使用的资产收集平台

核心思路
攻击者常使用自动化平台扫描互联网资产,这些平台会在服务器日志中留下特征痕迹(如 User-AgentReferer 字段)
注:
User-Agent 是 HTTP 请求头的一部分,用于标识发起请求的客户端软件信息
Referer 表示当前请求是从哪个网页链接过来的
也就是日志详解中的字段八字段九

常见的资产收集平台
ShodanZoomEyeCensysFofaIVRE

常见资产收集平台特征

  1. Shodan
    User-Agent 特征:ShodanShodan/1.0
    Referer 特征:http://shodan.io

  2. ZoomEye
    User-Agent 特征:ZoomeyeBotZoomeye
    Referer 特征:https://www.zoomeye.org

  3. Censys
    User-Agent 特征:CensysInspectCensys
    Referer 特征:https://search.censys.io

  4. Fofa
    User-Agent 特征:FOFAfofa.pro
    Referer 特征:https://fofa.info

  5. IVRE
    User-Agent 特征:IVRENmap Scripting Engine
    Referer 特征:通常无(IVRE基于 Namp/Zmap)

查寻命令
方法一:
适用于知道资产收集平台

grep \'资产收集平台\' 日志文件

例如:

grep \'shodan\' /var/log/httpd/access_log

Linux - 安全排查 2_linux请求user-agent是什么

也可以直接查找所有平台

grep -i -E \'shodan|zoomeye|censys|fofa|ivre\' /var/log/httpd/access_log

参数说明

  • -i :忽略大小写(匹配ShodanSHODAN
  • -E :启用正则表达式( | 表示逻辑或)

Linux - 安全排查 2_linux请求user-agent是什么

方法二:
如果不知道资产收集平台可以使用
过滤 ip 查询日志命令:

grep \'192.168.42.205\' /var/log/httpd/access_log | head -n 10

Linux - 安全排查 2_linux请求user-agent是什么


查找攻击者所使用的目录扫描工具

查找目录扫描工具与前两个相比比较难以理解,所以我就以更加通俗易懂的方式讲解

核心思路
攻击者使用工具扫描网站目录时,会在日志中留下独特的指纹,就像不同的人会留下不同的脚印。我们通过分析这些“脚印”来推断使用了什么工具

理解核心原理(为什么能检测?)
每种扫描工具都有\"身份证特征\":

  1. User-Agent:相当于\"工具名片\"
    Dirb:dirb/v2.22
    FFuf:Fuzz Faster U Fool

  2. 扫描模式:相当于\"作案手法\"

#mermaid-svg-sw5w191drmtePpzv {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sw5w191drmtePpzv .error-icon{fill:#552222;}#mermaid-svg-sw5w191drmtePpzv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sw5w191drmtePpzv .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-sw5w191drmtePpzv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sw5w191drmtePpzv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sw5w191drmtePpzv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sw5w191drmtePpzv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sw5w191drmtePpzv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sw5w191drmtePpzv .marker.cross{stroke:#333333;}#mermaid-svg-sw5w191drmtePpzv svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sw5w191drmtePpzv .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sw5w191drmtePpzv .cluster-label text{fill:#333;}#mermaid-svg-sw5w191drmtePpzv .cluster-label span{color:#333;}#mermaid-svg-sw5w191drmtePpzv .label text,#mermaid-svg-sw5w191drmtePpzv span{fill:#333;color:#333;}#mermaid-svg-sw5w191drmtePpzv .node rect,#mermaid-svg-sw5w191drmtePpzv .node circle,#mermaid-svg-sw5w191drmtePpzv .node ellipse,#mermaid-svg-sw5w191drmtePpzv .node polygon,#mermaid-svg-sw5w191drmtePpzv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sw5w191drmtePpzv .node .label{text-align:center;}#mermaid-svg-sw5w191drmtePpzv .node.clickable{cursor:pointer;}#mermaid-svg-sw5w191drmtePpzv .arrowheadPath{fill:#333333;}#mermaid-svg-sw5w191drmtePpzv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sw5w191drmtePpzv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sw5w191drmtePpzv .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-sw5w191drmtePpzv .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-sw5w191drmtePpzv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sw5w191drmtePpzv .cluster text{fill:#333;}#mermaid-svg-sw5w191drmtePpzv .cluster span{color:#333;}#mermaid-svg-sw5w191drmtePpzv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sw5w191drmtePpzv :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 扫描模式 Dirb
按字典顺序扫描 FFuf
超高频率爆破 Gobuster
专找敏感文件

  1. 特殊标记: 相当于\"作案签名\"
    FFuf/WFuzz:在URL中使用FUZZ占位符
    Dirsearch:可能添加X-Scanner: Dirsearch头部

通过 User-Agent扫描模式特殊标记 来判断使用的是什么目录扫描工具

常见的目录扫描工具有:
dirsearchdirbffufgobusterwfuzz

工具指纹特征详解
指纹在网络安全中特指能够唯一标识特定工具、软件或攻击行为的特征组合

  1. dirsearch
    指纹特征:
     默认User-Agent:python-requests/2.x.x
     路径爆破格式:/FUZZ 或自定义占位符
     独特Header:部分版本带 X-Scanner: Dirsearch
     请求规律:固定线程数+随机延迟(可通过 -t -delay 参数修改)
    日志示例:
GET /admin/ HTTP/1.1\" 404 153 \"-\" \"python-requests/2.26.0\"
  1. dirb
    指纹特征:
     默认User-Agent:dirb/v2.x (http://dirb.sourceforge.net)
     扫描路径:优先尝试 /robots.txt/index.html
     请求特征:顺序遍历字典,无随机延迟
    日志示例:
GET /wp-login.php HTTP/1.1\" 200 512 \"-\" \"dirb/v2.22 (http://dirb.sourceforge.net)\"
  1. FFuf (原fluf)
    指纹特征:
     默认User-Agent:Fuzz Faster U Fool v1.x
     占位符标识:URL中必含 FUZZ (如 https://site.com/FUZZ)
     高频并发:默认150线程,突发大量请求
    日志示例:
GET /backup.zip HTTP/1.1\" 200 10240 \"-\" \"Fuzz Faster U Fool v1.3.1\"
  1. Gobuster
    指纹特征:
     User-Agent:gobuster/v3.x
     模式标识:-m 参数决定扫描模式(dir/dns/vhost
     路径格式:/ +字典项(如 /admin
    日志示例:
GET /.git/HEAD HTTP/1.1\" 200 23 \"-\" \"gobuster/v3.5\"
  1. WFuzz
    指纹特征:
     User-Agent:Wfuzz/2.x
     请求头标识:Host: FUZZ.target.com(域名爆破模式)
     参数占位:?param=FUZZPOST数据爆破
    日志示例:
POST /login.php HTTP/1.1\" 302 0 \"username=FUZZ&password=test\"

查询命令(注:此日志文件是我自定义的,请以实际为准)
方法一:搜索所有工具的特征UA

grep -E \'dirb|gobuster|Wfuzz|python-requests|\"Fuzz Faster U Fool\"\' access.log | head -n 20#命令解析# grep  文本搜索工具# -E  使用正则表达式# \'dirb|gobuster...\' 工具的特征UA# access.log  要搜索的文件# head -n 20  指定显示行数(可选)

Linux - 安全排查 2_linux请求user-agent是什么

方法二:查看日志前20行

head -20 access.log

Linux - 安全排查 2_linux请求user-agent是什么

方法三:检查特殊占位符 “FUZZ”

grep \"FUZZ\" access.log

Linux - 安全排查 2_linux请求user-agent是什么

Error:resultnotfoundinresponse.