纯情 发布的文章

现在 tulang 终于迈出了第一步,已实现自举,已自举实现了 compiler,std,runtime ,覆盖了上百个测试用例

tu  [options] file.tu        
    build *.tu              编译 tulang 代码成汇编后进行链接生成二进制可执行文件
    -s  *.tu|dir            编译为 tulang 代码为 linux-amd64 汇编文件
    -c  *.s |dir            编译汇编为 elf&pecoff 跨平台可重定向 cpu 指令集文件
    -o  *.o |dir            链接 elf&pecofff 可重定向文件生成最终执行程序
    -d                      开启 trace 日志打印编译详细过程
    -gcc                    支持通过 gcc 链接生成最终可执行程序
    -g                      编译 tu 文件时带上 debug 段信息,支持栈回溯
    -std                    编译 runtime&std 相关内置库代码

到现在为止真正的实现了 0 依赖,坚持写了 4-5 年了,终于可以到试用测试阶段了,之前一直没有宣传过,今天也是第一次在这个论坛发帖,也算是激励一下自己吧

多年来就一直想不清楚一个问题:国内大牛这么多,为什么都在卷高级的优化,到现在为止都没有一个能用的上的真正意义的普通国产编程语言。

毕业多年来就一直想自己做一款对程序员友好的语言,感觉现在的语言为了高性能、安全,往越来越极端的方向走,现在工作中就是用的 rust ,简直折磨人,和当初用 php 时比起来,我认为动态语言才是更符合未来的方向,

但动态语言性能差,而且都是解释型,扩展差,通常通过写 c 语言动态库来实现增加一些底层的特性,最明显的就是 php 生态有个 swoole 扩展,就是写了一套 epoll 网络异步框架动态库,给 php 用,实际用起来效果也够用了,性能也比较好,但这种方式就是有点折磨人

所以我写 tulang 的目标本来就没有很大,只想走动态语言的方向,同时支持静态写法(自己写底层,自己写 syscall), 平时主要的就写写动态语法,没有心智负担,遇到性能问题的时候 就用静态语法写,也非常方便

还有一个目标就是,像 php ,python 这种都依赖 c ,gcc ,没有实现自举,环境依赖非常严重,所以 tulang 也要有自举,自己汇编自己链接,100%原汁原味
仓库地址: https://github.com/tu-lang/tu

最后欢迎大家试用,可以一起优化和做生态,我也会继续做下去,希望有一天能正式发生产版,成为国内的通用编程语言,也谢谢大家的 star

![? [AIGC] 小红书博文生成器:创造内容更进一步。](https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/17/1684309817.png!mark)

![? [AIGC] 小红书博文生成器:创造内容更进一步。1](https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/17/1684309822.png!mark)

名称:光点红

官网: www.wenanabc.xyz

功能:用于一键生成小红书风格的博文,简单输入对博文的描述,就能自动生成小红书风格的博文。

近来几个月 ChatGPT 的热度只增不减,许多应用都集成了 ChatGPT API ,但是有些使用都要自己去重新搭建一个新的程序,对于 WordPress 用户来说,没什么是一个主题或插件解决不了的问题。

Puock在 3 月份的2.7.6就已经支持了 ChatGPT 的集成,但是那个时候还是比较粗燥,在最新发布的2.7.9版本中已经实现了大部分功能,应该可以满足个人使用需求,包括以下内容:

  • 自定义 OpenAI API 代理域
  • 后台模型参数配置
  • 模型系统预设
  • AI 绘画支持( DALL.E )
  • 是否允许游客使用
  • Stream 方式输出
  • 默认提示语
  • markdown 渲染

    主题下载

    Github:https://github.com/Licoy/wordpress-theme-puock

截图

前台
Puock 主题给你的博客增加 ChatGPT- AI 助手-前台
后台配置
Puock 主题给你的博客增加 ChatGPT- AI 助手-后台配置

介绍

宝塔的证书续期功能一直有 bug ,莫名其妙续期不了,看了宝塔源代码感觉很复杂,自己菜无从下手。

于是动手写了这个面板,目前还有些不完善的地方,欢迎尝鲜!

好玩的地方

可以添加多个 ssh 服务器,然后比如你在命令行 cd 某个目录,你直接拖动文件到终端中,就会自动上传文件到这个目录下。(建议 20MB 以内的文件)。

说明

技术栈是 React TS + Django, 之前也发过帖子,拖到现在才更新,是因为后来发现可能我的 VUE 水平不够,

自己的项目写着写着都忘记该传什么参数了,于是去浅学了下 React 把前端重构了一遍。

仅支持 Debian 11 与 Ubuntu 22.04 ,暂时没精力去适配其他系统。

Watch the video

项目地址

https://github.com/UISSH/backend

演示地址

不要搞破坏,搞破坏的话直接删掉机器。

https://dev.uissh.com/

用户名:root 密码:root

为了避免破坏,后端权限从 root 降级成 admin ,目前仅为演示所用可能一些操作将会失败。
各位老哥部署的时候,尽量使用国外机器,国内机器网络环境估计安装巨慢。

然后强烈建议添加个域名解析,这样做后端将会尽可能的使用证书,比如 api 接口使用证书,phpmyadmin 也会使用证书,ftp 将会强制使用 ftps 协议。总之,一切能用到证书加密的地方,小弟都尽量使用证书去加密传输过程。

还有数据库也有证书加密的配置,目前没有做,没有多少人把数据库对外访问叭。

然后 ftp 支持挂载 s3 ,目前备份功能脚本需要自己写脚本添加到 crontab 中。

最后最后,各位不用这个面板或者担心安全问题,可以直接 systemctl stop ui-ssh 停掉整个面板而不影响网站的正常运行。

所有服务绝对不会去依赖面板的功能,面板只是起一个配置项目的可视化界面,而不应该成为项目运行的依赖。

从参加工作的第1台笔记本就一直采用Thinkpad系列,分别用过T400P,T440P,T480,基本上每4年更换一次,此次也不例外,于2022年9月份购入1台thinkpad T14 Gen3笔记本。不得不说,本人对商务本还是比较钟情于Thinkpad商务系列,毕竟自己是从事设计工作的,曾经中途想改过采用华为mateBOOk系列,但苦于性价比和对初中端独显的需求,还是放弃了更换华为的想法。。。。

 言归正传,新入手的thinkpad T14 Gen3是酷睿系列里算是配置比较高了,配置如下:CPU i7-1260P,内存板载16G(DDR4 3200MHz),硬盘为三星原厂512G,独显为N卡MX550(2G显存)。买之前就已经购入金士顿原厂的2T固态,1条16G三星原厂内存。笔记本到手之前,还没有开机,就已经迫不及待开后盖更换固态和内存了,更换完后安装系统,一次性点亮。安装系统当然是选择了64位WIN11系统,不然对不起这个笔记本的配置。

注意:更换固态硬盘的过程,需要提醒大家,ThinkPad T系列的笔记本不太好安装双面芯片的固态硬盘,起初我买的金士顿的2T固态就是双面芯片的,但笔记本的插槽不太支持,导致固态太厚,固定好尾部螺丝后,固态的PC板会有弯曲受力,时间长了也不确定会不会对固态芯片有影响,所以过了没有2个月,换了同容量单面芯片的固态,三星PM9A1,其实三星的980PRo和长江存储颗粒致态固态也是单面芯片的。

系统完成后,继续安装工作所需软件,CAD2020,PS2023等,但就CAD2020软件使用过程值得和大家分享一下经验。按以前个人安装系统的习惯,安装完系统之后,所有驱动直接用官方驱动替换一遍,觉得官方驱动毕竟是权威的,但经过使用一段时间,就会发现对这款笔记本,官方驱动并不是最适合的,尤其是电源管理相关的驱动等。因为,采用了官方驱动,运行CAD2020时经常出现硬件加速自动禁止,出现卡顿,鼠标漂移等现象,严重导致无法正常工作,心情也非常的不美好。同时发现,笔记本发热量大增,风扇特别狂噪。
接下来为解决此问题,在网上寻求一系列的解决方法,隔一段时间就会重装一次系统,更新驱动,包括显卡官网的驱动,更换其他品牌的内存等,能想到办法都用过了,但均无济于事。无意间,从网站上发现同款笔记本的用户分享提醒,尽量不要安装官方驱动,尤其开关为“Lenovo”标识的,当时还一直纳闷。反正是折腾,也不差这一下,找到了“不忘初心的精简版WIN11系统”,此系统安装后即可自动禁止系统更新,官方驱动更新,驱动安装DIY,用360驱动大师安装完所有驱动,仅采用了联想官方的主板芯片组驱动、显卡驱动和HotKey驱动,根据网友经验系统重启后,一定要关闭智能散热(Fn+T)功能。
这次折腾后,大功告成,世界一片安静,CAD2020运行流畅,CPU占用率低,各硬件温度均正常,散热情况良好,CPU正常温度控制在44℃,显卡48℃。

经验总结,解决办法可能是和更换系统、选择驱动有很大的关系,其他品牌的采用十二代intel CPU的笔记本可能也有此问题,可借鉴。至少对ThinkPad T14 Gen3笔记本是比较适合的。借次机向“不忘初心”大神表示感谢!

中午下班惊闻噩耗,真的有点懵逼,瞬间起了鸡皮疙瘩,人真是太脆弱了。

我能做的就是将博客备份下来,然后基于 ChatGPT 做个 CoolShell 博文问答机器人吧

功能如下:

  • 留个念想,对 CoolShell 博客的 740 篇文章做一个备份(还没爬取完毕,只录入了文章目录,手头有数据的朋友可以 PR)
  • 基于 ChatGPT 实现博客问答机器人
  • 服务化:

    1. 提供 QA 问答接口
    2. 提供文章展示查看接口
  • 微信群实现 QA 聊天
  • 提供 UI
  • 体验:
> >你好,做个自我介绍吧
>  你好,我是 CoolShell 问答机器人,我是由陈皓(左耳朵耗子)创办的。我可以基于上下文中的博客文章信息对用户的提问进行回答。
> 
>  简单说下 XY 问题
> XY 问题指的是当一个人遇到问题 X 时,他会想到一个解决方案 Y ,并去问别人如何实现 Y ,而不是直接问如何解决 X 。这种做法可能会浪费别人的时间和精力,因为 Y 并不一定是解决 X 的最佳方案。最终,讨论问题的人会明白原始问题 X 的本质,并发现 Y 并不是最佳的解决方案。

做的实在仓促(中午午休时间+下班到现在),后续再优化

项目地址:https://github.com/howie6879/coolshell_qa

我用了‮年三‬正版软件,钱‮完花‬了,家‮垮用‬了,现在好不‮易容‬有人发‮解破‬版,你们非说‮上他‬了马子,他‮没上‬上马子,我‮真是‬不知道啊,上了也‮办没‬法啊,谁家不‮破用‬解软件,难道你能保证‮一你‬辈子‮用不‬破解版吗,破解老哥发出来‮分一‬钱没收,破解者他‮本根‬没赚钱,球‮你球‬们别再查下‮了去
来源于pwn3‬
玩笑归玩笑,后门请自查
解压缩zip文件。Windows用户请在Powershell或其他高级Shell中运行,在CMD中运行可能体验不佳。

使用基础爬虫爬取并对爬虫爬取的链接进行漏洞扫描:

xray_windows_386.exe webscan --basic-crawler http://example.com --html-output xxx.html

使用 HTTP 代理进行被动扫描:

设置浏览器 http 代理为http://127.0.0.1:7777,然后使用浏览器访问网页,就可以自动分析代理流量并扫描。

xray_windows_386.exe webscan --listen 127.0.0.1:7777 --html-output xxx.html

快速测试单个 url, 无爬虫:

xray_windows_386.exe webscan --url http://example.com/?a=b --html-output single-url.html

手动指定本次运行的插件:

默认情况下,将会启用所有内置插件,可以使用下列命令指定本次扫描启用的插件。

xray_windows_386.exe webscan --plugins cmd_injection,sqldet --url http://example.comxray webscan --plugins cmd_injection,sqldet --listen 127.0.0.1:7777

生成 ca 证书:

.\xray_windows_386.exe genca

更新历程

1.GUI_TOOLS_闲客增强版 2022.4.17
在原有工具 "GUI肥胖版v8.0" 做出更新改动,再次致谢工具的原作者

  1. GUI_TOOLS_Py7h0n-Axiane_Mac母亲节专版 2023.5.16
    由于未能预期的Bug原因,Mac版本推迟发布
    3.GUI_TOOLS_Py7h0n-Axiane_Win母亲节专版 2023.5.17
    由GUI_TOOLS_Py7h0n-Axiane_Mac母亲节专版 2023.5.16重构页面改进而来
    Gui_Tools_Py7h0n-Axiane_Win母亲节专版

如何使用

双击 一键日卫星 即可,工具箱所在目录不要带有空格

内容递归

  1. 去除GUI界面中平时使用率低工具
  2. 删除文件夹内多余工具
  3. 重置内容取样与界面美化

    彩蛋增加

  4. 一键日卫星工具
  5. 母亲节快乐彩蛋,祝天下所有母亲!

    内容增加

    Gui_Tools_Py7h0n-Axiane_Win母亲节专版

  6. liqun1.6.2交流版
  7. Exp-tools综合利用工具
  8. Hw综合利用工具
  9. weblogicTool_1.1(深信服深蓝实验室天威战队强力驱动)
  10. shiro-v4.6.0
  11. Shiro-550-with-nocc
  12. jboss漏洞利用工具
  13. 若依综合利用工具
  14. Yakit老版本
  15. BerylEnigma 红队编码加密工具箱
  16. Hearts - APP 自动资产分析工具
  17. Tidewebshell免杀工具(定位至根目录使用)
  18. CS 4.7完美去暗桩版本

内容更新

  1. poc2jar新版本
  2. Gr33k工具替换为WIN版本
  3. 蓝队分析辅助工具箱V0.52 (希潭实验室强力驱动)
  4. burpsuite_pro_v2023.3.2(内置burp插件)
  5. Fofaviewer新版本
  6. 掩日免杀工具20230417
  7. GobyV2.4.8
  8. AuxTools Win V3.4
  9. Xray-GUI-CLI V1.9.9高级版本

下载地址:

https://pan.quark.cn/s/1ba08cbdcb49

前置了解:

what AFD is and what is does?
AFD (Ancillary Function Driver)是Windows操作系统中的一个内核模式驱动程序,它也是套接字(Socket) 通信的核心模块之一。
它提供了操作系统与网络协议栈之间的接口,让应用程序能够进行网络通信。支持WinSock,而WinSock是在Windows中访问网络服务的编程接口。
afd.sys 实现了套接字的管理,套接字之间的数据传输,监控套接字上的事件,afd.sys 还负责报告和处理网络通信错误。其实afd.sys功能基本上都是围绕网络套接字。它是网络上程序之间通信通道的端点。而套接字允许程序通过网络连接发送和接收数据。
通过这张图也可以更好的理解一下,而也让理解到winsock是user model下,afd.sys位于Kernel Mode,所以这种一般就需要一个桥梁将其联系来才能到达。

CVE-2023-21768 内核提权漏洞分析

漏洞原理:

该漏洞存在于AFD驱动程序处理用户模式输入/输出(I/O)操作的方式中。
具体来说,该漏洞允许攻击者向AFD驱动程序发送恶意输入/输出控制(IOCTL)请求,这可能导致以提升的权限执行任意代码。
这里从两个方面来看此漏洞,首先是通过补丁对比,其次再去通过公开的利用代码来进行分析和学习最后的利用过程。
从Winbindex拿到打补丁和未打补丁版本
Windows 11 22H2 KB5017389 (+6) x64 10.0.22621.608(未打补丁)
Windows 11 22H2 KB5022303 (+2) x64 10.0.22621.1105(已打补丁)

CVE-2023-21768 内核提权漏洞分析1
可以看见基本没有大改,基本都是细小的差距。基本就可以确定不是特别大的逻辑问题需要重写模块。而且看上去基本就一个函数需要去看一下AfdNotifyRemoveIoCompletion

CVE-2023-21768 内核提权漏洞分析2
其实从汇编代码这里就蛮明显可以看见,补丁处明显是增加了一处代码。来看一下f5之后的样子
CVE-2023-21768 内核提权漏洞分析3
CVE-2023-21768 内核提权漏洞分析4
原来是在之前加了一处if判断,再通过ProbeForWrite来进行检查a3。因为在原版的时候

**(_DWORD **)(a3 + 24)

(ProbeForWrite 的作用是检查用户模式缓冲区是否实际驻留在地址空间的用户模式部分、是否可写以及是否正确对齐。其参数含义如下

void ProbeForWrite(
  [in, out] volatile VOID *Address, //指定用户模式缓冲区的开头
  [in]      SIZE_T        Length, //指定用户模式缓冲区的长
  [in]      ULONG         Alignment //指定用户模式缓冲区开头的所需对齐方式
);)

现在通过函数的作用和diff的结果,确认了漏洞点是出现在AfdNotifyRemoveIoCompletion函数里,那么下一步就是要思考如何触发让我们的poc流程能触发到这个函数里边。
那么先来看一下此函数的交叉引用,来分析其调用序列
CVE-2023-21768 内核提权漏洞分析5
AfdNotifySock-->AfdNotifyRemoveIoCompletion
AfdNotifySock中调用AfdNotifyRemoveIoCompletion,而v7传入的就是后边a3的值。往上追踪代码发现
在到达函数之前很明显有几处条件判断,首先inputbufferlength要等于0x30,要不就会跳到分支LABEL_45就不会走到AfdNotifyRemoveIoCompletion函数那里。还需要Outputbuffer==0

CVE-2023-21768 内核提权漏洞分析6
继续往下边的流程走的话,会发现还经过了ObReferenceObjectByHandle函数,通过gpt的解释理解一下

CVE-2023-21768 内核提权漏洞分析7
所以在这里,我们要用NtCreateIoCompletion函数来创建有效的IO完成对象的句柄。而v11这块就是一个句柄HandleIoCompletion,再来让v10是个有效值来过下边的条件判断,这一处再后边的exp代码中也有体现。

CVE-2023-21768 内核提权漏洞分析8

while ( v13 < Inputbuffer->dwCounter) ) //这里要满足这个条件让其进入循环,将其counter 设为1
    {
      if ( pre_mode )
      {
        v24 = 0i64;
        v25 = 0i64;
        v15 = v13;
        pData1 = Inputbuffer->pData1;
        if ( v12 )
        {
          v17 = pData1 + 16 * v13; //这里是一个循环.上述 v13 < Counter就会循环,然后累加,这样需要的空间就变大了
          v31 = v17;
          if ( (v17 & 3) != 0 )
            ExRaiseDatatypeMisalignment();
          if ( v17 + 16 > *v14 || v17 + 16 < v17 )
            *(_BYTE *)*v14 = 0;
          *(_QWORD *)&v24 = *(unsigned int *)v17;
          *((_QWORD *)&v24 + 1) = *(unsigned int *)(v17 + 4);
          LOWORD(v25) = *(_WORD *)(v17 + 8);
          BYTE2(v25) = *(_BYTE *)(v17 + 10);
        }

最后Counter为1将pData1设置为一块申请出的空间,流程就会走到了AfdNotifyRemoveIoCompletion函数里

我们再来看 AfdNotifyRemoveIoCompletion 函数里还存在一个条件判断:
那就是当我们将dwLen 设置为1的时候,让IoRemoveIoCompletion返回0,if就会跳到pdata2 + 24 =v20那里,而pData2是一块申请出的内存。
这里最主要的就是来添加已完成的I/O操作,从而使IoRemoveIoCompletion正常返回。
使用NtSetIoCompletion ,此函数用于向 I/O 完成端口的完成队列中添加一个 I/O 完成包,这样就可以让IoRemoveIoCompletion返回0。从而最后走到漏洞触发点了。

CVE-2023-21768 内核提权漏洞分析9
总得来说就是dwLen 为 1,然后pData2指向一块可写的内存空间。
然后继续往上跟踪AfdNotifySock,看看是否还有调用
没有发现对该函数的直接调用,但是发现AfdNotifySock的地址在AfdIrpCallDispatch的函数指针表上方。
这张表包含了AFD驱动程序的调度例程,里面的函数都是AFD驱动程序的调度函数。调度例程用于通过调用DeviceIoControl来处理来自Win32应用程序的请求。每个函数的控制代码在AfdIoctlTable中找到。
CVE-2023-21768 内核提权漏洞分析10
从recon2015逆向AFD.sys的pdf文章中,可以知道afd其实是有两个调度表,还有一个是AfdImmediateCallDispatch

CVE-2023-21768 内核提权漏洞分析11
CVE-2023-21768 内核提权漏洞分析12
其实两个表里面的函数都是AFD驱动程序的调度函数,言归正传我们要找到怎么触发到AfdNotifySock函数,
首先需要通过AfdIoctlTable去获取ioctl_code
那么就需要计算AfdImmediateCallDispatch表的起点和指向AfdNotifySock的指针存储位置之间的距离
我们可以计算AfdIoctlTable的索引 在最后一位最后 查找发现AfdNotifySock函数的ioctl_code为12127h
CVE-2023-21768 内核提权漏洞分析13
知道了ioctl_code,就可以在用户层调用DeviceIoControl来访问此函数了。
通过外佬x86matthew发布的代码能让我们很方便的利用起来。他在文章中提到NtCreateFile和NtDeviceIoControlFile 这两个函数,是Winsock库用来与AFD驱动通信使用的。
CVE-2023-21768 内核提权漏洞分析14
将代码编译运行的时候,下断点到afd!AfdNotifySock就会发现能触发到了。比较主要的就是下边两个函数的构造和喂参。

CVE-2023-21768 内核提权漏洞分析15
代码通过直接调用AFD驱动程序来执行套接字操作,为TCP套接字创建句柄,向AFD驱动程序发出IOCTL请求。这样我们就能通过获得的ioctl_code让我们能够触发目标函数。

代码分析:

现在让我们来梳理一下,我们已经知道了怎么触发到AfdNotifySock函数,然后又知道了怎么设置参数让其通过AfdNotifySock函数里的条件判断走到我们的漏洞函数AfdNotifyRemoveIoCompletion里边,在其里边的最后一个条件判断,我们也知道如何进行绕过。然后此时我们也掌握了如何使用代码调用afd程序(也就是触发AfdNotifySock)那么我们就来看看公开的exp,来分析验证我们的结论。

CVE-2023-21768 内核提权漏洞分析16

代码里有两个函数NtCreateIoCompletion,NtSetIoCompletion 一个是用来创建IO完成端口对象并返回其句柄
一个是用来将完成包添加到 I/O 完成端口的完成队列中,正好对上了我们分析的两个函数(IoCompletionObjectType,ObReferenceObjectByHandle)要求绕过的条件。

再到下边引用x86matthew的代码NtCreateFile去触发afd驱动

ObjectFilePath.Buffer = (PWSTR)L"\\Device\\Afd\\Endpoint";
    ObjectFilePath.Length = (USHORT)wcslen(ObjectFilePath.Buffer) * sizeof(wchar_t);
    ObjectFilePath.MaximumLength = ObjectFilePath.Length;

    ObjectAttributes.Length = sizeof(ObjectAttributes);
    ObjectAttributes.ObjectName = &ObjectFilePath;
    ObjectAttributes.Attributes = 0x40;

    ret = _NtCreateFile(&hSocket, MAXIMUM_ALLOWED, &ObjectAttributes, &IoStatusBlock, NULL, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 1, 0, bExtendedAttributes, sizeof(bExtendedAttributes));

CVE-2023-21768 内核提权漏洞分析17
这里就是上述分析漏洞时得出的条件,hCompletion 为句柄,data1 data2 为两块内存空间,counter为1
len为1,以此来进行条件判断的绕过。
使用NtDeviceIoControlFile与AFD驱动程序通信,用触发到我们的函数

_NtDeviceIoControlFile(hSocket, hEvent, NULL, NULL, &IoStatusBlock, AFD_NOTIFYSOCK_IOCTL, &Data, 0x30, NULL, 0);
//AFD_NOTIFYSOCK_IOCTL 0x12127

这里的AFD_NOTIFYSOCK_IOCTL 就是上方我们计算得到的ioctl_code为12127,从而完成漏洞的触发。

I/O Ring

然后剩下的就是用于在Windows 11 22H2 独有的后利用原语 I/O Ring,原作写的非常细节易懂,这里俺就不过多叙述,简单陈述一下过程让整个漏洞利用串联起来。主要是 对I/O Ring逆向非常细致,以此他挖掘出一套利用I/O Ring 的读写机制从而达成漏洞利用原语。 它是一个异步 I/O 机制,该机制是仿照 Linux 的io_uring
CVE-2023-21768 内核提权漏洞分析18
这个东西是一个提交队列,而它是一个环形的结构,正好对应下图的Submission Queue

CVE-2023-21768 内核提权漏洞分析19
图中就是Submission Queue Entry的结构,而下图是准备提交给内核的提交队列。

CVE-2023-21768 内核提权漏洞分析20
这三个图就基本上含括了基本的核心。而当上述的情况发生会有如下的情况

  1. I/O ring->RegBuffers and IoRing->RegBuffersCount 设置为0
  2. 内核验证 Sqe->RegisterBuffers. 缓冲区 和 Sqe->RegisterBuffers. 计数都不为零。
  3. 如果请求来自User model,那么数组就可以验证它是否完全位于用户模式地址空间中。数组的大小也可以达到sizeof(ULONG)
  4. 如果环有一个预注册的缓冲区数组,并且新缓冲区的大小与旧缓冲区的大小相同,则旧缓冲区数组将被放回环中,而新缓冲区将被忽略。
  5. 如果前面的检查通过并且要使用新的缓冲数组,则会进行新的分页池分配,然后会从User model的数组复制数据,指向 I/O ring->RegBuffers。
  6. 如果I/O ring 以前指向过一个已注册的缓冲区数组,那么它将被复制到新的内核数组中。任何新的缓冲区都将添加到相同的分配中,在旧缓冲区之后。
  7. 然后就会去探测从用户模式发送的数组中的每个条目,以验证所请求的缓冲区完全处于用户模式,然后将其复制到内核数组中去。
  8. 旧的内核数组(如果存在的话)被释放,操作完成。上述的操作跟之前的漏洞原语其实都有相似之处,都有一部分是将数据从用户模式下copy到内核模式下,而用户模式则是被我们所控制,这样就代表进入内核的部分数据将由用户可操作。
    但是文章又提到数据只从用户模式读取一次,正确地探测和验证这样就避免内核地址的溢出和意外读写。将来对这些缓冲区的任何使用都将从内核缓冲区中获取它们。 这看起来已经扼杀了我们的想法。但是如果我们有一个任意的内核读写漏洞呢。
    IoRing->RegBuffers指向假的、用户控制的数组,我们就可以使用普通的I/O环操作来生成内核读和写到我们想要的地址,通过指定一个索引到我们的假数组作为缓冲区,内核就会将从我们选择的文件读到指定的内核地址,导致任意写入。
    那么最后实现漏洞原语的利用就是下边的步骤:
  9. 使用CreateNamedPipe创建两个命名管道:一个用于内核写入的输入,另一个用于内核读取的输出。至少应该用PIPE_ACCESS_DUPLEX 为标志创建作为输入的管道,以允许读和写。使用PIPE_ACCESS_DUPLEX创建这两个文件
  10. CreateFile打开两个管道的客户端句柄,且具有读和写权限。
  11. 创建 I/O ring: 使用CreateIoRing API
  12. 在堆中分配一个假缓冲区数组: 但是从22H2版本开始,注册的缓冲区数组不再是一个平面数组,而是一个IOP_MC_BUFFER_ENTRY结构的数组
  13. 查找新创建的 I/O ring 对象的地址: 由于 I/O ring 使用新的对象类型IORING_OBJECT,那么就需要使用SystemHandleInformation工具包里的NtQuerySystemInformation 泄漏对象的内核地址,包括我们的新 I/O ring 对象。而IORING_OBJECT 结构位于公共符号表中,所以我们就不需要查找RegBuffers的偏移量。将两者相加就获得了任意写入的目标。
  14. 使用任意写入,用伪用户模式数组的地址覆盖IoRing->RegBuffers。如果之前没有注册一个有效的缓冲区数组,那么还必须覆盖IoRing->RegBuffersCount,使其具有一个非零值。
  15. 用内核指针填充伪缓冲区数组,以便进行读或写操作: ,使用与前面相同的技术来查找内核模块的基地址(NtQuerySystemInformation)或者使用I/O环本身内部可用的指针,这些指针指向分页池中的数据结构。
  16. 通过BuildIoRingReadFile 和 BuildIoRingWriteFile 对 I/O ring中的读写操作进行排队。
  17. 这里说的只是一个大概和我自己觉得能读明白的地方,,,建议要搞懂还是去自己看一下原文理解一下,Yarden Shafir也提供了源代码,跟着调试一下效果会更好。
  18. 这个漏洞利用原语给我的感觉就跟之前Windows Notification Facility(WNF)来实现任意内存读写原语有异曲同工之妙。

最后漏洞复现截图

通过IoRing 的任意地址读写 获取system token 和 本进程 token,从而进行替换操作即可。
CVE-2023-21768 内核提权漏洞分析21
PS: 从看雪师傅那里的文章发现有一些细节的问题(如怎么完成这个函数的需求条件)问chatgpt也是很好的选择,但如果网上资料较少的gpt就很容易胡言乱语导致我理解错的一个东西,,,还是要多方面参考好一点
然后因为此漏洞影响的型号有限,tmd 期间拿Windows 11 装的VS 2022生成项目,出现的错误真是一堆屎一样。避坑! 先后改了无数个项目配置,
先是死活CreateIoRing(IORING_VERSION_3, ioRingFlags, 0x10000, 0x20000, &hIoRing); 这句代码有红色浪线,最后把IntelliSense禁用
又是 error C2065: “IORING_VERSION_3”: 未声明的标识符。明明头文件都引入了,最后我把<ioringapi.h>这个头文件放第一行竟然就好了。
error no target architecture winnt.h 然后又爆这个错误,查一下最后为为预处理器定义添加宏,最后竟然又回去了!!!神经病啊我曹。然后折腾了半小时突然感觉是不是傻逼win11的问题,毕竟win11有一些奇怪bug不止一次了,然后拿win10重新了安装了一下vs2022编译一下就好了。。。

CVE-2023-21768 内核提权漏洞分析22
只想说一句,去你*的win11
参考:
x86matthew
i-o-ring
exp
kanxue
patch-tuesday-exploit-wednesday-pwning-windows-ancillary-function-driver-winsock

我用的依旧是免费版 zero trust 。

今天去后台看到可以用了,尝试打开试了一下连接可用。比如说这样的命令:

ssh -p 8022 100.73.0.9

warp 终于离真正的 vpn 更进一步了:它似乎还不能指定 IP 地址,也有可能是我没找到如何设置。

配置路径:


dashboard / zero trust / settings / network / firewall / proxy / warp-to-warp

不过它还处于 beta 阶段,未必所有人的账号都开通了。如果你那里还没有出现的话,不妨每月去看看。

smart-doc 是一款同时支持 JAVA REST API 和 Apache Dubbo RPC 接口文档生成的工具,smart-doc 利用接口泛型和 javadoc 注释自动分析生成 api 接口文档,不采用任何注解侵入到业务代码中。只需要在项目中引入 smart-doc 提供的 maven 或者是 gradle 插件,然后按照规范写好 javadoc 注释即可生成 api 文档。同时 smart-doc 也支持生成 openapi 和 postman 这些规范的文档,生成后可以直接导入相关工具做测试。

仓库地址

https://github.com/smart-doc-group/smart-doc

Features

  • 零注解、零学习成本、只需要写标准 JAVA 注释。
  • 基于源代码接口定义自动推导,强大的返回结构推导。
  • 支持 Spring MVC 、Spring Boot 、Spring Boot Web Flux(controller 书写方式)、Feign 。
  • 支持 JAX-RS 实现的 WEB 框架,例如 Quarkus 。
  • 支持 Callable 、Future 、CompletableFuture 等异步接口返回的推导。
  • 支持 JavaBean 上的 JSR303 参数校验规范,包括分组验证。
  • 对 JSON 请求参数的接口能够自动生成模拟 JSON 参数。
  • 对一些常用字段定义能够生成有效的模拟值。
  • 支持生成 JSON 返回值示例。
  • 支持从项目外部加载源代码来生成字段注释(包括标准规范发布的 jar 包)。
  • 支持生成多种格式文档:Markdown 、HTML5 、Asciidoctor 、Postman Collection 、OpenAPI 3.0 。Up- 开放文档数据,可自由实现接入文档管理系统。
  • 支持导出错误码和定义在代码中的各种字典码到接口文档。
  • 支持 Maven 、Gradle 插件式轻松集成。
  • 支持 Apache Dubbo RPC 接口文档生成。

    更新内容

  • 修复 qdox 不允许将字段名命名为 permits 关键字的 bug ,#498
  • dubbo 接口继承父类时,父类中接口未解析问题修复。#493
  • 优化插件对许多无关依赖的过滤,提升插件开箱即用的能力。
  • 支持禁用随机 mock 值生成,#497
    发展情况
    smart-doc 开源维护接近五年,目前很多功能已经非常稳定,国内有很多的用户。码云 star 超过 3k 。smart-doc 官方布道的企业级文档管理系统 torna 的 docker 镜像下载量超过 10k 。国内已有数家知名司在使用 smart-doc ,如:科大讯飞、小米、一加、顺丰、马蜂窝、同程旅行等。smart-doc+torna 的整套 API 管理体系已经被很多公司落地使用。

背景

如果大家做过开源项目或者在公司内部为其他部门提供服务,就会发现一个问题,很多用户并不会好好看文档而是直接咨询答疑人员。这种情况可能是用户的信息检索能力有限,也有可能是文档组织混乱,难以供用户检索。因此,如果能够将文档投喂给 ChatGPT ,让 ChatGPT 生成答案,能够大大减少答疑人员的工作量。

基于文档的聊天机器人方案其实已经有很多了,包括但是不限于 Langchain 、LlamaIndex 、闻达,遗憾的是无法满足下面的需求:

  • API:提供基于 HTTP 的 API 就能够将服务端和文档更新脚本部署在不同的机器
  • 支持删除:删除操作需要给每个文档设置唯一 ID ,所以他们实际上没办法支持删除文档
  • 问题记录:记录下用户提问、用户对回答的评价、生成回答使用的上下文,方便后续优化文档

    项目介绍

    项目起名为 MidSearch ( https://github.com/gorse-io/midsearch ),意思为从聊天机器人到搜索引擎的中间件。MidSearch 的工作量和其他 ChatDocs 产品没有什么区别。首先将文档导入到 Postgres 中,文档给会被分割并向量化。当收到用户提问的时候,首先将问题向量化,在 Postgres 中找到向量距离最近的几篇文档,最后将文档和问题发给 ChatGPT 生成最终的回答。
    MidSearch:一个基于 ChatGPT 的文档搜索引擎
    前文档类型支持 Markdown ,机器人支持 Discord 和 Telegram ,后续会更多的文件类型和机器人。

演示

程序员做饭指南
如果将程序员做饭指南( https://github.com/Anduin2017/HowToCook )导入到 MidSearch 中,就可以得到一个菜谱机器人(Telegram:@how_to_cook_bot)。搭建菜谱机器人的方法参考文章如何搭建一个菜谱机器人
MidSearch:一个基于 ChatGPT 的文档搜索引擎1
可以使用按钮对回答进行评价。

管理后台

管理后台可以查看用户对于回答的评价统计、浏览回答记录、管理文档。
MidSearch:一个基于 ChatGPT 的文档搜索引擎2

之前还在群里看别人发过,我也问了下,有热心市民回复说可能下个月发,没想到还没两天就到手了,之前都i不知道有着东西,这么些年,用了腾讯的很多产品,还是第一次拿到腾讯的这只企鹅。
路边的花

企鹅公仔

企鹅公仔1

企鹅公仔2

很多普通开发者, 甚至库的作者, 没有意识到 flate 算法内存占用过高的问题, 一个压缩器, 占用内存超过了 640KB !!!

package main

import (
    "compress/flate"
    "unsafe"
)

func main() {
    writer, _ := flate.NewWriter(nil, flate.BestSpeed)
    println(unsafe.Sizeof(*writer))
}

// output: 656648

我测试了一下三个 websocket package, 10000 连接, 开启压缩, 10s 广播一次, 结果如下

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  18563 caster    20   0 1340732 225504   4000 S   0.0   5.6  16:15.86 gws-linux-amd64
  18542 caster    20   0 1469756 351172   4912 S   0.0   8.8  25:17.99 gorilla-linux-a
  30294 caster    20   0 4791548   1.7g    880 S   0.0  44.6   0:07.33 nhooyr-linux-am
  • github.com/lxzan/gws
  • github.com/gorilla/websocket
  • github.com/nhooyr/websocket
    nhooyr降低到开 5000 连接才能正常测试

最近重新需要使用scrcpy进行投屏到电脑上操作手机,但是打字的时候只能输入数字和英文,通过查询(关于scrcpy对中文输入法支持不友好的解决办法 · Issue #1055 · Genymobile/scrcpy (github.com))知道qq输入法支持输入中文,但是又习惯用搜狗输入法了,经过链接里面有位老哥的思路提示,
我的需求是通过双击scrcpy-noconsole.vbs开启scrcpy后自动启用qq输入法,关闭scrcpy后启动搜狗输入法,方法如下:
(1) adb shell ime list -a查看当前手机安装的所有输入法的包名,复制想要切换的包名。
(2)adb shell ime set +输入法包名 命令可切换输入法。scrcpy-noconsole.vbs改为通过scrcpy-console.bat启动scrcpy,scrcpy-console.bat文件增加两条设换输入法的命令,两个文件内容具体如下:

scrcpy-console.bat文件:

@echo off
adb shell ime set  com.tencent.qqpinyin/.QQPYInputMethodService @rem 启动scrcpy前设置qq输入法
scrcpy.exe %*
:: if the exit code is >= 1, then pause
adb shell ime set com.sohu.inputmethod.sogou/.SogouIME @rem 退出scrcpy后设置搜狗输入法
if errorlevel 1 pause
adb shell ime set com.sohu.inputmethod.sogou/.SogouIME @rem 退出scrcpy后设置搜狗输入法

scrcpy-noconsole.vbs文件:
strCommand = "cmd /c scrcpy-console.bat"

For Each Arg In WScript.Arguments
    strCommand = strCommand & " """ & replace(Arg, """", """""""""") & """"
Next

CreateObject("Wscript.Shell").Run strCommand, 0, false

UDP 是什么

UDP是一种面向无连接的传输层协议,全称是User Datagram Protocol(用户数据报协议)。它是一种简单的协议,仅提供数据包的最小化传输服务。UDP协议不像TCP协议一样提供数据包的可靠传输,因此它更适合实时应用程序,如语音通信和视频流的传输。

什么情况下需要 UDP Ping

UDP Ping被用来确定指定主机的UDP通信是否畅通,通常用于网络故障排除和网络性能测试。以下是一些情况下需要使用UDP Ping的例子:

  1. 经常在网络游戏中发生网络延迟或断线的情况。在这种情况下,使用UDP Ping可以测试UDP流量的延迟和网络状况,找到网络问题的原因。
  2. 在VoIP音频和视频应用程序中,UDP是常用的协议。使用UDP Ping可以测试VoIP应用程序是否能够正常工作,并检查网络延迟和数据包丢失等情况。
  3. 在一些服务器应用程序中,例如DNS服务器,UDP被用来传输DNS请求和响应。使用UDP Ping可以测试DNS服务器是否可以正确处理UDP数据包并返回响应。

总之,当您需要测试UDP通信时,就可以使用UDP Ping。通过测试UDP协议的延迟和开销,可以帮助发现网络延迟和包数据损坏等问题。

那么Linux如何进行UDP Ping呢

在Linux上进行UDP Ping,您可以使用命令行工具nping或hping3。
以下是使用nping进行UDP Ping的步骤:

1.在终端中打开一个新的窗口。
2.输入以下命令:

nping --udp -p 53 <目标IP地址>

3.这个命令将在UDP 数据包中尝试向端口 53发送一些数据,并根据相应情况显示结果。这个命令可以从目标IP地址处接收到UDP回应,则表示UDP Ping成功。

以下是使用hping3进行UDP Ping的步骤:

  1. 在终端中打开一个新的窗口。
  2. 输入以下命令:

    hping3 -p 53 --udp <目标IP地址>

此命令将在UDP数据包中尝试向端口53发送一些数据,并在终端中显示相应结果。这个命令可以从目标IP地址处接收到UDP回应,则表示UDP Ping成功。

请注意,在某些情况下,您需要在您的系统上安装nping和hping3命令行工具才能使用它们。

数据结构与算法

  1. 手撕算法:将字符串转化为整数
  2. 列举常用的排序算法
  3. 堆排序和选择排序使用场景上有什么区别
  4. 选择排序和堆排序在资源利用方面有什么区别
  5. 常用的查找结构
  6. b树和b+树和红黑树的设计思路、结构区别、使用区别
  7. 队列和栈有什么区别?各自的使用场景是什么?
  8. 常见的hash冲突解决方案
  9. 大顶堆小顶堆的设计思路

    java相关

  10. jvm内存模型
  11. jvm垃圾回收算法
  12. jvm垃圾回收器
  13. cms、g1的设计思路、关联和区别、垃圾回收阶段的不同
  14. SpringBoot常用注解
  15. RestController和Controller有什么区别
  16. 全局拦截器的设计、项目中实现
  17. Aop底层实现
  18. 抽象类和接口有什么区别,分别适用什么场景
  19. java里面的类加载器的设计
  20. 如果父级对子级进行调用,会出现什么异常
  21. synchronize的使用流程
  22. java中的原子类实现原理
  23. HashMap的底层实现原理
  24. ConcurrentHashMap的实现原理
  25. 静态代理和动态代理的区别
  26. 浅拷贝和深拷贝的区别

    MySQL

  27. Mysql事务隔离级别
  28. 什么情况下使用读已提交
  29. 对于脏读的理解

    Redis

  30. redis 为什么读取速度那么快?
  31. 对于很多文件和数据,怎么进行数据的查找、排序,使用什么样的数据结构

    计算机网络

  32. http 和j https 的区别
  33. https 过程中都使用哪些加密的算法,详细讲讲这些加密算法

    Linux

  34. Linux都是用过哪些常用命令

  35. 如何查看系统内存

  36. 怎么将系统内存显示的数据进行排序

    操作系统

  37. 线程都有哪些状态
  38. blocking和waiting有什么区别
  39. 有没有了解过CAS

出去的时候总是会不停的按快门,好像就是为了那一声“咔嚓”的快门声,技术好像也没有,也不算个摄影师,只能算是个难得的爱好吧。5·1的时候看到一个经理说自己以前也是玩摄影,买的50D啥的,现在早不玩了,摄影穷三代。

[bsgallery title="一路走走拍拍"]
[bsimg title="蜜蜂采蜜"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0860.jpg[/bsimg]
[bsimg title="蜜蜂采蜜1"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0869.JPG[/bsimg]
[bsimg title="蜜蜂采蜜2"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0877.JPG[/bsimg]
[bsimg title="花花草草"] https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0891.JPG[/bsimg]
[bsimg title="花花草草1"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0892.JPG[/bsimg]
[bsimg title="花花草草2"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0895.JPG[/bsimg]
[bsimg title="花花草草3"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0897.JPG[/bsimg]
[bsimg title="花花草草4"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0899.JPG[/bsimg]
[bsimg title="花花草草5"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0899.JPG[/bsimg]
[bsimg title="五星霓虹灯"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0943.JPG[/bsimg]
[bsimg title="树叶中的光"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0969.JPG[/bsimg]
[bsimg title="虚焦"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_0971.JPG[/bsimg]
[bsimg title="公园玩"]https://xiaohack.oss-cn-zhangjiakou.aliyuncs.com/typecho/2023/05/09/IMG_1107.JPG[/bsimg]

[/bsgallery]