文中对CTFSHOW WEB143题目进行代码审计,题目要求GET参数v1、v2、v3均存在且转为字符串后,v1、v2需为数值型;v3若匹配字母、数字及+、-、.等特殊字符则被拦截,否则通过eval执行“v1$v3$v2”。解题思路借鉴WEB131,因v3约束增强,将原用的-换为*或/、|换为^、;换为?>,并编写Python脚本生成异或payload(如最终payload:?v1=1&v2=0&v3=/("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%03%01%0b%00%06%00"^"%60%60%7f%20%60%2a")?>)以执行system('cat f*')。作者最后邀请读者尝试更优方法,在评论区分享交流。
本文为局外人撰写的CTF SHOW WEB142题解(分类:技术分析,阅读约2分钟,标签:CTF SHOW、刷题、新手),记录日常CTF做题过程。题目为PHP代码审计,核心是通过GET参数`v1`控制是否输出`flag.php`:`v1`需为数字,程序会计算`d=(int)($v1×877⁵)`(877是0x36d十进制值)并睡眠`d`秒后输出flag。因877⁵极大,正数`v1`会导致超长等待,而`v1=0`时`d=0`,可直接获取flag(访问`http://目标地址/文件名.php?v1=0`)。文末邀请读者分享更优解法。
题目需审计PHP代码:要求GET参数v1、v2为数字,v3全是非单词字符(经preg_match('/^\W+$/'验证),代码通过eval执行“v1+v3+v2”拼接的表达式。解题思路利用PHP函数调用优先级高于算术运算的特性(如1-phpinfo()会先执行phpinfo()),计划构造“1-system('cat f*');”格式命令。因需规避字母,引入Python脚本,通过非单词字符的URL编码组合生成“system”“cat f*”对应的Payload,最终得到示例Payload:?v1=1&v2=1&v3=-("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%03%01%14%00%06%00"|"%60%60%60%20%60%2a");(v1、v2可任意取数字)。
本文是CTFSHOW WEB140题的技术分析记录,聚焦于PHP代码审计。题目核心代码通过POST接收参数f1和f2,经正则验证(仅允许小写字母和数字)后,通过`eval("return $f1($f2());")`执行函数调用,若结果的`intval`值等于`intval('ctfshow')`(即0),则输出flag。分析可知,源于`eval`的不安全使用。利用时,需选择符合正则的函数组合:f2为无参数调用返回false或空值的函数(如glob、md5),f1为能将其转换为intval为0的结果的函数(如intval、strval)。文中提供了多种此类组合,并说明其共性,可通过POST对应参数获取flag。
### CTFSHOW WEB139 天才般的时间 摘要 本文为CTF做题记录,聚焦CTFSHOW WEB139题的解題思路与技术分析。 题目存在命令注入场景,但其check函数过滤了大量特殊字符与执行命令(如nc、bash、curl等),且禁用写入权限,无法通过常规输出获取结果。核心突破点在于利用“时间盲注”技术:通过Python脚本构造特殊payload,逐行逐字符爆破服务器根目录内容。 payload的核心逻辑为:利用`ls /`列出根目录,通过`awk`提取指定行、`cut`截取指定字符,再用`if`条件判断该字符是否与猜测字符一致——若一致则执行`sleep 3`,脚本通过检测请求超时(设置2.5秒超时)判断字符正确,最终拼接出完整内容。通过该方法,先定位到flag所在文件`f149_15_h3r3`,再用相同逻辑读取文件内容,最终得到格式为`ctfshow{}`的flag。 此解法巧妙将字符验证转化为时间差信号,在无直接输出的限制下实现信息获取,体现了时间盲注在CTF中的典型应用。
本文为CTFSHOW WEB138题的分析记录,该题涉及PHP的call_user_func函数。题目中存在ctfshow类,其静态方法getFlag可读取flag.php,但__wakeup方法会阻断程序,且限制POST参数ctfshow中不能包含冒号。解题思路是利用数组形式传递参数,通过POST传入['ctfshow', 'getFlag'],使call_user_func调用该静态方法以获取flag,为绕过冒号限制提供了可行方案。
本文为CTFSHOW WEB137题的解题记录,聚焦PHP中`call_user_func()`函数的应用。题目代码定义了`ctfshow`类,包含会终止程序的`__wakeup()`方法和用于读取flag的静态方法`getFlag()`,核心是通过`call_user_func()`动态调用回调函数。解题时,向POST参数`ctfshow`传递`ctfshow::getFlag`,利用`call_user_func()`调用该静态方法即可获取flag(结果在源代码中)。
本文是对攻防世界“simple_js”CTF题目的解析记录。该题通过一段JavaScript代码考查代码审计能力,核心函数`dechiffre`看似接收输入进行“解密”,实则忽略输入参数,仅通过固定的ASCII码数组`tab2`拼接返回固定字符串“FAUX PASSWORD HAHA”,属于伪解密逻辑。实际解题关键在于代码中隐藏的16进制字符串`\x35\x35\x2c...\x35\x30`,将其转换为字符并按格式`Cyberpeace{xxxxxxxxx}`包裹即为答案。本文为新手提供了通过代码审计发现隐藏信息的思路参考。
本文是关于CTFSHOW web136的技术分析,该题为命令执行类题目,核心是在绕过check()函数(过滤多种字符和命令)的同时,解决exec()函数无输出的问题。思路上利用tee命令,先通过`ls / | tee 1`找到flag所在文件,再用`cat /f149_15_h3r3|tee 2`将结果写入文件,访问对应文件即可查看内容。最后作者邀请大家尝试更多方法,并提及Linux小命令。
本文是一篇CTF做题记录,分享了攻防世界“catcat-new”题目的解题思路与过程。该题属于文件类型题目,核心围绕`file=`参数的文件读取展开。解题时,首先通过`/proc/self/cmdline`得知目标为Flask应用(运行`app.py`),读取`app.py`后发现,`/admin`路由存放flag,但需`session`中`admin=1`,而`session`依赖`SECRET_KEY`加密,其格式为32位随机字符串加固定后缀`*abcdefgh`。随后,利用`/proc/self/maps`获取进程内存映射地址,结合`/proc/self/mem`读取内存数据,通过脚本匹配到`SECRET_KEY`。最后,使用该密钥解密并修改`session`为`admin=1`,成功访问`/admin`得到flag。过程涉及Flask session机制、`/proc`目录文件(如`cmdline`、`maps`、`mem`)的应用等知识点。
《攻防世界xff_referer》是一篇面向新手的CTF做题记录,作者为局外人,主要涉及技术分析。该题目较为简单,解题核心是通过Burp工具修改HTTP请求头:一是将X-Forwarded-For字段设为123.123.123.123以满足IP地址要求,二是将Referer字段设为https://www.google.com以符合来源页面要求,进而获取flag。需注意题目存在一个BUG,若得到错误flag,删除场景重新生成即可。文中还整理了HTTP请求头常用字段(含标准字段及X-前缀非标准字段)的说明,供参考。最后作者欢迎读者分享更优解法。
本文是一篇CTF新手向技术分析记录,分享了攻防世界“NewsCenter”题的SQL解题过程。作者通过抓包分析确定POST参数存在点,依次判断为字符型、利用`order by`确定列数为3、通过联合查询找到显示位,最终借助`information_schema`查询当前数据库(`news`)、表(`secret_table`)及字段(`fl4g`),获取flag。文中还补充了`information_schema`的结构关系(库、表、字段层级)及MySQL常用函数(字符串、数值、日期等类别),供新手参考学习。
本文是作者[局外人]的CTF做题记录,属技术分析类内容,适合新手参考(阅读时长约2分钟)。文中分享了攻防世界php_rce题目的分析,该题聚焦ThinkPHP V5,作者作为新手通过实践涨见识。解题思路围绕框架默认路由参数`s`,提供了从信息收集到获取flag的三个payload。同时,文中详细介绍了ThinkPHP V5的核心(远程代码执行、SQL、文件包含等)、影响版本、修复方案(升级框架、路由配置、输入验证等)、典型案例及版本风险(已停止维护,建议迁移至V6+),最后邀请读者分享更优方法,展开互动。
本文为CTF做题记录,主要分析攻防世界supersqli题目,聚焦SQL流程与方法。解题时先判断注入类型为字符型,再通过order by判断字段数,发现select等关键字被过滤后,利用分号执行多条SQL语句,依次查询数据库、切换库、查看表及字段信息,最终借助HANDLER命令读取目标表数据。文中还总结了MySQL中HANDLER命令的操作类型、语法、说明及示例,为类似场景提供参考。
本文为CTF SHOW web135题的技术分析记录。题目通过GET参数F接收输入,过滤了system、curl等多个命令,仅执行F的前6个字符。解题思路可采用payload `?F=\`$F\`+;cp+flag.php+1.txt`,其中URL中的“+”会被解析为空格。此外,文中还补充了PHP中GET/POST参数名特殊字符的转换规则:点号、空格、减号等非字母、数字、下划线的字符会转为下划线,中括号因用于标识数组而保持不变。
本文围绕CTFSHOW web134题目展开,重点分析变量覆盖及PHP变量命名规则。 web134题目通过代码限制直接用GET/POST提交key1、key2,但其使用`parse_str($_SERVER['QUERY_STRING'])`和`extract($_POST)`存在变量覆盖风险。解题思路为利用这两个函数的特性,通过GET参数对POST变量赋值,构造payload`?_POST[key1]=36d&_POST[key2]=36d`,其中key无需加引号(因PHP对未定义常量的容错处理,会将其视为字符串键,加引号反而会因编码问题导致错误)。 此外,文中还总结了PHP变量命名规则:需以`$`开头,首字符为字母或下划线,后续可接字母、数字或下划线,区分大小写,不可使用PHP关键字;超全局变量以`$_`开头,建议采用下划线命名法或驼峰命名法提升可读性。
本文记录了CTFSHOW web133的解题思路,题目要求GET参数`F`的前6个字符经`eval`执行,且`F`中不能包含`system`、`nc`等关键字。解题核心为利用变量覆盖:构造`F`使前6个字符触发对`F`的再次解析,再拼接`curl`命令,通过Burp Collaborator Client生成的地址,用`curl -F`将`flag.php`上传至该地址。操作时需注意地址的`https`协议,发送请求后在Collaborator中查看flag。
本文记录了CTFSHOW web131的解题思路,题目要求POST参数`f`需满足两个条件:不被正则`/.+?ctfshow/is`匹配,且需包含`36Dctfshow`(不区分大小写)。解题核心利用正则溢出原理——当字符串长度超过100000时,正则无法匹配后续内容,故通过生成超长字符串(如用`str_repeat`生成大量字符),并在其后拼接`36Dctfshow`,即可获取flag。
本文为CTF做题记录,分析了攻防世界warmup题目。该题是PHP代码审计题,核心在于绕过checkFile函数并通过include包含目标文件。checkFile函数通过截取输入字符串至第一个“?”的部分,若在白名单(source.php、hint.php)则允许通过。结合hint.php提示flag在ffffllllaaaagggg,利用PHP中include对路径的解析特性,通过构造含相对路径的payload(如source.php?/../../../../ffffllllaaaagggg),可绕过校验并包含目标文件获取flag。
本文是CTFSHOW web130题的解题记录,面向新手,作者为局外人,阅读时长约5分钟。题目需分析POST参数`f`的验证逻辑:`f`需不被正则`/.+?ctfshow/is`匹配,且必须包含`ctfshow`(不区分大小写)。通过解析正则规则(匹配“任意1个及以上字符后接ctfshow”),得出当`f`以`ctfshow`开头时,既不满足正则匹配,又包含目标字符串,故payload为`f=ctfshow`。文中还附带PHP正则匹配规则总结,涵盖基础元字符、字符类、预定义字符类、量词、分组与引用、断言及修饰符等内容,方便理解正则匹配逻辑。
本文是一篇CTF做题记录,聚焦攻防世界Web_python_template_injection题目,分析了基于Flask框架Jinja2模板引擎的Python模板注入。核心思路为利用Jinja2特性及Python魔术方法,通过特定Payload(如借助`__class__` `__mro__` `__subclasses__`等获取os模块执行系统命令)获取flag。文中还整理了相关Python魔术方法、普通方法及属性在Jinja2中的访问情况与限制,并补充了Jinja2沙箱安全机制等说明,同时邀请读者分享更优解法。
本文是一篇CTF做题记录,聚焦“攻防世界command_execution”题目。该题主要考察Linux命令拼接的运用,作者通过在ping命令后使用分号拼接`echo `ls``等命令,成功找到位于`/home/flag.txt`的flag。文中还总结了Linux中常用的命令连接符号,如`;`、`&&`、`||`等的作用、执行逻辑、示例及适用场景,为类似题目提供了思路和参考。
本文是关于CTFSHOW web129的技术分析,作者分享了日常做题记录。针对题目中的代码,分析了两种payload的原理,一是从根目录出发,通过多层路径跳转最终解析到目标文件;二是利用php://filter的方式。最后作者邀请大家尝试更好的方法并在评论区分享交流。
《攻防世界upload1解题记录》摘要:本文记录了攻防世界中难度为2的upload1题的解题过程。题目页面包含check()函数的JavaScript代码,限制仅能上传jpg、png格式文件。解题思路为在浏览器中打开F12禁用JavaScript,上传含一句话代码“<?=eval($_POST['cmd']);?>”的php文件。作者还邀请读者分享更优的解决方法。
本文分享了CTFSHOW的web113和web123题的解题思路。web113需满足数字验证、过滤后条件等,利用换页符%0c构造payload?num=%0c36突破;web123则受限于特殊字符和参数要求,可通过parse_str函数或直接输出flag的方式,结合PHP变量名特性构造有效载荷解题,文中还附URL常用空白及控制字符编码表供参考。
本文是对CTFSHOW web113题目的解析与相关PHP协议的整理。题目代码通过`is_file()`函数和`preg_match`对文件访问进行限制,需绕过这两项检测以获取flag.php内容。绕过`is_file()`可采用超长路径,如多次重复`/proc/self/root/`后指向目标文件;绕过`php://filter`限制可利用`compress.zlib://flag.php`,因`compress.bzip2://`需通过`php://filter`显式调用,`compress.zip://`不存在,而`php://input`会读取POST的原始数据而非文件内容。文中还整理了多种PHP协议及过滤器的语法、作用、示例和依赖扩展,包括压缩过滤器、编码过滤器、字符编码转换过滤器等,并说明了`iconv`过滤器中通配符`*`的用法。
CTFSHOW web111是一道适合新手的CTF题目,主要涉及PHP全局变量相关技术分析。题目代码中定义了getFlag函数,通过eval语句实现变量引用操作,且对传入的GET参数v1、v2做了字符过滤,要求v1需匹配“ctfshow”。解题关键在于利用PHP超全局变量$GLOBALS,它包含所有全局变量,可在函数内直接访问,因此构造payload:?v1=ctfshow&v2=GLOBALS即可获取flag。该题核心考察了$GLOBALS变量的特性及变量作用域相关知识。
本文是一篇CTF新手向技术分析,记录了攻防世界“fileclude”题目的解题过程。题目存在PHP文件包含,代码中通过`include($filename)`接收GET参数`filename`,且包含`check.php`进行过滤,`check.php`会拦截含`base`、`encode`等关键词的参数。作者尝试`data://`协议失败后,采用`php://filter`的`convert.iconv`编码转换过滤器绕过限制,可行payload为`?filename=php://filter/convert.iconv.UTF-8*.UCS-4*/resource=check.php`,最终目标是获取`flag.php`中的flag,并补充了常见的`iconv`编码转换格式及说明,为同类题目提供了思路参考。
本文围绕CTFSHOW web109题目展开分析。题目代码要求通过GET方式传入v1和v2参数,且两者需包含字母,随后执行`eval("echo new $v1($v2());")`。分析可知,需利用PHP内置类作为v1(需具备`__toString()`方法以支持echo输出,如Exception、DateTime等),v2则传入待执行命令,尽管`$v2()`多的括号可能终止部分代码执行,但PHP可能因错误抑制不输出错误。文中还整理了常见PHP内置类及其是否具有`__toString()`方法的表格,为解题提供参考。
本文是一篇CTF刷题记录,分享了三道题的解题过程。其中,unserialize3题需绕过`__wakeup()`方法,通过修改序列化对象中表示属性个数的值(使其大于真实个数)实现,构造 payload 为`?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}`;ics-06题针对含`id=1`的链接,用burpsuite爆破1-4000间的数字即可;CTFSHOW web105题利用变量交换,通过`$_GET['suces']=flag`和`$_POST['error']=suces`让`$error=$flag`,从而输出flag。
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号