首页 > 其他分享 >ssrf刷题

ssrf刷题

时间:2023-04-13 23:33:23浏览次数:28  
标签:web 127.0 http ssrf url flag php 刷题

在做题之前我们需要了解一些知识点:

我们需要知道parse_url函数的使用方法。

<?php

$url = "http://www.php.cn:8080/index.php?name=wxp&id=2";

$parts = parse_url($url);

print_r($parts);

?>

运行结果:

 

 

 可以看到这个函数的作用就是解析 URL,并返回url的组成部分。这样就可以帮助我们理解后面的题的意思了。

web 351

 <?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);
?> 

直接构造url=127.0.0.1/flag.php就可以了

web 352

 <?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');
}
?> hacker

虽然对于loclhost进行了过滤,但是我们依然可以用刚才的payload获取flag。

payload:url=http://127.0.0.1/flag.php    (这里你会发现只有是127开头的,比如127.0.1.1也可以获取到flag,但是为什么呢?)

!!!这里有一个知识点,127.0.0.1是一个回环地址,比如:127.0.0.1~127.255.255.254这些都是回环地址。

所以回环地址有什么用呢?

 

 

 所以我们可以理解为127.0.1.1和127.0.0.1这些都相当于localhost,所以都可以访问内网获取flag。

web353

<?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');
}
?>hacker

该题目过滤了1和0,所以之前的payload就不能用了。

这里我们可以用http://sudo.cc/这个域名,因为这个域名是指向0.0.0.0的,所以我们可以通过这个域名进行绕过。

 

 

 

 

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

web 355

<?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');
}hacker

因为$host<=5,所以我们只需要构造一个小于等于5的payload就可以了。

url=http://127.1/flag.php

web 356

<?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');
}

同理。我们可以用0.0/flag.php。

payload:url=http://0.0/flag.php

web 357

 <?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');
}
?> scheme

这道题我们需要先了解if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE))

https://blog.csdn.net/z_qifa/article/details/75497577

可以知道这个东西是用来判断内外网的,如果不是内网的话则echo file_get_contents($_POST['url']),所以我们使用DNS重绑定。

这里使用这个网站:https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg   我们将自己的ip绑定为127.0.0.1,然后反复刷新就可以得到flag。

 

 

web 358

<?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结尾。

以show结尾的话我们可以以#show或者?show方式结尾。

所以我们可以在http://ctf.的后面加入@127.0.1这样host就是127.0.1

 

 

 

所以payload:url=http://[email protected]/flag.php?show

 

标签:web,127.0,http,ssrf,url,flag,php,刷题
From: https://www.cnblogs.com/kode00/p/17285062.html

相关文章

  • 2023/04/12刷题
    C.MakeItGood链接C.MakeItGood这个题是说去掉前缀,我们可以发现如果一个数列可以分为一个连续的上升区域和一个连续的下降区域的话,该数列是好的,该题的思路就是从后向前找到符合该特征的最长的序列#include<iostream>#include<algorithm>#include<cstdio>#includ......
  • Pwn刷题记录
    01[WUSTCTF2020]getshell2考点:栈溢出,ret2shellcode首先查看保护机制为32位小端程序,开启了栈不可执行。用IDA32查看伪代码追踪到vulnerable函数可以通过read实现溢出exp:frompwnimport*#p=process('./pwn')p=remote("1.14.71.254",'xxxxx')sh=0x08048670#0......
  • 操作系统(刷题)
          ......
  • 计算机系统 ( 计算机硬件基础 )刷题——密钥
                                                                               ......
  • SQL 刷题—直播间人气值
    需求描述直播间开播记录表t_live和直播间观看记录表t_look_log数据如下:createtablet_live(author_idinteger,--博主live_idinteger,--直播间IDlive_durationinteger--开播时长);insertintot_livevalues(1,1,60),(2,2,1......
  • pwn刷题笔记
    做几道pwn题,不使用ida的反汇编功能。 buuoj:ciscn_2019_n_1检查保护机制,只开启了数据段不可执行 ida查看main函数汇编代码 根据汇编代码写出main函数的反汇编代码setvbuf(cs:__bss_start,0,2,0);servbuf(cs:stdin@@GLIBC_2_2_5,0,2,0);func();return;......
  • 【LBLD】刷题记录
    【LBLD】刷题记录labuladong的算法小抄第零章、核心框架汇总学习算法和刷题的思维框架我的刷题心得【LBLD】双指针技巧秒杀七道链表题目【LBLD】双指针技巧秒杀七道数组题目第一章、手把手刷数据结构手把手刷链表算法【LBLD】双指针技巧秒杀七道链表题目【LBLD】递归......
  • MS SQL Server SQL刷题记录
    MSSQLServerSQL方言和mysqlsql略有不同目录保留4位小数求曼哈顿距离和欧几里得距离求中位数表联结表联结,我真心建议给你的列命名的时候不要瞎命名保留4位小数SELECTCAST(ROUND(SUM(LAT_N),4)ASDECIMAL(10,4))FROMSTATIONWHERELAT_N>38.7880ANDLAT_N<137.23......
  • weblogic-SSRF
    Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。1、启动环境 访问`http://your-ip:7001/uddiexplorer/`,无需登......
  • C语言之PTA刷题(基础编程题目集_函数题)
    本题要求实现一个函数,对给定的正整数N,打印从1到N的全部正整数。#include<stdio.h>voidPrintN(intN);intmain(){intN;scanf("%d",&N);Pr......