Web安全攻防世界09 ics-07(XCTF)

问题描述 

友情提示:攻防世界最近的答题环境不太稳定,我这篇没有做到最后一步...为了水个成就提前发出来了,以后等网好了会测试到最后一步的...

本次ics-07的解题过程依然小白友好~

题目是这个样子的: 

是工控的云管理系统,页面看起来好酷炫~我们先点击左边的目录,看看有没有什么可疑的上传或者注入点~

Web安全攻防世界09 ics-07(XCTF)_第1张图片

唯一可以利用的链接是业务管理下的项目管理,目测是sql注入~根据页面view source的提示,crtl+u打开源码~

Web安全攻防世界09 ics-07(XCTF)_第2张图片

emm...发现47行view-source,“view source”其实是个链接...

Web安全攻防世界09 ics-07(XCTF)_第3张图片


原因分析:

按照惯例,拿起小字典逐行查一下源码的意思,贴在下面~

visual studio code:Visual Studio Code - Code Editing. Redefined,补充一个PHP Intelephense的扩展,在选中函数时就可以直接跳转到php手册,对小白很友好~



  
    
    cetc7
  
  
    

    
page : id :

view-source something wae wrong !
"); //如果查询结果为false,输出:something wae wrong ! if($result){ //如果查询结果为ture,输出id与name echo "id: ".$result->id."
"; echo "name:".$result->user."
"; $_SESSION['admin'] = True; //需要满足id查询的名称为admin } ?>

解题思路如下:

整个题目有三个php文件:08-22行、32-47行、49-67行,执行的主要功能分为如下~

1 第49-67行sql查询

   第33行 if ($_SESSION['admin']) 如果要走注入路线的话,项目id需要是admin(通常来说,adimin的id值都是1)~

   第49-67行是查询的条件,总结起来id需要满足以下3个条件:(1)转义后的值是1;(2)是个浮点数据,且输入的数据值不能为1;(3)浮点数据末尾为9~

2 第08~22行域名请求

   默认访问页面为index.php,如果能够找到其他页面,就会解析flag.php~

   从上下文来看,至少还有一些页面可以访问:flag.php(第17行),index.phps(第30行);不过直接访问flag.php好像是不行的,页面如下,是一片空白...被waf吃掉了...

   至于index.phps,根据第30行,仿佛就是访问这个源码的链接(如果外部直接访问就是403...)

   呃,看样子思路就是找个马甲骗过waf,访问flag.php~

3 第32-47行文件上传

   根据代码提示,应该是admin查询成功后会有注入点,上传con与file的值,file的主要作用是绕过匹配,con的主要作用是写入可执行的语句,读取flag.php中的内容~


解决方案:

工具:hackbar(chrome插件)、蚁剑

参考大佬WP1:攻防世界web进阶区ics-07详解 - 腾讯云开发者社区-腾讯云 (tencent.com)

参考大佬WP2:攻防世界 ics-07 题_H9_dawn的博客-CSDN博客

为了获取上传的权限,首先需要确定admin的值,传入的值是浮点数值不为1且末尾为9的字符串,可以利用php弱类型,输入数字+字符,字符直接会被截断,只保留数字被传入~

详见php手册的示例:PHP: floatval - Manual

Web安全攻防世界09 ics-07(XCTF)_第4张图片

这里id可以传入1a9~

Web安全攻防世界09 ics-07(XCTF)_第5张图片

成功回显,那么我们就可以利用这个页面上传语句~

$file的作用为绕过匹配,注意末尾不能是php,那就是需要后缀绕过~这里找一个php解释器可以理解,但不是php的格式文件~

php的解释器可以解析:php、php3、php4、php5、php7、phtml、pht、phs、shtml、pwml~不过本题除了后两个,前面全部被waf拉黑了~

Web安全攻防世界09 ics-07(XCTF)_第6张图片

↑截图出自博文:php 后缀名绕过&原理_weixin_39822184的博客-CSDN博客

也有大佬根据apache2.x的解析漏洞,补充了不可识别的文件格式~例如1.php.1~(有大佬以截断形式输入,1.php/.,上传后显示为1.php,但是打开链接后发现没有一句话木马内容~)

Web安全攻防世界09 ics-07(XCTF)_第7张图片  ↑截图出自博文:文件类型解析漏洞防御与攻击(PHP) - APT-101 - 博客园 (cnblogs.com)

综上,file的格式可能是如下两种~

$file=1.php.1 //apache2.x解析漏洞,输入/.是不会解析的

$file=1.pwml //php解释器绕过

$con的作用是执行语句,因为告知了上传文件的地址/uploaded/backup/文件名(第36行 $filename = "backup/".$file; 第41行 chdir('uploaded');),而非flag.php的地址,所以一句话木马比文件包含在本题更合适一些~

$con=

payload如下所示,需要在hackbar上以post方式传输~(burpsuite我这边是不行的,传不上去...据大佬博文可能是因为会话session的问题~)

con=&file=1.php.1

Web安全攻防世界09 ics-07(XCTF)_第8张图片

上传成功以后,页面并不会有任何回显,需要输入$con的上传网址查看自己的文件~

http://61.147.171.105:61710/uploaded/backup/

Web安全攻防世界09 ics-07(XCTF)_第9张图片

按理说此时就该拔蚁剑起长歌,但是这里不一定能成功,我测试了一下:

1.php是蚁剑可以识别的格式,是以1.php/.的形式上传的,但是链接内并没有一句话木马~

1.php.1、1.php.x、1.pwml、1.shtml这种上传成功,链接内有一句话木马,但是蚁剑好像对这些奇奇怪怪的格式有点陌生...

然后我用变体的一句话木马测试了一下,发现他把木马过滤了,只保留了无害的部分...

con=&file=3.php/.

Web安全攻防世界09 ics-07(XCTF)_第10张图片

此时我的防火墙也总是在报错...我就有点郁闷...

————此处之后的步骤就是没有完成待修改的————

大佬们的答案,文件名需要改为1.php/..

/..可以实现以下两个功能~

1)可以实现截断功能,绕过防火墙后保证上传以后的文件名1.php是可以连接的

2)而且又可以保证把文件传到父目录,以免传输到指定路径后内容被吃掉~

但是我已经连着一个月没能成功连接这个靶场,所以...最后的曙光,我可能还需要再等待一下~

{{{(>_<)}}}有没有人愿意告诉我攻防世界到底出什么事情啦,唉~~~

Web安全攻防世界09 ics-07(XCTF)_第11张图片


时隔一个月我又回来补充答案了,poc如下~

con=&file=1.php/..

Web安全攻防世界09 ics-07(XCTF)_第12张图片

查看文件的地址 http://61.147.171.105:64484/uploaded/backup/

Web安全攻防世界09 ics-07(XCTF)_第13张图片

此文件夹中没有,也许靠../解析顺利上传到父文件夹了~

此时查看地址 http://61.147.171.105:64484/uploaded/

Web安全攻防世界09 ics-07(XCTF)_第14张图片

明显是不让偷看,那就直接连接一下试试~

Web安全攻防世界09 ics-07(XCTF)_第15张图片

报错红框,没有传上去~

还有一种解法是这样的,在文件前增加/..上传到父目录,在文件后增加/.~

con=&file=/1.php/1.php/..

不过经过测试,可以上传,可以访问,但是报错黄框,也就是不能连接,访问页面是空的~ 

哎所以试了一圈没有一个能连上的是不是...恰好书店要闭馆了,所以先写到这里;应该是针对所有.php的上传都被过滤内容了,所以这个文件格式到底有没有其他的编码绕过方法...

你可能感兴趣的:(#,攻防世界,php,web安全)