攻击机:192.168.10.40
靶机:192.168.10.131
内网探测
探测内网存活主机,
端口扫描
内网端口扫描,80端口是打开的状态,22端口有防火墙
filtered:nmap检测不出22端口的状态(nmap发送的包被防火墙拦截)。
对端口进行精确扫描,发现22的端口是关闭的状态。
nmap -sT -Pn -p 22,80
-sT:TCP Connect扫描,使用系统的connect(),三次握手完整走完,稳定但是不隐蔽。
-Pn:绕过主机的存活判断,直接进入端口扫描阶段,nmap在扫描前会先判断(ping)主机是否存活,
-p:指定扫描的端口
whatweb 192.168.10.131
探测目标网站信息
Web服务器:Apache
操作系统:Debian
IP:192.168.10.131
目录扫描
dirsearch -u 1[IP地址] -e*
访问网站,查看网站的相关信息,测试目录
访问display.php路径,能直接查看用户的信息。
/includes是一个员工详情页面
/manage.php是一个登录框
/search.php是一个搜索框
Web渗透
在网站的首界面能够查看用户的信息
在网站的搜索功能中输入用户的姓名也可以查看到用户的信息,这种搜索用户信息的一般都是与数据库进行交互,用SQL语句测试
直接输入' or 1=1#万能密码,拿到了用户的信息,有这个注入点就可以尝试sqlmap了。
在URL中没有搜索的参数,那么目标网站使用的应该就是POST传参了,POST传参中需要使用BP抓包获取请求包,使用bp抓包
把抓到的POST请求放到DC9文件中,其中search的内容不能编码,否则会失败
探测出了注入点,这个在刚才手动测试注入点时就发现了,这次用sqlmap看到的信息更详细。
sqlmap -r ./DC9 -p search --batch
-p 指定注入点
--batch 开启自动模式(提示自动选默认)
爆破出目标靶机的数据库,有三个数据库,第一个数据库是系统自带的,把目标放在Staff和users这两个数据库上,使用 --current-db获取正在使用的数据库
sqlmap -r ./DC9 -p search --batch --dbs
sqlmap -r ./DC9 -p search --batch --current-db:这个参数是获取当前Web应用正在使用的数据库名称
当前使用的数据库名称为Staff,从这个数据库入手
获取数据库中的数据表,只有一个users表
sqlmap -r ./DC9 -p search --batch -D Staff --tables
爆破出Users表的字段
sqlmap -r ./DC9 -p search --batch -D Staff -T Users --columns
指定字段,获取字段中的数据,
sqlmap -r ./DC9 -p search --batch -D Staff -T Users -C Username,Password --dump
--dump:构造可利用的SQL语句(比如:select Username,Password from Users)
users表中存放的是一些用户名和密码
这个密码是MD5哈希(32位十六进制)直接解密,拿到密码
下面有一个文件不存在标志,应该是文件相关的漏洞了。
靶场的文件包含一般都是file参数进行传参,可以使用本地文件包含,
尝试了一下远程文件包含,没有内容。
读取出来的用户当中,也包含了数据库中用户的信息,这里网站使用的用户都是系统用户
网站用户一般是www-data或apache
经过刚才的端口扫描可以知道22端口是关闭的,同时我们拿到了用户名和密码,如果端口长期处于filtered状态,可以判断他是knocked(端口敲门安全机制),他是一种安全机制,需要根据knocked配置,按照顺序访问端口,才会临时开放22端口。
knocked的配置位置在/etc/knockd.con文件中,读取它的配置文件。
openSSH(开门)下面的端口号就是他的敲门顺序,在25秒内分别访问这三个端口,成功敲门,临时开放22端口。
closeSSH(关门)当客户端反向访问这三个端口时(25秒内),关闭22端口
利用knock(敲门客户端工具)向目标发送按顺序的端口访问请求,只发送SYN包,不建立真实连接,在使用nc连接目标端口(按顺序),触发knocked,临时开启22端口。
再次使用nmap探测端口22端口是打开的状态。
使用hydra对目标主机的SSH服务进行并行登录尝试,一共有三个用户存在远程登录
hydra -L users -P password 192.168.10.131 ssh
-L:指定用户名文件
-P:指定密码文件
ssh :指定为SSH登录
经过测试另外两个用户没有能够利用的文件,在janitor用户家目录下发现一个隐藏目录里面有一个密码文件
BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts
把这里面的密码放入到刚才的密码文件中重新爆破用户的密码,可以看到多了一个用户
hydra -L users -P password 192.168.10.131 ssh
sudo -l 查看具有sudo权限的命令,可以看到/opt/devstuff/dist/test/test这个文件有root权限
直接执行文件,输出了一个文件名test.py
全局查找test.py文件
find / -name test.py
test.py文件内容
指定python解释器
判断sys.argv参数的个数不等于3就输出"Usage: python test.py read append",并退出程序。
以只读模式打开sys.argv[1]文件,以追加模式打开sys.argv[2]文件,把读取的内容写入到追加模式的的文件中,关闭文件。
脚本本身就代表第一个参数。
使用openssl生成一个密码,在/etc/passwd中不允许出现明文,在登录时系统会解析出加密所用的算法对用户输入的密码进行加密在和系统中存放的密码做一个对比,相同就表示成功。
这个加密的结构为$算法ID$salt$hash
salt为在计算哈希前额外加入到一段随机数据,
编写一个用户信息并放入1.txt文件中
用户名:密码:UID:GID:用户描述:家目录:登录shell。
其中UID/GID为0表示root权限。
执行脚本,切换用户,查看权限为root。
getflag
总结:
1.对目标网站做一个基本的信息收集,端口扫描,目录扫描,指纹识别,测试网站的漏洞点,根据网站的提供的功能点进行测试,如果有输入框之类的一般存在SQL注入,RCE,XSS的较多,用户登录之类的测试弱口令,根据网站使用的架构去网上搜索相关的默认密码和历史漏洞信息,在找到相关的漏洞点后进行利用,
2.这个靶机我们通过sqlmap知道了用户名和密码,网站中的文件包含漏洞能够读取系统的文件,为我们后续的漏洞利用提供了更广的面,通过对比系统和数据库中的用户信息,知道Web层、数据库层、操作系统层这三个没有做隔离,可以通过数据库中的用户信息直接连接到系统,22端口是个filtered的状态,并不代表是关闭的状态,
3.利用文件包含漏洞读取他的knocked信息,按照knocked的配置文件信息,使用knock(敲门工具)发送SYN包(不建立真实连接),利用nc连接目标端口,触发他的安全机制,临时开启22远程登录端口,利用hydra爆破出用户名和密码,测试每个用户的权限及能够利用的点,找寻以root权限执行的文件,并加以利用(提权)。
使用工具:wappalyzer nmap whatweb dirsearch sqlmap hydra 脚本提取