目录
0x01 swp(简单)
备份文件题,进题看见了提示。我们直接dirsearch开扫:
然后发现了一个叫做/.index.php.swp的备份文件。我们查看源码,并做一下整理:
<?php
function jiuzhe($xdmtql)
{
return preg_match('/sys.*nb/is',$xdmtql);
}
$xdmtql=@$_POST['xdmtql'];
if(!is_array($xdmtql))
{
if(!jiuzhe($xdmtql))
{
if(strpos($xdmtql,'sys nb')!==false)
{
echo 'flag{*******}';
}
else
{
echo 'true .swp file?';
}
}
else
{
echo 'nijilenijile';
}
}
?>
这就是说我们需要post一个名为xdmtql的变量,然后这个变量不能是数组。不能与/sys.*nb/is正则匹配。但是结果的sys nb要在第一位。
我尝试了用回车绕过,因为.*有一个特质:
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。 |
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 |
这就说明,如果换行符应该是不会被检测的。但是还是错的。所以就用回溯绕过法:
一定要记住xdmtql在第一个位置,这样才能绕过最后一个判断语句:
运行就得到了flag。
0x02 简单rce(简单)
进题看看源码:
post传参一个yyds=666,这是不会被检测的。然后再用get传参一个sys。这个sys好多被过滤了。system和popen也被过滤了。可以使用exec或者直接用``反引号进行命令执行。然后空格被过滤了拿%09或者别的${IFS}之类的过去。我们先尝试一下payload:
?sys=echo%09`ls`;
然后发现有一个index.php,然后发现根目录有一个flag的文件。那么我们看看过滤。发现vi没被过滤,我们用vi进行读取,payload:
?sys=echo%09`vi%09`
虽然很多乱码,但是flag还是包含在里面的。
0x03 蜜雪冰城吉警店(简单)
进题看见题目是一个点单题:
我以为是后端发包的题目。但是这题是完全前端,就是根本不发包。所以bp的方法就不行了。然后源码看了好久都没找到id=9的地方,并且我还尝试传入id这个参数。都是没用的。于是去看了wp:
只要在element里面将任意一个id改成9再点击就可以了:
然后就得到了flag。
0x04 召唤神龙(简单)
这题可以直接手打通关 我们进题可以看见一个游戏界面。尝试先死一次:
有一个点击查看分数,然后我们去看看源码的位置:
但是找不到。因为源码都是url编码过的。但是我在源码中发现了一个jsfuck编码:
拿去控制台解密一下:
然后就得到了flag。
0x05 seek flag(简单)
根据题名知道是找flag的题。那么只有几个方向:源码、抓包、放包、dirsearch。
首先先看一下源码:
不想让爬虫爬到,那么就是/robots.txt了。
那我们抓包放包试试:
发现里面包含了id=0,那么我们自然地把他改成1然后放包:
找到flag1和flag2了。然后去/robots.txt看一下:
然后拼接起来就是flag了。
0x06 login(简单)
进题看到一个登录界面,很自然地尝试了注入。但是没用。看了源码发现了提示是:<!--20200101
20200101-->,那么我们拿这两个进去尝试:
发现是登录成功。后面进行了一系列操作都没用。只能去看了wp。居然是把学号最后一位给改了,然后回显了flag。这个是真的想不到。我们用bp抓包爆破,然后发现了输入最后两位为02-11的时候会回显flag。我们就去一个一个抄下来:
得到了flag:flag{dlcg}
0x07 iPhone(简单)
随便点了一下Enter键,发现它需要我们从iPhone而不是windows访问:
那么我们直接用iphone进行访问,那么我们抓包把User-Agent改成iphone就可以了:
就得到了flag。
0x08 $$(简单)
进题看一下源码:
错误示例:
然后他需要var_dump一个变量。这就是$$的变量覆盖题。比如:
我传入$a=b;
那么就会被解析为:var_dump($b);
此时只要给$b赋值为flag.php就能var_dump('flag.php')的内容了。那么我应该输入的payload:
?c=b&b=flag.php
但是这种方法是错误的。那么我们去看一下wp:
wp上说只要让$c=GLOBALS,变量覆盖后就是var_dump($GLOBALS);那么flag也会在里面。(尝试用GLOBALS里面的fl4g然后构建我的payload还是错的)标准payload:
?c=GLOBALS
然后就得到了flag。
0x09 XFF(简单)
根据题意知道是XFF伪造了,那么进题直接抓包伪造就行了:
要ip是1.1.1.1,那么我们直接伪造就行了:
然后就得到了flag。
0x0A GET-POST(简单)
简单题,进题直接搓payload:
?id=1
jljcxy=flag
然后就得到了flag。
0x0B rce1(简单)
网页太花了直接看源码:
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/ /", $ip, $m)) {
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
ping -c 4 {$ip}这很熟悉了。我们尝试一下payload:
?ip=127.0.0.1|ls
是有回显的。而且尝试了一下用$IFS绕过空格也是可以的。但是题目的hint是:
就过滤了个空格,能拿到flag算我输
然后我尝试了直接用cat读取,发现是错的。发现env里面的flag是假的。然后再尝试一次读取。然后查看了源码找到了flag。payload:
?ip=127.0.0.1|cat%09f*
然后在源码里找到了flag。
0x0C 被黑掉的站(简单)
进题没线索,dirsearch扫一下目录,发现了/index.php.bak还有shell.php,我们进去访问。发现.bak里面是一个字典,然后shell里面是一个登录界面,拿着这个字典去爆破试试:
然后发现输入nikel的时候就会回显flag。
0x0D 签到题(简单)
进题发现啥有没有,开一下bp看看。发现了cookie。改一下:
然后在那个base64加密的地方解码,发现了/data/index.php的网页,看源码:
发现要绕过../并进行目录穿越。一开始以为是apache的目录穿越漏洞。但是后来发现可以直接用双写绕过。(而且apache那个漏洞没用)所以我先尝试了payload:
?file=..././index
发现回显了,说明方向没错。然后尝试了好久,找不到flag的位置。只能去看了wp:
然后想起了include会直接执行文件,所以就需要php伪协议来读取,最后的payload:
?file=php://filter/read=convert.base64-encode/resource=..././..././..././..././flag
然后拿去base64解码就得到了flag。
0x0E 签到(简单)
进题看见文本框,提交抓包。
但是这题不能提交。我们去源码的element中把disabled给删了就可以了。然后再次提交抓包。随便发一个,他会提示:
然后直接输入框会有文本长度限制,只能在bp里面发包:
然后就得到了flag。
0x0F 爆破(简单)
这题可以见ctf.show爆破 我们进题看看源码:
这题想直接出来是出不来的,我们就直接进行脚本爆破。这里附上脚本:
import hashlib
for i in range(1,10000):
md5 = hashlib.md5(str(i).encode('utf-8')).hexdigest()
if md5[1] != md5[14] or md5[14]!= md5[17]:
continue
if(ord(md5[1]))>=48 and ord(md5[1])<=57 and (ord(md5[31]))>=48 and ord(md5[31])<=57:
if((int(md5[1])+int(md5[14])+int(md5[17]))/int(md5[1])==int(md5[31])):
print(i)
然后就有了两个哈希值,直接输入pass就可以过了。一个是422,一个是1202。
输入payload就得到了flag。
0x10 robots(简单)
根据题目以及进题的提示,知道是robots协议了:
进/robots.txt访问一下,发现了/fl0g.php。进去访问就得到flag了。
0x11 Don't touch me(简单)
信息搜集题。进去看源码,找到了/2.php:
进去访问,又看到了不能click的按键。把disabled删了就行:
然后点一下就找到了下一个提示:
进去访问就找到了flag。
0x12 浮生日记(简单)
进题文本框试了很多方法没用。看了wp才知道要用XSS,常见的payload:
<script>alert(1)</script>
然后发现里面是需要闭合的,并且会过滤script。先闭合然后再双写script。payload:
"><scriscriptpt>alert(1)</scriscriptpt>
然后我们就发出了弹窗。然后就跳转到flag的地址/f_1__a___G.php了
然后就得到了flag。
0x13 ezupload(简单)
进题是文件上传,抓包发马:
然后图片类型改成gif传马就上传成功了。然后访问就是木马了,那我们直接上蚁剑吧:
然后就找到了flag。
0x14 php very nice(简单)
进题是个不用pop链的反序列化:
我们直接手打payload:
O:7:"Example":1:{s:3:"sys";s:13:"system('ls');";}
回显了flag.php。怕他直接执行了,我们include出来就行了,payload:
O:7:"Example":1:{s:3:"sys";s:69:"include('php://filter/read=convert.base64-encode/resource=flag.php');";}
解码后就得到了flag。(确实被执行了)
0x15 session文件包含(简单)
进题随便输入一个数据,然后进到/action.php。然后就找不到什么有用的信息了。去看了wp。说要用php伪协议读取action.php的源码,我去读取了,源码如下:
<?php
session_start();
error_reporting(0);
$name = $_POST['name'];
if($name){
$_SESSION["username"] = $name;
}
include($_GET['file']);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<a href=action.php?file=1.txt>my dairy</a>
<a href=action.php?file=2.txt>my booklist</a>
</body>
</html>
然后找到了session包含。我们在name中上传一句话木马,并且在file中包含这个文件就可以了。这个文件的目录一般在tmp中,而且命名为:sess_PHPSESSID
而这个sessid的位置,一般在cookie里面储存:
然后我们就去包含这个文件就行,payload:
action.php?file=../../tmp/sess_lr5v4rvv8t66gr4rog728smb91
发现我的木马已经被包含了,然后再去连一下蚁剑,然后在根目录找到了flag。
0x16 jwt(简单)
进题做了好久发现没有线索,我就去看了wp。发现是jwt伪造。先去下载jwtcracker这个工具,工具在:
然后注册之后会获得jwt的值。拿去解密获得密钥为SYSA:
然后拿去解密再加密一下:
然后将JWT改成这个编码后的格式:
.然后就得到了flag。
0x17 cookie欺骗(简单)
进题看到只有admin才能访问:
抓包改一下cookie
然后就得到了flag。
0x18 upload(简单)
文件上传题,进题提交之后我们抓包上传一句话木马:
然后发现他的路径是/upload/22333shell.,也就是说php被过滤了,我尝试了phtml。发现可以回显一个p。那么我们尝试一下双写绕过,然后就成功上传了php后缀的文件:
然后进行访问,发现木马已经被读入了,我们就连接蚁剑找一下:
然后就找到了flag。
0x19 干正则(简单)
进题看源码:
他是一个需要ping的源码,然后看到了@parse_str()函数。就是读取一个变量并将其转换为数组的形式,我们构造一下payload:
?id=a[0]=www.polarctf.com
发现a[0]的值确实被更改了,那么接下来就简单了,先构造一个cmd=|ls;,发现回显了flag.php,但是不能直接读取,我们尝试用读取ls的命令,payload:
?id=a[0]=www.polarctf.com&cmd=|cat `ls`;
然后在源码中找到了flag。
0x1A cool(简单)
看源码:
<?php
if(isset($_GET['a'])){
$a = $_GET['a'];
if(is_numeric($a)){
echo "no";
}
if(!preg_match("/flag|system|php/i", $a)){
eval($a);
}
}else{
highlight_file(__FILE__);
}
?>
就是简单的正则绕过,构造payload:
?a=echo `ls`;
?a=echo `cat fl\ag.txt`;
然后就得到了flag。