last_post
弃坑
工作已经辞了,本博客不在维护更新
联系方式:joe1sn@foxmail.com
GIthub:Joe1sn
新博客【类似于精选存档】:https://joe1sn.eu.org
应该不会再继续做“网络安全”了,弃坑“网络安全”。
苕皮真好吃
烟草HW赚麻了
【免杀】DLL注入小结
DLL 注入进化史
远程线程调用注入
这个是最简单的
这里我接受的是程序的进程PID和待注入DLL的路径szPath
12345678910111213141516171819202122232425void DLLinjector::DllOnLoad() { if (!this->Check()){ wcout << "The Process or DLL file not found\n"; return; } //向目标进程写入DLL的路径 SIZE_T dwWriteSize = 0; HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, this->dwPid); LPVOID pAddress = VirtualAllocEx(hProcess, NULL, 0x100, MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProcess, pAddress, this->sz ...
【Win Pwn】基础栈溢出保护绕过
针对栈攻击的防护与绕过
GS
GS本质上和Linux GCC中的canary很相似,他在栈帧的结尾(EBP之前)插入一给DWORD类型的值,其副本存在于.data中。
在编译的时候并不会存在GS保护有下面几种情况
函数不包含缓冲区
函数被定义为具有变量参数列表
函数使用无保护的关键字标记
函数在第一个语句中包含内嵌汇编代码
缓冲区不是 8 字节类型且大小不大于 4 个字节
不过仍然可以采用#pragma strict_gs_check 强制启用GS保护
12345678910111213#include "string.h"int vulfuction(char* str){ char arry[4]; strcpy(arry, str); return 1;}int main(){ char* str = "yeah,i have GS protection"; vulfuction(str); return 0;}
绕过方式要漏洞类型灵活选择
如果是可以泄露那么泄露后拼接再溢出
再 ...
【Win Pwn】基础栈溢出利用
[Win Pwn] 基础栈溢出利用
window下无保护的栈溢出加载shellcode
程序
123456789101112131415161718192021222324252627#include <stdio.h>#include <string.h>#include <stdlib.h> void vuln(){ char password[6] = "ABCDE"; char str[6]; FILE *fp; if(!(fp=fopen("password.txt","r"))) exit(0); fscanf(fp,"%s",str); str[5]='\0'; if(strcmp(str,password)==0) // fprintf(stderr,"OK.\n"); printf("OK.\n"); else // fprintf(stderr,"NO.\n&qu ...
【CTF】2023 Google CTF WriteUp与复现
端午节打的比赛,事情比较多没怎么看题,指导学弟做了下,这里来个复盘。
开始CTF的复健之路吧。
Pwn
WRITE-FLAG-WHERE
最简单的一道pwn,没有开ASLR保护。当时我的机器跑不起来,学弟的能跑,和他一起分析。
程序的主逻辑是读取/proc/self/maps来读取存在的内存(gdb中的vmmap就是这样实现的),然后把 flag 读取到一个全局变量中,最后我们可以在任意一个地址写入任意长度(<0x7f)的flag中的字符串。
当时我们是在arch上做的,使用gdb能看到输出,然后尝试将flag覆盖内存中的提示语句
那么地址就是 *$rebase(0x21E0),尝试远程
得到flag
CTF{Y0ur_j0urn3y_is_0n1y_ju5t_b39innin9}
WRITE-FLAG-WHERE 2
当时离做出来差了亿点点。
保护没变,但是删除了之前的字符串修改点。后来我看到了有一段无关的代码段
后来想这道题快想魔怔了
【未解出】使用sscanf覆盖
挺疯狂的一个想法,由于死循环内不存在输入,但是sscanf会根据你的输入去匹配,然后我们又知道f ...
【免杀】C++函数进化
C++的函数进化小结
函数
有这样一个问题
1234567#include <iostream>int main(){ int IntArray = { 12, 13, 35, 16, 6, 5, 5, 12, 4, 13, 38, 35, 37, 33, 35, 15, 36, 14, 13, 12 }; //统计大于20的数字 return 0;}
那么很自然的给出解法
123456789101112131415161718#include <iostream>int CountMatch(int* start, int* end){ int sum = 0; for (; start < end ; start++) { if (*start > 20) sum++; } return sum;}int main(){ int IntArray[] = { ...
内存加载PE文件
使用windows API编写PE文件加载器(Loader)
目前支支持32位
PE文件结构
在《逆向工程核心原理》中讲的已经很详细了,这里主要面向32位的可执行程序来讲解。
DOS头和PE头统称为PE头,下面的部分称之为PE体。
DOS头
DOS头的文件结构
123456789101112131415161718192021typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number WORD e_cblp; // 文件最后一页的字节数 WORD e_cp; // 文件中的页数 WORD e_crlc; // 重定位 WORD e_cparhdr; // 段中头大小 WORD e_minallo ...
【Muud开发】2.HTTP服务改善
从0到1开发一个勉强能用的python web“框架”
项目地址:https://github.com/Joe1sn/muud
主要改进
6-1 返回报文设置
首先将原来的拼接字符串改为了Response类,实现HTTP报文字段的自定义
这样可以大大简化view.py中的代码
123456789101112131415161718192021class Response(): def __init__(self, type="json", status_code=200, reply="") -> None: self.content_type = content_types[type] self.status_code = status_code if type == "json": self.reply = json.dumps(reply, ensure_ascii=False).encode( ...
web_0x1
【Muud开发】1.基础结构解析
从0到1开发一个勉强能用的python web“框架”
项目地址:https://github.com/Joe1sn/muud
简单介绍
在毕业设计的时候,初始选题为《基于XMPP的即时通讯系统》,想的是自己照着RFC写一遍XMPP协议,但是时间不够(毕竟要上班)。所以把废案再利用,抽出其中的一些部分,从Socket到web框架,实现一个简单的CURD功能,锻炼一下自己的文档化编程能力。受我个人能力有限会随时断更,一路上只有vscode和chatGPT以及所需要的RFC文档。
再说说已实现的部分,首先是确定在Linux上运行的,使用python语言
使用epoll模型完成了部分HTTP服务器的功能
sqlalchemy完成了数据库的ORM实现
路由通过闭包完成
视图部分编写(只考虑JSON传递)
启动部分参考了Django的设计
最后运行的效果
需求分析
根据ChatGPT,一个典型的Python Web框架通常由以下几个核心组件组成:
路由(Routing):路由用于将传入的HTTP请求映射到相应 ...
win_kernel_1_baisc
I. Windows系统结构
I.a 大致结构
windows内核是从windows NT内核发展过来的,从开始就和硬件的发展息息相关。
Windows采用双模式(dual mode)结构来保护操作系统内核不受应用程序的错误而出现崩溃
windows的原始设计是一个支持多环境子系统的os,它还支持POSIX和OS/2环境子系统.为他们提供仿真执行环境
I.b windows内核组成结构
关于函数的开头
nt:内核提供的服务
Ldr:映像加载器函数
Csr:Windows子进程通讯函数
Dbg:调试函数
Etw:系统时间函数
Rtl:运行支持函数
执行体API函数接收的参数来自各种应用程序,通常会在程序的最开始处,对所接受的参数逐一探查他们的可访问性。
II. windows内核关键组件
HAL 硬件抽象层
HAL通常是一个独立的动态链接库,windows自身携带多种HAL,但是在系统安装的时候只会选择一种,改名为hal.dll。涉及中断控制器、单处理器/多处理器硬件断点。
内核(微内核)
在内核模块ntoskrnl.exe中的上层部分为执行体,下层最接近HAL的就是内核。负责 ...
CVE-Archive-4-Opt.Aurora
CVE-Archive Opt.Aurora APT-1
网安赛博编年史:极光行动 APT-1
⚠由于相关法律,该文章已被限制访问⚠
前夜骤雨
1917年11月7日,正巧亲布尔什维克舰队的5艘主力驱逐舰及其船员驶入圣彼得堡港湾。在喀琅施塔得,水手们也宣布响应布尔什维克起义。清晨,革命军事委员会计划从斯莫尔尼宫高度的防备和封锁的中心进攻或占领最后的地点。晚上9:45分,阿芙乐尔巡洋舰从港口放出空炮。1917年11月8日凌晨2:00布尔什维克强行闯入冬宫,经过宫内零星的枪战后,临时政府内阁投降。人类历史上第一个社会主义国家建立了!
20世纪70年代,米哈伊尔·布林厌倦了在苏联国家计划委员会的工作,“试图利用数据来证明苏联人的生活水平远比美国人高得多,这就是我在苏联时期的主要工作内容,可是事实又是如何呢?”。他在1979年迎接着巨大的社会压力带领全家搬到了美国马里兰,其中就有他的儿子:谢尔盖·布林。后来,well,我们都知道拉里·佩奇和谢尔盖·布林共同创建谷歌。
CN PLA 61398部队,没有人知道他是多久建立的,但是解放军2013年12月出版的《战略学》首次谈到中国军方 ...
mirai_bota
Mirai Botnet分支Satori分析
你知道一边开拉,一边逆别人代码是有多带劲吗?
暂时先更新这么多,后面应该还有相关作者被抓的一些消息和更多功能的逆向
基本情况
名称
x86_64
MD5
fe7ca3b588e342f79c7814bb75dc24d7
SHA256
e436196f047741070c580695f5444e0c2cdd175c88f68affdc9230d09a71c978
Domain
botnet.nguyennghi.info
ip
103.183.118.73
逆向分析
基本情况
64位ELF可执行文件
逆向工程
通过start找到main函数
使用IDApython脚本对类似的库函数实现进行函数重命名
1234567891011121314151617181920import idautilsimport idaapiimport ida_nameimport idcfor func_ea in idautils.Functions(): func = idaapi.get_func(func_e ...
learn_git
GIT查漏补缺
其实git并不像想象的那么简单,多人合作的时候仍然会有许多问题
这里记录在 https://learngitbranching.js.org/?locale=zh_CN 的学习笔记
本地篇
基础篇
1. git commit
Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!
Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。
Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上面都有父节点的原因 —— 我们会在图示中用箭头来表示这种关系。对于项目组的成员来说,维护提交历史对大家都有好处。
C2 的父节点是 C1,父节点是当前提交中变更的基础。
2. git branch
Git 的分支也非常轻量。它们只是简单地指向某个提交纪录 —— 仅此而已。所以许多 Git 爱好者传颂:
早建分支!多用分支!
这是因为即使创建再多的分支也不会造成储存或内存上的 ...
net_mode
简述网络协议模型实现
最简单的TCP/IP也要分很多实现的细节,以最简单的C/S模型为例子
同步阻塞
同步非阻塞
select/poll
epoll
基础模型
四种方式的解释
使用python创建最简单的一个C/S代码
server.py
12345678910111213141516171819202122232425262728293031import socket# 创建一个 TCP/IP socket 对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名host = socket.gethostname()port = 9999# 绑定端口号server_socket.bind((host, port))# 开始监听,最大连接数为 5server_socket.listen(5)print('服务器已启动,等待客户端连接...')while True: # 等待客户端连接 client_socket, addr = server_sock ...
windows_kernel_driver_2
[驱动开发] 2
探索CR4
探索页面
CR3寄存器于页遍历
虚拟地址->物理地址
[驱动开发]探索CR4
英特尔® 64 位和 IA-32 架构开发人员手册合订本
第3卷第四章第五小节《4-LEVEL PAGING AND 5-LEVEL PAGING》
判断CPU是四级分页还是五级分页
page: 3074
该寄存器的值决定了映射层级是4/5,
1:5级分页
0:4级分页
12345678//__readcr4() & 0x1000//__readcr4() & (1<<12)CR4 Cr4 = { .Value = __readcr4() };DbgPrint("CR4=0x%016I64X, CR4.LA57=%I64d\n", Cr4.Value, Cr4.Fields.LA57);if (Cr4.Fields.LA57) DbgPrint("The system using 5 Level Paging");else DbgPrint(" ...
windows内核驱动 1-环境搭建
[驱动开发] 1-环境搭建
简而言之就是
visual stdio 2019
windows SDK
windows WDK
如果vs没有kernel的项目的模板,找到vs目录的WDK.vsix即可
关于调试
windbg调试器
同时windows 虚拟机我使用的是 vmware,添加了一个COM串口
加载驱动
使用KmdKit
windows设置
msconfig -> 调试 -> COM2 …
最简单的hello world
打开vs,找到KMDF (kernel mode driver empty)
设置驱动项目
取消晚上12点后编译报错
项目 -> 属性 -> Inf2Cat -> Use Local Time
代码
main.c
12345678910111213141516171819202122#include <ntifs.h>// 驱动卸载函数VOIDDriverUnload(PDRIVER_OBJECT DriverObject){ UNREFERENCED_PARAMETER ...
intranet
内网渗透测试-新手村
简单一层内网测试
入口点
http://xxx:16xx8
是个OA办公系统,使用某漏洞可以文件上传最后webshell实现RCE
扫描内网发现存活主机,同时上传cs大马
使用mimikatz抓取明文得到rdp密码后使用socks代理进入内网可以访问远程桌面
内网I 监控服务器
192.168.xx.50
该服务器存在ms17-010漏洞,但是有杀软,尝试使用psexec文件上传执行RCE失败,因为被杀软拦截了,可能修改上传的exe文件能够绕过
也可以尝试使用command一句话+web_delivery上线
不过在192.168.xx.100时也扫出了RDP密码,也是直接上线了
内网II DHCP服务器
192.168.xx.250
一般来说DHCP服务器是与服务器,mimikatz没有抓到密码,不过还好有ms17-010漏洞,但是由于当时我没有使用正向payload所以使用的就是 web_delivery+command 上线,之后把msf的shell传递给cs来扫密码,得到密码后使用代理RDP上线
查看相关配置后基本可以肯定就是内网AD域控服务器
内网 ...
house_of_apple
house of apple
一种在高版本glibc中,没有常规hook的堆利用方法
源码编译
先上代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include<stdio.h>#include<stdlib.h>#include<stdint.h>#include<unistd.h>#include <string.h> void backdoor(){ printf("\033[31m[!] Backdoor is called!\n"); system("/bin/sh\x00"); _exit(0);} void main(){ setbuf(stdout, 0); setbuf(stdin, 0); setbuf(stderr, ...
新冠日记
新冠日记
从上个月放开以来,越来越多的人得
很不幸中招了,写写这次的防疫日记,记录些经验
用药计划
主要是发烧了,最开始吃两颗氨咖黄敏胶囊,因为我体重比较重且症状严重,最开始计量大一点。
之后就每次一颗,一日三次,直到退烧。
退烧了过后有点感冒的症状,就开始服用 风寒感冒颗粒
2022-12-14
可以说是起点了。全寝室起床都取得有点难受,我最开始是喉咙很沙哑,寝室的其他症状是:头痛乏力、发烧等。然后我去做了咽式,在12pm出的结果是阴性。但是睡不着,2022-12-15 4:44就醒了,以为是普通感冒。
2022-12-15
4:44行了过后发现是阴性,就以为是感冒。之前剩下的感冒清片一天的量都不够了,刚好室友的抗原到了,测了测是阴性,但是我现在严重怀疑是反应没有结束。寝室直接测出来两个小阳人。我想搬到实验室防止阳性,就从室友手里买了一点感冒药+酒精然后去了实验室。
实验室有位同学和我的症状有点一样,就让实验室的去测核酸。然后就去学校外面买口罩和退烧药,一路狂喷酒精。
大概下午三四点的时候就有点头痛+发力,说来搞笑的是突然不识字。在实验室躺了会儿去吃晚饭,顺便回寝室找 ...
CVE-Archive TAO
CVE-Archive TAO
[The Office Of Tailored Access Operations]
网安赛博编年史:TAO
前景
介绍
今天(2022年9月5日)中国大陆CCTV电视台报道了美国国安局特定入侵行动办公室入侵西北工业大学的事件,刚好这个系列前两篇文章也多次提到过这个组织。这里就介绍下美国的网络攻击与防御的体系架构,顺便蹭下热度。
先说说今天这个事情吧,西北工业大学的微信公众号说的就很清楚
还有就是国家计算机病毒应急处理中心通告中提到,貌似最后的损失是盗取了超过140GB的高价值数据,但仔细阅读文章发现并不是这样。文章说的是 近年 、 国内目标,没有单独说明是从西工大拿到了140GB目标。
个人因为对西工大的学科及项目不了解,这就不在进一步了。不过不知道是不是我语文学的有问题。
不过在中国现在面临的国际环境和国内环境中,可能只是转移大众目光和为后面与部分国际社会脱钩有关发出的一个不痛不痒的公告。毕竟一个著名网站数据库泄露的量级也和这个差不多,很难说清除所谓的140GB里面有什么有用信息。
最后说点比较危险的吧,外交部那个声明没啥 ...