upload-labs过关记录

第一关

正常上传 .php 无意外拦截

查看网页源码确定前段拦截修改前端代码再次尝试


上传成功

第二关

上传webshell显示类型不正确,修改前端代码
失败,察看源码,后端进行文件头检测,

尝试抓包该包

成功

第三关

尝试改包,失败
查看源码,发现是对文件后缀名进行检测
尝试后缀大小写,加 . 使用 ::DATA.jpg 等都失败

对上传得文件进行重命名
使php识别自定义文件后缀名
尝试其它的文件后缀 php3 等可以上传成功,但是需要在appache配置文件中添加
AddType application/x-httpd-php .php .phtml .phps .php5 .pht
才可以识别

Php识别自定义后缀,不需要再配置文件中添加自定义的后缀,所有的后缀后会尝试php解析
使用 .htaccess 实现重写文件解析 也可以成功
需要在配置文件中添加
AllowOverride All

LoadModule rewrite_module modules/mod_rewrite.so 去掉#

第四关

第一种,上传 .htaccess 通过抓包该包的方式完成
在 .htaccess 文件内写入
SetHandler application/x-httpd-php      所有文件解析
或
AddType application/x-httpd-php  .abc    只有abc后缀
或
ADDFILETYPE
<FilesMatch “abc”>            “abc”处可以换成正则表达式
SetHandler application/x-httpd-php
</FilesMatch>
上传是1.jpg 的php代码,访问上传后的图片地址


关于 .htaccess 使用时httpd的配置
启用 .htaccess 需要修改 httpd.conf 启动AllowOverride,并可以用AllowOverride限制特定命令的使用。如需使用 .htaccess 以外的其它文件名,可以使用AccessFileName指令来改变。

第五关

观察源码

::DATA.jpg 不能用, .htaccess不能用
但是没有过滤大小写。可以使用大小写的方式上传

尝试 1.php%00.jpg 结果上传为 1.jpg 格式文件
尝试 1.php::DATA.jpg 
尝试 1.php:DATA.jpg
尝试 1.php:.jpg 
尝试 1.php.  1.php空格 
尝试 1.pphphp (如果程序中将php等黑名单后缀替换为空可以尝试) 都不行 

第六关

尝试:
    1.php%00.jpg        1.php::DATA.jpg   1.php:DATA.jpg   1.php:.jpg  1.php.      1.php空格  都不可以
尝试
    ".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"
    尝试黑名单外的 1.php6 或者 1.php多数空格字母,可以上传成功
    修改apache.conf配置文件 在 apache.conf 中添加
    AddType application/x-http-php  .bop .php6 .php5
重启apache
连接效果

第七关

多次尝试后,使用抓包该包的方式在 1.php. 的形式可以绕过

查看源码

可知: ::DATA.jpg 大小写结合 加空格的方式都不行,加点却可以
因为没有

第八关

多次尝试发现 ::$DATA 没有限制
使用抓包该包方式绕过

访问上传的图片,删除 ::$data

效果

尝试其它的 方式 :$data
这种方式会上传一个空的 .php 文件需要其它方式向该文件写入信息

第九关

查看源码

末尾加点 大小写 ::$DATA 首位空格 等方式都不可以
尝试截断方式

效果

其它方式的截断

第十关

查看源码确定是对黑名单中的后缀替换为空
双写后缀即可绕过

第十一关

审查源码

确定路径可以自定义,文件后缀在白名单中方可通行。
所以使用 %00 截断的方式上传文件
路径指定 /1.php%00
上传文件后缀 在白名单中即可

如果上传失败,需要修改php.ini 中的参数
另外注意,PHP版本不能高于5.3.4以上
magic_quotes_gpc=Off
在次上传即可
http://192.168.1.107/upload-labs/upload/1.php%EF%BF%BD/8120190915194337.jpg  从%00处删除即可

第十二关

POST方式截断上传,参照11关的方式,POST需要对截断符进行手动调整
截断符原理是 在于chr(0)这个字符,当程序遇到chr(0)变量时,后面的数据会自动截断(结束符),产生漏洞

第十三关

上传图片码,进行文件包含
010editor等十六进制工具修改图片,将木马写入文件即可

上传后文件包含

第十四关

上传正常图片,和原图片进行比较,将没有改变的部分写上一句话木马

上传图片进行文件包含

第十五关

需要开启php_exif 模块
开启方式:

  本节主要介绍了如何开启PHP exif扩展方法,主要在于对php.ini文件的修改
  服务器配置说明:
  1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号
  2.在php.ini文件中找到;extension=php_mbstring.dll,去掉前面的分号,并将此行移动到extension=php_exif.dll之前,使之首先加载*。
  3.找到[exif]段,把下面语句的分号去掉。
  ;exif.encode_unicode = ISO-8859-15
  ;exif.decode_unicode_motorola = UCS-2BE
  ;exif.decode_unicode_intel = UCS-2LE
  ;exif.encode_jis =
  ;exif.decode_jis_motorola = JIS
  ;exif.decode_jis_intel = JIS

修改图片,保留图片头

上传即可

第十六关

查看源码发现,对上传得图片进行了二次渲染,生成了新的图片,则先上传图片,并下载和原图片进行16进制比较。对没有改变的部分写入木马,同时注意图片中存在的 <? <% 将其去除

第十七关

审计源码可以确定是文件竞争问题

使用burpsuit抓包一直发包的方式,在浏览器不断刷新上传得 1.php 文件即可
Burpsuite的一些设置

抓包后发送到Intruder模块
清除自动生成的变量

不需要Payloads

请求头设置多线程提高成功概率

开始 Start attack

浏览器不断刷新,终于连接成功

第十八关

审计源码
在 class MyUpload类中 设定了白名单,上传得步骤;只是上传步骤中存在逻辑漏洞。
所有的上传判断都是if判断,虽然代码是从长向下执行,但如果多线程同时执行会出现竞争判断现象。
漏洞利用方式和17类似。只在移动和重名出使用强占,则创建符合之前判断所有要求,在程序清除临时文件前访问木马。

根据该类中的var $cls_arr_ext_accepted 白名单确定上传得木马类型

为图片码,使用文件包含的方式进行访问。

第十九关

..

.空格

大小写

::$DATA

都可绕过

第二十关

审计源码
确定为逻辑漏洞

使用BurpSuite抓包该包 POST传递文件名数组,第一个为php、第二个为空(作为截断符)、第三个为白名单中的后缀即可

效果图


   转载规则


《upload-labs过关记录》 Evolyutsiya 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录