文件类API学习-GetFileAttributes和SetFileAttributes
GetFileAttributes基本概念GetFileAttributes是Windows系统提供的一个文件操作API函数,用于获取指定文件或目录的属性信息。它可以判断文件是否存在、是否为目录、是否为只读文件等多种属性。GetFileAttributes是一个宏,根据项目是否定义UNICODE宏,会映射到宽字符版本(GetFileAttributesW)或ANSI版本(GetFileAttributesA)。 基本语法1234567DWORD GetFileAttributesW( [in] LPCWSTR lpFileName //文件或目录的名称);DWORD GetFileAttributesA( [in] LPCSTR lpFileName); 返回值 成功:返回一个DWORD类型的值,该值是文件属性的组合(多个属性通过位或|组合)。 失败:返回INVALID_FILE_ATTRIBUTES,此时可通过GetLastError()获取具体错误原因(如文件不存在、权限不足等)。 简单示例12345678910111213141516171819202122...
文件类API学习-FindFirstFile和FindNextFile
FindFirstFile基本概述:FindFirstFile是Windows API中用于启动一次文件 / 目录搜索的函数。它会在指定路径下查找第一个匹配条件的文件或目录,并返回一个搜索句柄(用于后续的FindNextFile调用),同时通过结构体返回该文件 / 目录的详细信息。FindFirstFile 是一个宏,根据项目是否定义UNICODE宏,会映射到宽字符版本(FindFirstFileW)或ANSI版本(FindFirstFileA)。 基本语法123456789HANDLE FindFirstFileW( [in] LPCWSTR lpFileName, //目录或路径以及文件名。 文件名可以包含通配符,例如(*)或(?) [out] LPWIN32_FIND_DATAW lpFindFileData //指向存储找到的第一个文件/目录的详细信息的结构体指针);HANDLE FindFirstFileA( [in] LPCSTR lpFileName, [out] LPWIN32_FIND...
文件类API学习-CreateDirectory
基本概念在Windows API中,CreateDirectory函数用于在文件系统中创建一个新的目录。它是文件系统操作的基础API之一,常用于应用程序创建文件夹以存储数据或组织文件。CreateDirectory 是一个宏,根据项目是否定义UNICODE宏,会映射到宽字符版本(CreateDirectoryW)或ANSI版本(CreateDirectoryA), 基本语法123456789BOOL CreateDirectoryW( [in] LPCWSTR lpPathName, //要创建的目录路径 [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes //安全属性(通常为NULL));BOOL CreateDirectoryA( [in] LPCSTR lpPathName, [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes); 返回值成功...
同步API与异步API
在API调用中,同步(Synchronous)和异步(Asynchronous)是描述操作执行方式的核心概念,决定了调用方(通常是应用程序)在发起操作后如何等待结果,直接影响程序的性能和响应性。 核心定义同步 API:调用后,发起操作的线程会阻塞(暂停执行),直到操作完全完成(成功或失败)才返回结果,继续执行后续代码。 通俗点讲就是:“只能等这一步操作做完,我才能往下”。异步 API:调用后,操作会在后台(由系统或其他线程)执行,函数立即返回,发起操作的线程可以继续执行其他任务;操作完成后,通过预设的机制(如事件、回调函数)通知调用方结果。 通俗点讲就是:“这一步操作你先做着,我去忙别的,做完了记得通知我”。 关键区别与特定维度 同步 API 异步 API线程行为 | 调用线程阻塞,直到操作完成 | 调用线程不阻塞,立即返回,可继续执行其他任务执行效率 | 单任务场景简单...
文件类API学习-ReadFile和WriteFile
ReadFile基本概念ReadFile是Windows API(Win32 API) 中的核心文件I/O函数,用于从已打开的文件、设备(如串口、管道、磁盘分区)或I/O对象中读取数据,是Windows系统下底层数据读取的基础接口。它支持 同步读取和异步读取两种模式,适用于几乎所有Windows可访问的I/O设备。ReadFile 的返回值为BOOL类型,仅表示 函数调用是否成功启动/完成,不直接代表 “是否读取到数据”:返回 TRUE: 同步模式:读取操作已完成(可能读取到0字节,如文件末尾); 异步模式:读取操作已成功提交(需后续通过WaitForSingleObject、GetOverlappedResult等确认完成)。返回FALSE: 操作失败,需通过GetLastError()函数获取具体错误码,常见错误包括: ERROR_HANDLE_EOF:已到达文件末尾(EOF),无更多数据可读; ERROR_ACCESS_DENIED:文件句柄无读权限; ERROR_IO_PENDING:异步操作尚未完成(...
文件类API学习-CreateFile
基本概念CreateFile是Windows系统编程中最核心的API函数之一,创建或打开文件或I/O设备。 最常用的I/O设备如下所示:文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot 和管道。 该函数返回一个句柄,该句柄可用于访问各种类型的I/O的文件或设备,具体取决于文件或设备以及指定的标志和属性。CreateFile 本身并非实际函数,而是一个条件编译宏,根据项目是否定义UNICODE宏,自动映射到两个实际实现: CreateFileW:宽字符(Unicode/UTF-16)版本,接受LPCWSTR类型路径,支持多语言(如中文)路径,是现代应用的推荐选择。 CreateFileA:ANSI 版本,接受单字节字符串(LPCSTR),仅支持英文字符及有限扩展字符,已逐渐被淘汰。 语法123456789HANDLE CreateFile( LPCWSTR lpFileName, // 文件名 DWORD dwDesiredAccess, // 请求...
BUUCTF-Web-[NPUCTF2020]ReadlezPHP
本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助 打开靶机,F12查看源码,发现./time.php?source,访问试试,发现源码, 12345678910111213141516171819202122232425<?php#error_reporting(0);class HelloPhp{ public $a; public $b; public function __construct(){ $this->a = "Y-m-d h:i:s"; $this->b = "date"; } public function __destruct(){ $a = $this->a; $b = $this->b; echo $b($a);//动态调用函数 }}$c = new HelloPhp;if(isset($_GET[...
BUUCTF-Web-[强网杯 2019]高明的黑客
本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助 打开靶机,发现已经把源码给我们了,直接通过URL下载,打开文件发现有很多php文件,不知道哪个是我们要找的,其他地方也没有提示,随便打开几个文件,发现有很多GET,POST传参,而且有些传参参与system,eval等命令函数,一个一个试太麻烦,我们需要编写代码帮我们筛选, 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import requestsimport osimport re# 配置目标URL和源码路径(直接在这里修改)url = 'http://36d3d08f-a863-4ceb-a6cf-a1a5cbffbf98.node5.buuoj.cn:81/' # 修改为你的目标URLpath = 'D:\下载\www\src' # 修改为你的源码路径ptn_get = re.compile(br"\$_...
BUUCTF-Web-[网鼎杯 2020 朱雀组]Nmap
本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助 打开靶机,看到一个扫描IP的执行框,查看源码可以得到flag文件位置,输入个IP试试,回显结果很像Nmap扫描结果,结和题目可以确定这道题考查Nmap扫描命令,然后他会把扫描结果放进一个文件里。尝试直接拼接命令, 1127.0.0.1 ;ls 多了个转义符号,测试一下单引号', 1127.0.0.1 'ls 根据上面的回显可以推测后端有escapeshellarg()和escapeshellcmd()对传入的参数的过滤,这道题的源码逻辑和[BUUCTF 2018]Online Tool很相似,都是这两个函数一起使用产生的漏洞点,构造语句写入一句话木马,payload: 1'<?php @eval($_POST["hack"]);?> -oG hack.php ' //末尾的空格不能忽略,不然文件名会变为hack.php' 会多个引号 有过滤,检测发现是php被过滤, 1'<?= @eval($_POST[&quo...
BUUCTF-Web-[安洵杯 2019]easy_serialize_php1
本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助 打开靶机,点击超链接可以看到源码,代码审计, 12345678910111213141516171819202122232425262728293031323334353637383940 <?php$function = @$_GET['f'];// 从URL参数获取f的值function filter($img){// 过滤掉黑名单中的字符串 $filter_arr = array('php','flag','php5','php4','fl1g'); $filter = '/'.implode('|',$filter_arr).'/i'; return preg_replace($filter,'',$img);}if($_SESSION){ u...
