掌控安全Web安全微专业笔记 (21)

(这里利用到了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。)

echo abcd>>a.txt:b.txt 讲abcd写入a.txt:b.txt 很明显生成一个a.txt

然后再试试a.txt::$DATA ::$DATA就是默认不修改文件流的情况
所以生成一个正常的a.txt
利用windows特性,可在后缀名中加” ::$DATA”绕过

上传1.php文件,用burp修改数据包1.php后面加上::$DATA,访问1.php即可

image-20201027004040109

Pass-09:构造文件后缀绕过

由于没有循环去除点、空,可以构造多个点空绕过

$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini"); $file_name = trim($_FILES[\'upload_file\'][\'name\']); $file_name = deldot($file_name);//删除文件名末尾的点 $file_ext = strrchr($file_name, \'.\'); $file_ext = strtolower($file_ext); //转换为小写 $file_ext = trim($file_ext); //首尾去空

将文件命名成\'1.php. .\' 点空点就可以上传,先去点,再去空,后还剩点

Pass-10:双写绕过
仔细看源码发现$file_name = str_ireplace($deny_ext,"", $file_name);,这里的意思就是讲检测到的危险字符替换为空,php被替换为空是空,那么pphphp被替换为空就会变为php,不就达到了绕过

将文件命名成"1.pphphp" 就可以上传

7-2 文件上传解析漏洞(二) 一、%00截断和00截断

了解%00实际上我们要先了解0x00,0x00实际上是一个十六进制表示方式,实际上就是表示ascii码值为0,有些函数在处理这个字符的时候会把这个字符当做结束符,他们就读取到这里认为这一段结束了

这有什么用呢?

在文件上传时,如果遇到了白名单机制只允许上传jpg后缀的,在没有解析漏洞的情况下我们该怎么办?
JPG格式并不会被解析,那么我们需要绕过上传过滤。

假如我写了1.php%00.jpg 传参之后,有些过滤都是直接匹配字符串,他强行匹配到了结尾是.jpg,然后允许上传,但是php的函数去执行的时候他读取到0x00认为结束了,那么这个文件就变成了1.php

%00实际上和00截断是一模一样的原理,只不过%00是经过URL编码的,%00解码后就是0x00截断的那个字符

:8018/

二、条件竞争

首先了解一个定义——竞争条件是什么?

竞争条件”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。

开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。

线程同步机制确保两个及以上的并发进程或线程不同时执行某些特定的程序段,也被称之为临界区(critical section),如果没有应用好同步技术则会发生“竞争条件”问题。
在我理解就是两只哈士奇(线程)同时去抢一个丢出去的飞盘(资源),不知道到底哪只能抢到,此处便形成了竞争。

那我们上传是和谁去竞争?
一般而言我们是上传了文件,上传了但是最后却因为过滤或者因为其他原因被删除了,那么我们可以使用条件竞争,我们实际上是和unlink,是和删除文件的函数进行竞争。

假如我不断的上传发包,然后我同时也不断的访问那个我们上传上去的文件的地址,我们就开始和服务器的函数比手速了,函数执行都是要时间的,如果我这边上传上去,且没有删除,那个时间可能很短,然后被我访问到了,岂不是就可以执行PHP了我就比服务器手速快了
你可以上传一个php然后访问后,由这个php去写一个马
<?php $a = \'<?php @eval($_REQUEST[\\'a\\'])?>\';file_put_contents(\'1.php\',$a)?>

三、靶场大闯关

Pass-11 (%00截断):
上传一个door.asd 来判断是黑名单还是白名单

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpdzz.html