ctf php代码审计 绕过,Bugku CTF 之代码审计解题记录

前言

此笔记为在Bugku CTF平台上做代码审计题目的过程,也算是一篇wp吧

extract变量覆盖

extract($_GET):

$_GET:表示在传递参数时,URL通过get的方式传参,传输的数据以数组的形式封装在$_GET中

extract():从数组中将变量导入到当前的符号表。该函数使用数组键名作为变量名,数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量

file_get_contents():将整个文件读入一个字符串

trim()去除字符串两侧的空格或者指定字符trim(’string’,’string you want to delete’)

extract()函数的变量覆盖漏洞在于如果导入的数组中有与原来符号表中同名的变量,将会覆盖掉原有的变量,因此对于这道题,我们只需要构造payload?shiyan=&&flag=

此时我们就可以利用变量覆盖漏洞,使原有的flag漏洞的值被覆盖为空,再与我们传入的shiyan变量相比较,空等于空,因此得到flag

ef2dccb22b6c01b4461760053cf34af8.png

strcmp比较字符串

题目地址:

http://123.206.87.240:9009/6.php

5dea0da5476f6bd10b159110298ed765.png

由源码可以看出,题目通过GET方式传递参数a,然后将a和flag变量的值进行比较,若相等则输出flag的值。int strcmp(string str1,string str2)

如果str1小于str2返回0;如果两者相等返回0

这个函数存在一个漏洞就是当传入的参数不为字符串类型时,这个函数将发生错误,在php5.3之前,函数在显示错误信息后,将会返回0,因此我们可以传入payload?a[]=123

即可得到flag

48bde9c4190b2122ff18a84c52cf91d5.png

urldecode二次编码绕过int eregi(string pattern,string string,[array regs])

eregi()函数在一个字符串搜索指定模式的字符串。搜索不区分大小写,如果匹配成功则返回TRUE,否则返回FALSEurldecode()

urldecode()函数的作用就是将url编码后的字符串还原成原来的样子

因此这段代码的意思就是通过GET方式传入id参数,id的值不可以是hackerDJ,但是id的值在url解码后要为hackerDJ才可以得到flag,所以考虑用url二次编码绕过,在转换软件中对hackerDJ进行二次url编码后得到payload?id=%25%36%38%25%36%31%25%36%33%25%36%42%25%36%35%25%37%32%25%34%34%25%34%41

即可得到flag

9fd6220566b29a382bd29a98a7e749f1.png

md5()函数

题目地址:http://123.206.87.240:9009/18.php

题目源码如下:

c43b618abf6b731e1ccffc95647c8388.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值