文章目录
前言
记录uploads-lab靶场的学习
仅供个人学习,如有冒犯请尽快联系
upload-labs
0x01 pass1
先传一张图片,没什么问题,再尝试传一个不是图片的文件
出现了报错,用弹窗进行错误提示的话证明是运用了前端验证
我们先改一下一句话木马的后缀
接着上传,并用burpsuite抓包
去掉.png跳过前端验证,点击send发送包,即上传文件,这时候查看图片地址,即上传的文件的地址
用蚁剑连接,去掉末尾的.png,密码为一句话木马传入的参数
连接成功,也代表我们的文件传入成功
0x02 pass2
查看提示看到是在服务端对数据的MIME进行检查,MIME是对文件类型进行验证,所以我们用burp抓包然后修改文件的类型。
上传一个1.php文件,用burp抓包。
Content-Type是文件类型,我们修改后面的octet-stream即可查看源码,发现可以修改为image/jpeg、image/png、image/gif这三种,任意修改一个即可上传
0x03 pass3
这题需要用自己搭的环境,不能用phpstudy搭
或者在httpd.conf文件下添加代码
AddType application/x-httpd-php .php .phtml .php3 .php4
查看源码,发现不能上传这几种类型的文件
但是黑名单规则不严谨,在某些特定环境中某些特殊后缀仍会被当作php文件解析 php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml。
我这边试了nss和buu还有phpstudy自己搭的,要么就是403,要么就是不解析php语句
这个方法试过了
这个也试过了,传是能传上去的,但是解析不出来
0x04 pass4
本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.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
.htaccess 是一个用于 Apache Web 服务器的配置文件,它是一种特殊的文本文件,使用 “.htaccess” 作为文件名的后缀。该文件通常用于在特定目录下改变 Apache 服务器的行为以及对网站进行配置。
.htaccess 文件的作用是允许网站管理员在特定目录中覆盖默认的服务器设置,以灵活地控制网站的行为和功能。它可以包含一系列指令,用于自定义访问权限、重定向URL、启用或禁用模块、修改请求处理规则等。
常见的用途和功能:
URL 重写:通过 RewriteRule 指令可以修改 URL 地址的结构,使得对外暴露的 URL 更加友好和易读,同时也方便实现重定向和 URL 路由功能。
访问控制:通过使用指令如 Require 和 Allow/Deny,可以限制特定用户或 IP 地址的访问权限,保护敏感目录或文件。
自定义错误页面:通过 ErrorDocument 指令,可以针对不同的 HTTP 错误代码自定义相应的错误页面。
缓存控制:通过使用指令如 ExpiresByType,可以设置不同类型文件的缓存过期时间,以提升网站性能和加快页面加载速度。
MIME 类型配置:通过 AddType 或 AddHandler 指令,可以自定义文件扩展名与 MIME 类型之间的映射关系。
重写规则:使用 RewriteRule 和 RewriteCond 指令,可以实现灵活的 URL 重写和重定向规则,对请求进行修改或转发。
这边我们先上传一个.htaccess文件
内容
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
意思是如果文件里面有一个后缀为.jpg的文件,就会被解析成.php。
先上传 .htaccess文件,然后上传phpinfo.jpg文件。
好好好,又不解析
查过后发现php的nts版本下无法解析
0x05 pass5
.user.ini黑名单
先上传.user.ini文件 再上传含有后门代码的a.jpg文件 根据提示:上传目录存在php文件(readme.php)
所以readme.php会自动包含a.jpg里面的代码 用蚁剑连接即可
.user.ini
auto_prepend_file=1.jpg
.user.ini文件里的意思是:所有的php文件都自动包含a.jpg文件。.user.ini相当于一个用户自定义的php.ini
木马内容(修改为.jpg)
还是出问题,解析不了
0x06 pass6
没改小写,通过修改大小写绕过
,Php
0x07 pass7
查看本关源码,对比第四关,发现没有收尾去空。
windows会自动删去空格
所以我们直接抓包在burpsuite里修改文件名
0x08 pass8
阅读代码发现缺少了deldot函数 删除文件名最后一个点(如果有多个连续的… 会全部删除)
和第七关一样,windows文件后缀名同时不能加’.',一样使用burp抓包然后后缀加一个点。
0x09 pass9
这一关黑名单,没有对:: $ DATA进 行 处 理 使用::$DATA 进行处理,可以使用:: $DATA绕过黑名单
0x10 pass10
看代码,发现代码先是去除文件名前后的空格,再去除文件名末尾的.,再通过strrchar函数来寻找 . 来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,发现没有循环验证,也就是说转换大小写去除空格什么的它只验证一次
点+空格+点+空格
绕过
所以也是在burp suite里直接改
0x11 pass11
阅读代码
发现依旧是用上传的文件名来拼接路径并保存文件 没有对文件重命名
只是用了str_ireplace()函数来检测(此函数无视大小写) 如果文件名含有黑名单里面的字符串 就替换为空
但是只替换一次 并没有进行正则匹配或者是循环匹配敏感字符 因此只要双写php即可 因为是从左往右读的 所以替换为空后 还是php
pphphp、phphpp都可以尝试
0x12 pass12
查看源码,发现用$_GET[‘save_path’]来组成上传的文件路径 而这个get传参是我们可以控制的地方
因此我们考虑用是否能进行截断 例如形成…/upload/12.php/截断后面的(xxx.jpg)
这样就通过了白名单校验 并且保存成了php文件
%00截断
利用0x00是字符串的结束标识符,进行截断处理,并且%00的使用是在路径上
截断的限制条件是PHP<5.3.29
0x13 pass13
同第12关做法相同 只不过上传路径在$_POST数据中 不需要url编码
操作
别忘了给%00 urldecode
0x14 pass14
图片马
用Notepad++修改图片添加一句话木马
用winhex打开,确定已经写好了图片马
上传
传了,但不解析
接下来用文件包含检验
检验上传成功
0x15 pass15
查看源码,关键函数是这个getimagesize
getimagesize函数会对目标的十六进制的前几个字符串进行读取。比如GIF的文件头问GIF89a,png的文件头为塒NG。所以这关和pass14一样,我们只需要用notepad打开图片马,在前面加上塒NG并保存
还是一样,传了不解
文件包含检验成功
0x16 pass16
和pass15没什么区别,需要打开php_exif模块
0x17 pass17
二次渲染
imagecreatefromjpeg()函数,二次渲染是由Gif文件或 URL 创建一个新图象。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。
绕过方法:上传一个 GIF 图片马 ,然后将其下载下来 ,查看其十六进制的文件内容, 找到二次渲染后不变的地方 ,而这个地方就是可以插入一句话的地方
简单点就是找别人写好的绕过二次渲染的图片马
文件包含检验成功