首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《笨办法学Python》 第15课手记

这里的代码分为上下两部分,一部分以argv方式输入脚本名、文件名,另一部分使用raw_input直接输入文件名,作者意在让你比较两种方法的优劣,显然raw_input的方法更好,首先它简洁,只有一个参数...该模式下不能使用read*()方法 ‘a’:以追加模式打开。若文件存在,则会追加到文件的末尾;若文件不存在,则新建文件。该模式不能使用read*()方法。...:报错级别 strict: 字符编码出现问题时会报错 ignore: 字符编码出现问题时程序会忽略而过,继续执行下面的程序 4.4.closefd: True: 传入的file参数为文件的文件名...False: 传入的file参数只能是文件描述符 Ps: 文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符。...注意:使用open打开文件后一定要记得关闭文件对象,即使用close()。

60750

Docker PHP裸文件本地包含综述

没想到Code-Breaking一直难产到了2021年,直到十一期间我在研究Caddy相关的安全问题时,无意间看到一篇RCTF 2021的Writeup,才发现这个trick被用掉了(最早出现在2020...我们对任意一个PHP文件发送一个上传的数据包时,不管这个PHP服务后端是否有处理$_FILES的逻辑,PHP都会将用户上传的数据先保存到一个临时文件中,这个文件一般位于系统临时目录,文件名是php开头,...phpinfo页面中会输出这次请求的所有信息,包括$_FILES变量的值,其中包含完整文件名: 但第二个难点就是,即使我们能够在目标网站上找到一个phpinfo页面并读取到临时文件名,这个文件名也是这一次请求里的临时文件...;文件包含时我们借助Windows的通配符特性,在临时文件名未知的情况下成功包含,执行任意代码。...PHP现在仍然没有严格按照RFC来处理,即使我们传入的query-string包含等号,也仍会被赋值给$_SERVER['argv']。

44630
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复(1)—— 作者:LJS

    我们对任意一个PHP文件发送一个上传的数据包时,不管这个PHP服务后端是否有处理$_FILES的逻辑,PHP都会将用户上传的数据先保存到一个临时文件中,这个文件一般位于系统临时目录,文件名是php开头,...phpinfo页面中会输出这次请求的所有信息,包括$_FILES变量的值,其中包含完整文件名: 但第二个难点就是,即使我们能够在目标网站上找到一个phpinfo页面并读取到临时文件名,这个文件名也是这一次请求里的临时文件...;文件包含时我们借助Windows的通配符特性,在临时文件名未知的情况下成功包含,执行任意代码。...= -1 : fd是 open 函数的返回值,我们可以知道只有当 open 函数打开失败的时候才会返回 -1 ,也就是该临时文件不存在的情况下,换句话说就是只要临时文件被 open 函数成功打开,这个条件就是成立的...众所周知 ( 我应该是全世界最后一个知道的人了吧 ),如果打开一个进程打开了某个文件,某个文件就会出现在 /proc/PID/fd/ 目录下,但是如果这个文件在没有被关闭的情况下就被删除了呢?

    7910

    攻防世界web进阶区i-got-id-200超详解

    对正常的上传文件进行修改,可以达到读取任意文件的目的: 漏洞分析 这里大佬告诉我们要利用@ARGV这个全局变量 首先要了解Perl中的ARGV全局特殊文件句柄 ARGV:遍历数组变量@ARGV中所有文件名的特殊文件句柄...这里可以参考C语言的argv{}数组,但不同的是, Perl语言的@ARGV中的第一个变量就是参数,而不是文件名。 Param() 函数会返回一个列表,但只有第一个文件会被放到变量中。...参数,传给了$file变量,句柄中打开文件内容为空 那如果我们利用@ARGV,将$file替换为@ARGV,其句柄就是,就是命令行的参数呀,如果给的参数是文件名,就可以输出第一个文件名的所有内容...Linux中,/bin/bash 是bash解释器,这句话当作文件名时,首先会去寻找/bin/bash并且输出,那就是执行了解释器的功能 bash -c 的语法是,后面跟的第一个参数会当作命令来被bash...这里利用Perl open()函数打开的管道,进行劫持,通过“|“操作符,把内容引入open()函数已经打开的管道中,就可以输出到html标签中啦!

    1.7K10

    【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | bindexopt 源码分析 )

    是打开的 dex 文件大小 ; 在该函数中 , 调用 /bin/dexopt 程序 , 优化 dex 文件 , 最终产生 odex 文件 ; /* * 给定包含DEX数据的文件的描述符,生成 *...* * 优化器需要加载目标DEX文件中的每个类。 * 这通常是不可取的,因此我们启动一个子流程来执行 * 工作并等待它完成。 * * 成功时返回“true”。...如果提供的文件名出现在引导类中 *路径,路径将在该条目之前被截断(因此,如果 *如果您选择dexopt“core.jar”,您的引导类路径将为空)。...如果提供的文件名出现在引导类中 *路径,路径将在该条目之前被截断(因此,如果 *如果您选择dexopt“core.jar”,您的引导类路径将为空)。...*父项已锁定描述符,我们将尝试再次将其锁定 *处理引导类路径的一部分。(我们可以抓住这个然后回来 *比较文件名或打开bootclasspath文件时出错 *并统计它们的索引节点编号)。

    59610

    HTML页面生成器:使用JavaScript和Node创建CLI

    打开一个终端,然后在此文件夹中运行: npm init 该命令会有几个问题要问你,顺便说一下,这正是我们最终希望在空白HTML页面生成器中包含的内容。...,即使你没有给出任何文件名。...如果此索引为 -1 或参数数组中该选项之后没有任何值,我们分别为文件名或标题提供默认值。其余代码未更改。 你可以运行新的CLI,如果没有选择,它将创建标题为“Title”的index.html文件。...同样,在实际的CLI中,你会希望多检查一些输入,首先要确保用户输入的值是有效的,但也要在缺失值或选项出现两次的情况下警告他们。...当你初始化你的npm项目时,你可以通过很多东西作为选项。CLI会直接问您一些问题,因此您无需阅读文档即可了解如何提供项目名称,版本等信息。

    2.7K20

    Linux进程间通信【命名管道】

    结合文件系统,给匿名管道这个纯纯的内存文件分配 inode,将文件名与之构建联系,关键点在于不给它分配 Data block,因为它是一个纯纯的内存文件,是不需要将数据刷盘到磁盘中的 可以将命名管道理解为...1.2、命名管道的工作原理 把视角拉回文件系统:当重复多次打开同一个文件时,并不会费力的打开多次,而且在第一次打开的基础上,对 struct file 结构体中的引用计数 ++,所以对于同一个文件,不同进程打开了...同理,命名管道文件也是如此,先创建出文件,在文件系统中挂个名,然后让独立的进程以不同的方式打开同一个命名管道文件,比如进程 A 以只读的方式打开,进程 B 以只写的方式打开,那么此时进程 B 就可以向进程...函数创建使用;而命名管道需要先通过 mkfifo 函数创建,然后再通过 open 打开使用 出现多条匿名管道时,可能会出现写端 fd 重复继承的情况;而命名管道不会出现这种情况 在其他方面,匿名管道与命名管道几乎一致...【读端或写端】;所以正确做法是先让子进程打开,即使子进程【阻塞】了,父进程也还能运行。

    40120

    将一个文件内容复制到另一个文件(C语言和C++代码)

    fileCopy.c //作用:将一个文件复制到另外一个文件 // 我的程序代码名:fileCopy.c //使用方法:在文件中找以exe结尾的文件(需要代码已经写完并自己生成exe文件)(以我的为例:...fileCopy.exe),并打开,然后输入:fileCopy sourcefile destfile(sourcefile:被复制的文件名 destfile:复制了sourcefile的内容的文件)...#include #include int main(int argc, char* argv[]) { /*argc 与 argv [] 在程序中,...= 3)//确保参数个数的正确性 { fprintf(stderr, "请按正确格式输入:fileCooy.exe 源文件名 目标文件名\n");//一共三个参数:fileCooy.exe 源文件名..."/*文件名*/, ios::in | ios::out);//|:表示两种打开方式都可,这里是读取和写入的打开方式 /*ios::in:以输入模式打开文件,只能进行读操作。

    19810

    11.1 文件拷贝移动与删除

    11.1 ReadFile ReadFile是一个文件读取函数,该函数可以将一个文件读入到特定的缓冲区内,在读取之前读者需要自行调用CreateFileA函数打开一个文件,首先来看一下打开文件的函数原型...参数说明: lpFileName:要打开的文件名或设备名,该参数可以是完整路径名、相对路径名或文件名和相对路径名的组合。...fileSize, // 要读取的字节数 &readSize, // 实际读取的字节数 NULL // 用 FILE_FLAG_OVERLAPPED 打开时所需的...如果要在同一目录中重命名文件,可以将文件的新名称作为 lpNewFileName 参数提供,而 lpExistingFileName 参数应保持不变。...lpFileName ); 其中,lpFileName 参数是一个指向以 NULL 结尾的字符串,表示要删除的文件名,可以是绝对路径或相对路径,函数执行成功时返回 TRUE,否则返回 FALSE,如果删除失败则可以调用

    23320

    python学习笔记9.1-系统交互接口

    2.0 系统参数 可能有很多人不理解系统参数是什么意思,用c语言主函数很好表达: int main(int argc, char *argv[]) * argc: 参数的个数,不给main()函数传递参数时默认值为...1,即至少有一个参数为该可执行文件的文件名(含目录)。...* argv: 为指针数组,分别指向各个字符串参数的首地址,其中argv[0]存储的是可执行文件的文件名的首地址。 也就是说程序运行的时候肯定会有传入参数的,一般而言,第一个参数是当前工作目录。...(sys.argv[2]) 打开控制台(win为cmd),定向到a.py所在的目录(我的是E:\home):cd /d E:\home 再输入:python a.py aaa bbb(用python...打开.py文件,并传入参数 aaa bbb) * 重点: 传入参数的格式都是字符串*

    89890

    main函数与命令行参数

    这些值被称为命令行参数,特别是想从外部控制程序,不是通过在代码内对这些值进行硬编码时,而是通过参数来控制代码部分逻辑。...int main(int argc,char *argv[]) argc:命令行参数个数(不给main()函数传递参数时默认值为1,即至少有一个参数为该可执行文件的文件名(含目录)) argv:命令行参数数组...(分别指向各个字符串参数的首地址,其中argv[0]存储的是可执行文件的文件名的首地址。)...如何修改main函数的命令行参数 第一种是,创建一个快捷方式然后,在目标后面加入要加的参数 用空格隔开 第二种是用命令行 打开cmd然后输入软件路径名 +参数 遍历main参数 #include...i = 0; i < argc; i++) { printf("%s\n", argv[i]); } system("pause"); } 运行截图:

    39210

    【读懂Linux】基础IO

    而, open close read write lseek 都属于系统提供的接口,称之为系统调用接口 回忆一下我们讲操作系统概念时,画的一张图 系统调用接口和库函数的关系,一目了然。...当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file 结构体。表示一个已经打开的文件对象。而进程执行 open 系统调用,所以必须让进程和文件关联起来。...每个进程都有一个指针*files, 指向一张表 files_struct, 该表最重要的部分就是包涵一个指针数组,每个元素都是一个指向打开文件的指针!所以,本质上,文件描述符就是该数组的下标。...有,足以说明,该缓冲区是二次加上的,又因为是C,所以由 C 标准库提供。...一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码 在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接

    9010

    【笨办法学Python】习题15读取文件

    我们要做的是把该文件用我们的脚本“打开(open)”,然后打印出来。然而把文件名ex15_sample.txt 写死(hardcode)在代码中不是一个好意,这些信息应该是用户输入的才对。...如果我们碰到其他文件要处理,写死的文件名就会给你带来麻烦了。我们的解决方案是使用 argv 和raw_input 来从用户获取信息,从而知道哪些文件该被处理。...,我们来快速地过一遍: 代码的 1-3 行使用 argv 来获取文件名,这个你应该已经熟悉了。...我把文件名写进去写成 script, ex15_sample.txt = argv 不过这样不灵。 这么做是错的。把代码写成和我一模一样,然后从命令行运行,照着我的方式。...你不需要把文件名 放到代码中,而是让 Python 把文件名当做参数接纳进去。 为什么打开了两次文件没有报错?

    72330

    从零实现操作系统-Lab 1: Unix utilities

    从父级收到一个字节后,子级通过写入child_fd[1]以自己的字节进行响应,然后父级读取该字节。代码在文件user/pingpong.c 中实现。 提示: 使用pipe创建管道。...下面看下,xv6 book中对管道的定义。 管道是一个小的内核缓冲区,它以文件描述符对的形式提供给进程,一个用于写操作,一个用于读操作。从管道的一端写的数据可以从管道的另一端读取。...在 fork 之后,父进程和子进程都有了指向管道的文件描述符。子进程将管道的读端口拷贝在描述符0上,关闭 p 中的描述符,然后执行 wc。当 wc 从标准输入读取时,它实际上是从管道读取的。...nlink/文件大小/存放fs的disk dev if((fd = open(path, 0)) 打开文件,第二个参数指示的是打开方式,0代表的是O_RDONLY只读的形式。...exit(0); } 4.4 测试 测试结果 5. xargs 5.1 实验要求 编写一个简单版本的 UNIX xargs 程序:从标准输入中读取行并为每一行运行一个命令,将该行作为命令的参数提供

    1.1K20

    Python中的命令行参数

    python可以使用 sys 模块中的 sys.argv 命令来获取命令行参数,其中返回的参数是一个列表在实际开发中,我们一般都使用命令行来执行 python 脚本使用终端执行python文件的命令:python...指定文件名import sys​# 使用 sys.argv 来获取命令行参数# 在终端使用 python 指定python文件名 来执行python文件print('命令行参数的个数%s' % len...import sys​# 使用切片的方式去除文件名print('命令行参数%s' % sys.argv[1:])# 命令行参数['1', '2', '3', '4', '5']​# 终端执行的命令为:python...index.py 1 2 3 4 5# 在终端一次输入多个参数的时候,中间不需要使用逗号隔开sys.argv 只提供了比较简单的命令行参数获取方式,并没有提供命令行提示。...该程序定义了他需要的参数,argparse并将找出如何解析这些参数 sys.argv。该argparse模块还会自动生成帮助和用法消息,并在用户给出的程序无效参数时发生异常。

    1.6K20

    CVE-2023-38831:WinRAR远程代码执行漏洞

    该产品支持RAR、ZIP等格式文件的压缩和解压等。...WinRAR 在处理压缩包内同名的文件与文件夹时代码执行漏洞,攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受害者打开此文件后,将在受害者机器上执行任意代码。...WinRAR 6.2.3之前版本打开压缩文件时会调ShellExecute 函数匹配文件名,如果目标文件名与文件类型不匹配时则会执行目标文件中的批处理文件。...攻击者可利用该漏洞构造恶意的压缩文件,其中包含具有恶意 payload 的文件和同名的文件夹,通过诱导用户打开压缩文件中的带有 payload 的恶意文件远程执行任意代码。...script.bat内容如下 calc.exe test.pdf内容随意,放入同一个文件夹中 用以上脚本将script.bat和test.pdf打包成一个带漏洞的RAR:poc.rar 执行python

    75560

    awk 手册

    主程序文件名 -f awk函数文件名 数据文件文件名 (有关 awk 中函数的声明与使用于 7.4 中说明) awk中也提供与 C 语言中类似用法的 printf() 函数..../see_arg first-arg second-arg 结果屏幕出现 : awk first-arg second-arg [ 说明 : ] ARGC, ARGV[ ] 为awk所提供的内建变量....但使用者可强行改变 ARGC; 当 ARGC 之值被使用者设为 1 时; awk将被蒙骗,误以为命令行上并无数据文件文件名, 故不会以 ARGV[1], ARGV[2],..为文件名来打开文件读取数据;...字串函数 l index( 原字串, 找寻的子字串 ): 若原字串中含有欲找寻的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0....(注意: 并非任意长度的字串)Regexp 中 "*" 另有其它涵意, 并不代表任意长度的字串. ^ 表示该字串必须出现于行首. $ 表示该字串必须出现于行末.

    2.1K30

    Linux模拟实现【简易版bash】

    vector,正好和我们的 argv 表对应 p 为 path,可以根据 argv[0](指令),在 PATH 中寻找该程序并替换 当然也可以使用 execve 系统级替换函数 //子进程进行程序替换...auto"; //添加此字段 argv[pos] = NULL; //结新尾 } 注意: 因为 argv 表中的元素类型为 char*,所以在尾插语句时,需要进行类型转换 尾插语句后,需要再次添加结尾...argv[1] 中的内容是不断变化的,不能直接使用 一般用户自定义的环境变量,在 bash 中需要用户自己维护 最好的方案就是使用缓冲区进行环境变量的拷贝放置,因为缓冲区中的内容不易变 错误体现:直接使用...>、>>、< 这三个字符,如果有,就具体问题具体分析,完成重定向 具体实现步骤: 判断字符串中是否含有目标字符,如果有,就置当前位置为 '\0‘,其后半部分不参与指令分割 后半部分就是文件名,在打开文件时需要使用...根据不同的字符,设置不同的标记位,用于判断打开文件的方式(只写、追加、只读) 判断是否需要进行重定向,如果需要,在子进程创建后,打开目标文件,并调用 dup2 函数进行标准流的替换 关于系统级文件打开函数

    28520
    领券