做题(1)

1.fileinclude

打开 发现提示flag在flag.php里边

查看页面源代码

复制代码
$lan = $_COOKIE['language'];

这句话是关键 变量lan是用cookie传参的

复制代码
@include("english.php");

这句话表明了文件包含 include函数用php伪协议 filer绕过

复制代码
@include($lan.".php");

这句话表明了变量lan是和后边的php拼接的 所以传参的时候就不用在加.php了

分析完代码 用bp抓包换cooike的值

Cookie: language=php://filter/read=convert.base64-encode/resource=/var/www/html/flag

base64解密得到答案 cyberpeace{5d4463d367bc49c7767a96cfec72c6ee}

2.fileclude

分析源码:

get传参 file1,file2

file1,file2不能为空

涉及到一个函数:

file_get_contents()函数,它是PHP中最常用的文件处理函数之一。

file_get_contents()函数用于读取文件中的内容,并将其作为字符串返回。它通常用于读取文本文件或从远程URL获取内容。

要让file2强等于hello ctf

文件包含file1

这里也是用php伪协议

file_get_contents可以用php://input绕过

文件包含用php://filter绕过

payload:

file1=php://filter/convert.base64-encode/resource=flag.php&file2=php:input

php://input还需要传参post hello ctf

得到base64编码 解码 得到flag

cyberpeace{301551117bf02b4c38abeebf68998878}

3.file_include

打开发现是文件包含

get传参filename 用filter来绕过

发现用正常的filter绕过不成功 去百度了一下filter绕过方式 发现了很多不一样的绕过姿势

用手测?filename=php://filter//convert.iconv.SJIS*.UCS-4*/resource=flag.php 可以绕过 换了一个过滤器

4.catcat-new

进入环境,先用dirsearch扫描一下

这题扫描也没扫出来

看了别人的wp 发现了新的知识点

点击副页发现了这个url

观察URL,可以发现URL上使用get请求传递了一个名为file的参数,所以猜测可能存在文件包含漏洞。

在URL上传递参数file=../../../etc/passwd发现存在漏洞

读取当前进程的命令行参数?file=../../../../proc/self/cmdline,发现有一个通过python启动app.py的命令。 所以可以得出该网站使用Python框架,并且因为有app.py可知使用的是flask框架。

以我现在的能力做不出来 先去了解了知识点的这些东西

XCTF-Web-catcat-new_weixin_45723896的博客-CSDN博客

大佬博客 一周之内会复现成功

5.Web_php_include

重点在include(page),使用了include这个文件包含函数,被include包含的page通过get方式传入且可控。所以存在文件包含漏洞。但在判断中通过strstr过滤了"php://"

当传入的page存在php://时候替换为空

可以利用php伪协议。而strstr是区分大小写的,所以可以通过大小写绕过过滤

首先通过大小写及报错,确定是linux系统

这时候就可以利用php伪协议+linux命令执行语句来做

也可以用data协议来做

data://伪协议可以执行php代码,格式如下:

data://text/plain,要执行的代码

如果特殊字符被过滤,还可以使用base64编码

data://text/plain;base64,编码后的代码

?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpPz4=

发现了flag文件 再次编码之后放包 ?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmw0Z2lzaXNpc2gzcjMucGhwJyk/Pg==

<?php system('cat fl4gisisish3r3.php')?>

得到flag

知识点

1.2.3题

文件包含漏洞

也是一种"注入型漏洞",其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行。

require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

过滤器

字符串过滤器

string.rot13

string.rot13(自 PHP 4.3.0 起)使用此过滤器等同于用 str_rot13()函数处理所有的流数据。

str_rot13---对字符串执行ROT13转换. ROT13编码简单地使用字母表中后面第13个字母替换当前字母,同时忽略非字母表中的字符。编码和解码都使用相同的函数,传递一个编码过的字符串作为参数,将得到原始字符串。

string.toupper

string.tolower(自 PHP 5.0.0 起)使用此过滤器等同于用 strtolower()函数处理所有的流数据。

strtoupper---将字符串转化为大写

string.tolower

(自 PHP 5.0.0 起)使用此过滤器等同于用 strtolower()函数处理所有的流数据。

strtolower---将字符串转化为小写

string.strip_tags

使用此过滤器等同于用 strip_tags()函数处理所有的流数据。可以用两种格式接收参数:一种是和strip_tags()函数第二个参数相似的一个包含有标记列表的字符串,一种是一个包含有标记名的数组。

strip_tags---从字符串中去除 HTML 和 PHP 标记.该函数尝试返回给定的字符串str去除空字符、HTML 和 PHP 标记后的结果。它使用与函数fgetss()一样的机制去除标记。

转换过滤器

如同 string.* 过滤器,convert.* 过滤器的作用就和其名字一样。转换过滤器是 PHP 5.0.0 添加的。对于指定过滤器的更多信息,请参考该函数的手册页。

convert.base64

convert.base64-encode和 convert.base64-decode使用这两个过滤器等同于分别用base64_encode()和base64_decode()函数处理所有的流数据。convert.base64-encode支持以一个关联数组给出的参数。如果给出了line-length,base64 输出将被用line-length个字符为 长度而截成块。如果给出了line-break-chars,每块将被用给出的字符隔开。这些参数的效果和用base64_encode()再加上 chunk_split()相同。

convert.quoted

convert.quoted-printable-encode和convert.quoted-printable-decode使用此过滤器的decode版本等同于用 quoted_printable_decode()函数处理所有的流数据。没有和convert.quoted-printable-encode相对应的函数。convert.quoted-printable-encode支持以一个关联数组给出的参数。除了支持和convert.base64-encode一样的附加参数外,convert.quoted-printable-encode还支持布尔参数binary和 force-encode-first。convert.base64-decode只支持line-break-chars参数作为从编码载荷中剥离的类型提示。

convert.iconv.*

这个过滤器需要php支持 iconv ,而iconv是默认编译的。使用convert.iconv.*过滤器等同于用iconv()函数处理所有的流数据。

iconv --- 字符串按要求的字符编码来转换

convery.iconv.*的使用有两种方法:

复制代码
1.convert.iconv.<input-encoding>.<output-encoding>

2.convert.iconv.<input-encoding>/<output-encoding>
支持的字符编码有以下几种

UCS-4*

UCS-4BE

UCS-4LE*

UCS-2

UCS-2BE

UCS-2LE

UTF-32*

UTF-32BE*

UTF-32LE*

UTF-16*

UTF-16BE*

UTF-16LE*

UTF-7

UTF7-IMAP

UTF-8*

ASCII*

还有压缩过滤器,加密过滤器,这里不做过多阐述

可见大佬博客 详解php://filter以及死亡绕过_w0s1np的博客-CSDN博客

4题

/etc/passwd

该文件储存了该Linux系统中所有用户的一些基本信息,只有root权限才可以修改。其具体格式为 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell(以冒号作为分隔符)

/proc/self

proc是一个伪文件系统,它提供了内核数据结构的接口。内核数据是在程序运行时存储在内部半导体存储器中数据。通过/proc/PID可以访问对应PID的进程内核数据,而/proc/self访问的是当前进程的内核数据。

/proc/self/cmdline

该文件包含的内容为当前进程执行的命令行参数。

/proc/self/mem

/proc/self/mem是当前进程的内存内容,通过修改该文件相当于直接修改当前进程的内存数据。但是注意该文件不能直接读取,因为文件中存在着一些无法读取的未被映射区域。所以要结合/proc/self/maps中的偏移地址进行读取。通过参数start和end及偏移地址值读取内容。

/proc/self/maps

/proc/self/maps包含的内容是当前进程的内存映射关系,可通过读取该文件来得到内存数据映射的地址。

flask-session结构

flask_session是flask框架实现session功能的一个插件。其session结构分为三部分:序列化内容+时间+防篡改值,这三部分内容加密后以符号 "."来进行分隔。flask_session默认session的储存是在用户Cookie中。但也可以指定存储在数据库,缓存中间件,服务器本地文件等等之中。

/proc/self/environ

/proc/self/environ文件包含了当前进程的环境变量

/proc/self/fd

这是一个目录,该目录下的文件包含着当前进程打开的文件的内容和路径。这个fd比较重要,因为在Linux系统中,如果一个程序用 open() 打开了一个文件,但是最终没有关闭它,即使从外部(如:os.remove(SECRET_FILE))删除这个文件之后,在/proc这个进程的fd目录下的pid文件描述符目录下还是会有这个文件的文件描述符,通过这个文件描述符我们即可以得到被删除的文件的内容。通过/proc/self/fd/§pid§来查看你当前进程所打开的文件内容。

当pid不知道时,我们可以通过bp爆破,pid是数字。

/proc/self/exe

获取当前进程的可执行文件的路径

相关推荐
sun0077008 小时前
android ndk编译valgrind
android
AI视觉网奇9 小时前
android studio 断点无效
android·ide·android studio
jiaxi的天空9 小时前
android studio gradle 访问不了
android·ide·android studio
No Silver Bullet10 小时前
android组包时会把从maven私服获取的包下载到本地吗
android
catchadmin10 小时前
PHP serialize 序列化完全指南
android·开发语言·php
tangweiguo0305198712 小时前
Kable使用指南:Android BLE开发的现代化解决方案
android·kotlin
00后程序员张14 小时前
iOS App 混淆与资源保护:iOS配置文件加密、ipa文件安全、代码与多媒体资源防护全流程指南
android·安全·ios·小程序·uni-app·cocoa·iphone
柳岸风16 小时前
Android Studio Meerkat | 2024.3.1 Gradle Tasks不展示
android·ide·android studio
编程乐学16 小时前
安卓原创--基于 Android 开发的菜单管理系统
android
whatever who cares18 小时前
android中ViewModel 和 onSaveInstanceState 的最佳使用方法
android