Windows 内核初探
在学习windows内核的过程中遇到了很多问题,用这个blog来梳理思路,解决问题。先把学习过程中看到的感觉不错的博客放在这https://cloud.tencent.com/developer/article/2154322
https://www.anquanke.com/post/id/203237
https://bbs.kanxue.com/thread-277016.htm#msg_header_h3_6
https://blog.csdn.net/wenzhou1219/article/details/17659485
内核是什么?和用户态的区别在哪里?用户态程序大家再熟悉不过了,一个main函数作为程序的入口点。开始执行之后顺着main函数继续执行就好了,很明确。
但是内核就不一样了。内核态的程序更多的是响应用户态的调用,满足用户态程序的需求(如对文件以及硬件的操作)
所以内核态程序和用户态的程序差距很大。首先,内核中的驱动程序没有main函数,取而代之的是一个叫做DriverEntry的函数——你总得告诉电脑程序从哪开始跑吧。但这个函数执行完了就完了,和main函数的 ...
SyzKaller windows fuzz相关代码阅读
extract.go看到网上大部分对于syzkaller的分析都是对于fuzz linux内核的流程的,尝试性的写一下其fuzz windows这样的闭源内核的流程。
先看一下docs/windows/readme.txt。给我们提供了一些有效信息在于
1234若要更新描述,请运行(假设 cl 交叉编译器在 PATH 中):syz-extract -os=windowssyz-sysgensys/windows/windows.txt 是通过 tools/syz-declextract 从 Windows 头文件自动提取的。
那么咱们追踪一下,在syz-extract文件传入os=windows时会发生什么。在sys/sys-extract/extract.go文件中有如下定义,将flagOS设置为runtime.GOOS或者用户传入的-os值
1flagOS = flag.String("os", runtime.GOOS, "target OS")
那么上面的命令行传入后flagOS会被设 ...
NtFuzz阅读笔记
参考了kiprey学长的阅读笔记,https://kiprey.github.io/2022/03/other_paper_notes/
这篇文章感觉还是比较难,重点在静态分析,现在也没有太弄懂,回头再细扣扣。(为什么图片显示不出来,不太理解,就这样吧
提出一个静态二进制分析工具来自动推测系统调用类型。NtFuzz:类型敏感的windows内核模糊测试器
introduction系统调用嵌套且相互依赖,在没有类型感知的情况下,很难生成有意义的测试用例。
难点:闭源,syscalls未知,没有文档,经常更改等。
NtFuzz分两步:分析kernel132.dll,ntdll.dll等调用系统调用的文件并推断类型。然后使用推得的类型进行类型敏感的变异。
第一步有文档的API通过其函数来调用系统调用。因此我们可以通过静态分析来得到无文档的系统调用的信息。
但api函数互相关联,进行静态分析时需要同时考虑内存,寄存器和在多个二进制文件中的函数。
通过模块分析来解决,对函数进行参数化,被调用的时候进行参数化
第二步使用用户态程序拦截系统调用,并对其调用的参数进行变异。
contribution ...
SAGE论文阅读笔记
本人读论文的时候随手记录的内容,建议结合论文原文一块阅读。本人不对以下内容负任何责任
Introduction现有工作基于手写CFG实现样例生成,两个问题
代码覆盖率受限
语义错误严重
语义正确的fuzzer基本只能保证调用函数时的参数类型正确,但仍然会出现其他的语义错误,这些错误主要分三类:(?
兼容性错误通常由浏览器兼容性问题引起。
误用错误是由于使用了不能在语义上一起使用的生成规则,即使它们单独使用时是有效的。
当先前生成的语句中的错误影响到使用错误语句中定义的变量的后续语句时,就会出现引用错误。尽管它们的外观各不相同,但所有这些语义错误都是由模糊器输入生成过程中产生规则的不正确组合引起的。
PCSG:Production-Context Senstive Grammar生成上下文敏感语法
提取w3c中的规则并增强为含有语义信息的PSCG(自动生成PCSG
三个过程:
从W3C中提取一个CFG
利用CFG生成样本并执行
通过分析每个statement的正确性,sage可以推断接下来选择某条规则进行生成时,会不会导致语义错误
这个过程会生成PCSG,最后sage通过PCS ...
从plt到ret2libc
从plt到ret2libc最近开始学pwn了,别问为什么,问就是有这个需要。
记录一下学习ret2libc的全过程。
动态链接、plt表和got表动态链接是什么:众所周知,c语言中使用的很多函数是调用的一些库里的,比如stdio.h。那么在编译的时候就有两种选项了。一种是直接把库里对应函数的具体内容copy到怎们写的程序里来,这个叫静态链接。而动态链接则是在程序里面放一个类似于超链接的东西,等到程序执行到这里了,再去找这个函数的代码具体放在哪里了并进行执行。
而plt表和got表就是在这个过程中要用到的两个东西。
plt表和got表首先,毋庸置疑的是,不管静态链接还是动态链接,在call的时候后面总要跟一个地址,静态链接的时候,call后面的地址直接就指向函数入口地址,动态链接则不然。他要通过一些编译器单独生成的几行代码再做跳转才能找到函数的入口地址。而用来存放这些单独生成的代码的表就叫做plt表。那么这些代码的具体内容是什么呢?可以简单认为是
1jmp *func@got
就是跳转到got表对应地址指向的位置。即got表是存放各个函数真实地址的位置,plt表中存放的代码会指引程序流 ...
php代码审计初探,fastadmin代码审计记录
612c4be5af9d151fcef04674f16b7b1198a220535dec485ecb4a46c76ef283134b787e4d633a14fa3a86bcb4042e22650a3f6ef5848a81d084488b027fa723c8ee052c73360da8806b5c1eab58a2d3dbe0c156eebebc0a9da7e863f117a734fc642315a990bb0cd71bccaf781458e529295b0d5718b55aad779c9c54cb0017c157242c7e987de9a1aca3006fb1f90dafb6e9678c297218f6d79978e50dbb07e28f637f9dfcb5db738b427d7ca22c14d7f3b4c5b633ffd3a94ebe40fa5af7fa8f3ce94efa02eb649ed0017984d2cdc6a5a054bfaf0a48f25edfa22b8dc6223667133d5cb2eca4f70843077d806f4da457c801393f339cb76e1 ...
JSC fuzz 教程
挖个坑先
JS原型链污染
js原型链污染什么是js原型(prototype)要弄清这个问题,就要先弄清什么事类和对象。类和对象是面向对象的编程语言中的几本概念。这里不进行详细阐述,简单的说,类可以实例化成为对象。二者内部都存在属性和方法。
现在来说原型。原型分为显式原型(prototype)和隐式原型(_proto_)。现在假定有一个类Foo和一个Foo类实例化得出的对象foo。我们可以通过
1Foo.prototype.FunctionName =
来定义原型。完成了定义后,就可以通过
1foo.FunctionName();
来对定义好的函数来进行调用了。
而__proto__和prototype的关系为:foo.__proto__ == Foo.prototype
总的来说,prototype是类的一个属性,而由该类实例化得到的对象都会拥有prototype的属性和方法。
什么是js原型链
这张图中可以看到,通过 __proto__ 可以一直往前找对象的原型,就形成了原型链。
而js在寻找属性时,如果在当前的对象中找不到,则会去对象的 __proto__ 中寻找。这个寻找机制就是 ...
一些知识点
一些乱七八糟的知识点md5(str,true)漏洞print_r(global(“*”))遍历目录js大小写特性字符”ı”、”ſ” 经过toUpperCase处理后结果为 “I”、”S”
字符”K”经过toLowerCase处理后结果为”k”(这个K不是K)
2024 ciscn 华北赛区初赛试题复现
2024CISCN web方向题目复现与知识点梳理1.simple_php非常狗的一道题先看源码:
1234567891011121314<?phpini_set('open_basedir', '/var/www/html/');error_reporting(0);if(isset($_POST['cmd'])){ $cmd = escapeshellcmd($_POST['cmd']); if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget|\ ...