Practice of Web

这一周对web学习差不多快结束了,在此总结一下本周所做的题

签到题

题目描述

点开后

由于题目说不用使用工具,则右击-查看页面源代码-成功找到flag

怎么做都好做,没flag就抓包

题目描述

点开后

点击链接

则进行抓包,发现没有要找的信息

右击-发送到repeater-go 成功找到flag

小结:
Burp Repeater 是一个手动修改并补发个别 HTTP 请求,并分析他们的响应的工具。

/X00

题目描述

点开后

view-source:

    if (isset ($_GET['nctf'])) {
        if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE)
            echo '必须输入数字才行';
        else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE)   
            die('Flag: '.$flag);
        else
            echo '骚年,继续努力吧啊~';
    }

发现这是php语言,nctf为参数名,而且其值要满足:

为1-9的数字
包含'#biubiubiu'

方法一:00截断

但既然是数字,那应该怎样添加字符串’#biubiubiu’呢?

由于题目是/X00,则试一下00截断

PHP的00截断是一个漏洞,当用户输入的url参数包含%00经过浏览器自动转码后截断后面字符。

ereg()无法将%00后的字符串读进去进行比较

URL中,从’?’开始到’#’为止之间的部分为参数部分,又称搜索部分、查询部分
‘#’代表网页中的一个位置。其右面的字符,就是该位置的标识符

则要将’#’转换成十六进制形式

在网址后加上

/?nctf=1%00%23biubiubiu

即成为

http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php/?nctf=1%00%23biubiubiu

再回车,成功获得flag

附:URL特殊符号及编码

序号     特殊字符     含义     十六进制值
1.     +     URL 中+号表示空格     %2B
2.     空格     URL中的空格可以用+号或者编码     %20
3.     /     分隔目录和子目录     %2F
4.     ?     分隔实际的 URL 和参数     %3F
5.     %     指定特殊字符     %25
6.     #     表示书签     %23
7.     &     URL 中指定的参数间的分隔符     %26
8.     =     URL 中指定参数的值     %3D

方法二: 数组截断

利用ereg()函数与strpos()函数的共同漏洞:

ereg()比较一个数组和字符串时会返回-1,即变为-1===FALSE;
传入一个数组给strpos()时,会出错返回null,即变为null!==FALSE

在网址后加上

/?nctf[]=       #任意值均可

成功获得flag

web4

题目描述

点击后

点进去后发现有几行“乱码”

URL编码

url编码又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。

则将var p1、%35%34%61%32、var p2拼接到一起进行编码,得到

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;

将”67d709b2b54aa2aa648cf6e87a7114f1”这串字符串submit,成功获得flag

web5

打开后

查看源代码

JSFuck编码:

可以让你只用 6 个字符 ‘[ ]’ ‘( )’ ‘!’ ‘+’ 来编写 JavaScript 程序

进行解码

用火狐浏览器web开发者-web控制台进行转码,成功获得flag

题目描述

点开后

查看源代码发现什么信息都没有,则进行抓包

发现cookie中:Login=0

则将0改为1 然后Forward 成功获得flag

矛盾

题目描述

点开后是几行php代码

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

参数num得满足:

num不是数字
num的值为1

仔细观察 $num == 1 ,发现其实值是“若等于”1

则可用一个以1为开头的字符串作为num的参数,添加参数到网址,回车即可获得flag

小结:

php中的“==”与“===”:

=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

== 在进行比较的时候,会先将字符串类型转化成相同,再比较

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

头有点大

题目描述

点开后是一个提示页面

提示说需要修改.net framework,在England,而且使用Internet Explorer浏览器

进行抓包

在 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0)括号末尾加上.NET CLR9.9 (安装.Net Framework后,MSI会将“.NET CLR”添加到User Agent字符串中)

将Accpt-Language后面修改为 en-gb

在Mozilla/5.0后添加 compatible IE 6.0 使得服务器认为我们使用的是IE6.0的浏览器

修改后,右键发送到repeater,go即可获得flag

没有人的密码会这么简单

题目描述

打开后

进行抓包,然后右键-send to intruder

在Intruder-Position中设置,将自动设置的position【Clear】掉,然后在请求中user_pw的地方点击【Add】添加position

选择所需要的字典,打开Intruder-Payloads,在Payload Type中选择Numbers

选择数字起点、终点和步长,在Payload Option中设置;由于第一位不是0,则从1000开始到9999结束,步长设置为1

点击左上角intruder-attack开始破解

跑完后,找出与众不同的lenth,选中后点response,即可查看能否登录

成功破解,得到flag

我说的是真的

题目描述

点开后

进去发现

由于题目是“我说的是真的”,则返回到“到这里找key”的页面,查看源代码

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
    </head>
    <body>
        <a href="./search_key.php">_到这里找key__</a>
    </body>
</html>

点击search_key.php,成功得到flag

你会改后缀吗

题目描述

点开后

有一张动态小猫图片

查看源代码

<html>
    <title>你是在坑我?</title>
    <body>
    答案又是啥。。
    <img src="2.gif" width="100" height="100" />
    </body>
</html>

由于此题与后缀有关,则先将图片保存下来
那么要将后缀改成什么格式呢?

将后缀改为.html,打开后,成功找到flag

文件上传比想象的难一点

题目描述

点开后

查看源代码

<html><head><meta charset="utf-8" /></head><body>
Array
(
)
不被允许的文件类型,仅支持上传jpg,gif,png后缀的文件

则将一个jpg格式的文件上传,发现

那就上传一个php文件,发现

发现叙述很矛盾

这里就需要用00截断的方法

什么是00截断呢?

网站上传函数处理xxx.php%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符,丢弃后面的jpg,文件后缀最终保存的后缀名为xxx.php

在上传时使用拦截,得到上传信息

在uploads后,自己手动构造一个上传的文件’1.php.jpg’,然后转到Hex页面,找到 . 对应的16进制2e,修改为00

再回到Raw,发现空格已经变成一个框框,框框表示一个空字节

然后forward,成功获得flag

一道简单的ctf题目

题目描述

点开后

提交一个php文件,显示

非图片文件

则说明文件类型要为图片类型

进行抓包,找到content-type

将后面修改为image/jpeg 或image/png

forward,即可成功获得flag

比较大小

题目描述

点开后

随便输入数字,提交页面显示

数字太小了!

查看源代码

<html>
    <head>
        <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    </head>
    <body>
                <form action="" method="post">
            <input type="text" maxlength="3" name="v"/>
            <input type="submit" value="提交"/>
        </form>
    </body>
</html>
数字太小了!

发现有一行’input type … maxlenth’,而且题目提示用F12,则此题需要修改网页源代码

则右键选择-查看元素

找到input maxlenth,将‘3’改为‘4’(比三大就行) 再输入9999提交,成功获得flag

nmap我用过

题目描述

点题目链接,发现链接是学校官网

根据题目提示,在cmd输入

nmap -F -sT -v 202.196.32.7

扫完后

则 22808080 即为flag

附:
F:扫描100个最有可能开放的端口
v 获取扫描的信息
sT:采用的是TCP扫描 不写也是可以的,默认采用的就是TCP扫描

111

题目描述

点开后,发现进入了一个动态页面

右键-查看源码

找到flag

仔细看看源代码

题目描述

点进链接,到达一个网页,然后查看源代码

发现有个后缀为.html的链接

点击去,发现下一个页面还有这个链接,继续点下去

发现这么多行代码隐藏着flag信息!

附:

什么是HTML

超文本标记语言,标准通用标记语言下的一个应用。
“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
超文本标记语言的结构包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。

md5加密 代码分析

题目描述

点击链接

please input a

则分析PHP代码

首先要在网址后添加一个参数a,a的值要满足

不能为’QNKCDZO’
a的md5的值要与’QNKCDZO’的md5值若相等

由于是md5加密,则搜索md5加密工具,搜索’QNKCDZO’ 加密后为

0e830400451993494058024219903391

#md5()函数默认转换为32字符十六进制数

由于比较是‘若等于’,则加密后的字符串转化为数字为0(以0e开头,即认为是0的…次方)

则只要a的参数加密后以0e开头即可

百度‘以0e开头的MD5’即可找到

在地址栏后面加上?a=s878926199a(或者其他符合的)回车即可获得flag

你知道base加密吗

题目描述

点开后

输入任意值提交不对,查看源代码什么也没有

则进行抓包,右键发送到repeater,go

发现response中的content-row后有一行‘代码’

进行base转码,得到一串数字

提交,成功获得flag

php代码审计

题目描述

点开后

则要先分析PHP代码

要有两个参数名,name和password
name不能等于password
name的shal要和password的shal相等

利用sha1无法处理数组类型,即可利用数组绕过

在地址栏后添加?name[]=1&password[]=12,回车即可获得flag

密码爆破

题目描述

点开后

进行抓包

由于每次登陆验证码都会刷新,则将验证码设为空,只有pwd这一个变量

进行instuder,破解得到正确密码,提交得到flag

上传成功也不一定得到flag哦!!

题目描述

点开后

查看源代码

分析源代码

split返回文件名以’.’分割后的数组,str[1]即为此文件的第一个后缀为jpg格式的

使用’1.jpg’上传,出现

真乖,您上传了一张jpeg的图片,上传成功!

扩展后缀名为’1.jpg.txt’,成功获得flag

robots了解一下

题目描述

点击链接,进到了一个网站

http://www.wechall.net/challenge/training/www/robots/index.php

搜索关于robots的知识

robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。

robots.txt文件必须驻留在域的根目录,并且必须命名为“robots.txt”

则将网址改为

http://www.wechall.net/robots.txt

回车,进到了一个页面

则TOPS3CR3T即为flag

本机登陆

题目描述

点开链接

进行抓包

将isadmin值修改为1,认为我是管理员

添加IP信息

X-Forwarded-For位于HTTP协议的请求头, 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。

forward即可获得flag

根据提示来,密码已经告诉你

题目描述

点开后

查看页面源代码,发现页面代码部分没有需要的信息,但下面有很多空白

将页面拉到最底部,发现

于是将原网址

http://39.107.92.230/web/web5/index.php

修改为

http://39.107.92.230/web/web5/password.txt

回车,出来一个页面,里面有很多密码项

将其保存为.txt格式的文件(字典),然后抓包,使用intruder进行破解

在intruder-payloads-payload option中选择load,载入字典

破解得到密码

发现密码有六位,但输入框只能输入五位密码

审查元素-将输入位数改为6,提交依然错误

返回burpsuit,查看此密码的response

发现newpage后面的数据为base加密的

进行解码,得到

290bca70c7dae93db6644fa00b9d83b9.php

将网址改为

http://39.107.92.230/web/web5/290bca70c7dae93db6644fa00b9d83b9.php

来到一个新界面

随意提交内容,提示

你还没有登录,不能留言!

则进行抓包

首先要将islogin的值改为1

接着要把userlevel的值改为root(“管理员”是一个很重要的提示,一般管理员默认用户名,linux下比如admin,root。windows下是administrator,我们可以合理猜解)

然后repeater-go

在response中发现flag

再对flag进行URL转码,最终得到flag