2er0's Studio.

BUUCTF刷题

Word count: 852Reading time: 3 min
2020/11/21 Share

BUUCTF刷题记录

1.[RoarCTF 2019]Easy Calc

有waf,基本思路就想到过waf,危险函数传参。

源代码中发现有calc.php的页面:

在url后添加“calc.php”访问,php代码审计:

接收的参数为num,看到过滤规则首个就是过滤空格

构造如下:calc.php?空格num=phpinfo(); 这样,会先触发规则,删除空格,进而将一个名称为num的参数传入

成功

进一步读取目录,否则仍是找不到flag

由于过滤了“/”符号,我们用ASCII码替换

补充:

​ scandir() 函数返回指定目录中的文件和目录的数组。

​ var_dump()函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值, 通过缩进显示其结构。

f1agg字符串,file_get_contents()直接读取即可。

php的字符串运算符示例:

<?php $a='this is a test'; $a.=chr(78).chr(98); echo $a; ?>

有两个字符串运算符,连接运算符为’ . ‘, 其返回左右两参数的拼接结果, 连接赋值运算符为 ‘ .= ‘,其是将运算符右侧参数拼接到左侧参数(string)的后面。

总结:

题目比较简单,主要考察对于php字符串的解析特性

我们知道PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:

/news.php?%20news[id%00=42”+AND+1=0–

上述PHP语句的参数%20news[id%00的值将存储到$_GET[“news_id”]中。

2.[GXYCTF2019]Ping Ping Ping

这个题是Ping命令注入

传参:?ip=localhost|ls

| (管道符号)的作用是将| 的作用是将前一个命令的结果传递给后一个命令作为输入;

ls(list files):列出当前目录下子目录及所含文件

继续传参:?ip=localhost|cat%20index.php

可以看出过滤了空格,尝试绕过,绕过空格的思路一般有:

$IFS,IFS的默认值为:空白(包括:空格,tab, 和新行)

${IFS},<,<>,

{cat,flag.php} //用逗号实现了空格功能,%20,%09

``$IFS$1` //$1改成$加其他数字貌似都行

可以看到对我们的输入进行了过滤,在flag匹配里面不能将flag连写,同时覆盖$a变量

变量拼接: ?ip=localhost;a=g;cat$IFS$1fla$a.php;

查看源代码里面就有flag

除此外,我们可以尝试使用反引号内联执行的做法,linux下反引号``里面包含的就是需要执行的系统命令

反引号里面的系统命令会先执行,成功执行后将结果传递给调用它的命令

查看源代码可以看到index.php和flag.php的内容全部显示。

总结:

主要考察命令注入的常见绕过姿势,及php语法规则。

https://xz.aliyun.com/t/3918

https://www.cnblogs.com/wangtanzhi/p/12246386.html#autoid-0-0-0

https://www.cnblogs.com/Cl0ud/p/12313368.html

https://chen.oinsm.com/2020/01/10/GXYCTF-2019-%E5%A4%8D%E7%8E%B0/

CATALOG
  1. 1. BUUCTF刷题记录
    1. 1.1. 1.[RoarCTF 2019]Easy Calc
  • 总结:
    1. 0.1. 2.[GXYCTF2019]Ping Ping Ping
  • 1. 总结: