目录
你竟然赶我走
大白
N种方法解决
[ACTF2020 新生赛]Include 1
php://filter的一些学习
[ACTF2020 新生赛]Exec
[强网杯 2019]随便注
你竟然赶我走
1.下载文件,得到一张图片
2.放进010分析,在文件尾得到flag
大白
1.根据题目提示,可判断该图片的宽高不够,没有显示出来,放到010里面分析
2.因为用二进制打开的.png文件的第二行中,前四位表示的是宽度,后四位表示的是长度,所以修改图片的高度
3.重新打开图片,得到flag
flag{He1l0_d4_ba1}
N种方法解决
1.下载文件,得到一个exe文件,但是无法运行
2.把文件后缀名修改成txt
3.好像是一个图片网站,在浏览器中打开,得到一个二维码,扫码得到flag
[ACTF2020 新生赛]Include 1
1.打开环境
2.点击tips。可以发现是文件包含漏洞,昨天刚学。。该文件名为flag.php,那么flag应该就存在于此文件中,但是看源代码并没有查看到flag,猜测flag应该是在flag.php的源代码当中
3.利用php://filter伪协议,构造payload
?file=php://filter/convert.base64-encode/resource=flag.php
4。使用base64解码,得到flag。可以发现flag是被注释了
php://filter的一些学习
php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()
、file()
和 file_get_contents()
, 在数据流内容读取之前没有机会应用其他过滤器。
php://filter可以获取指定文件源码。当其与文件包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行,从而读取任意文件源代码
使用场景:
1.知道flag文件地址后,可以直接用该协议读取文件内容
2.有时候一些关键字被过滤也可以用该协议绕过
3.有的flag隐藏在注释当中,可通过此协议查看源码获取flag
格式:xxx.php?xxx=php://filter/convert.base64-encode/resource=xxx.php
利用条件:不受allow_url_include和allow_url_fopen的限制
[ACTF2020 新生赛]Exec
1.输入一个ip,看一下
2.使用bp抓包,用ls看看能不能查看文件,看到index.php
3.查看根目录,看到flag这个文件
4.使用cat查看flag
[强网杯 2019]随便注
1.打开环境
2.因为1'时报错,说明闭合符号为单引号
3.1' order by 2,得到字段数为2
4.尝试使用union联合注入,1' union select 1,2#
应该是过滤了select,不管是编码还是注释都不行,select一被禁用,联合查询和报错注入,布尔,时间盲注就都不可以使用。因此这个题使用堆叠注入。简单就是将一堆sql语句叠加在一起执行,使用分号结束上一个语句再叠加其他语句一起执行。
参考文章:sql注入之堆叠注入_Toert_T的博客-CSDN博客
学习一下show()函数MySQL show()函数详述_qq_36801966的博客-CSDN博客
show databases //列出服务器可访问的数据库
show tables //显示该数据库内相关表的名称
show columns from tablename;//显示表tablename的字段、字段类型、键值信息、是否可以用null、默认值及其他信息。
5.1’;show database; 发现行得通
6.1';show tables;
7. 1'; show columns from words; 爆words表
8. 1'; show columns from `1919810931114514`# 爆这个表
关于在这里使用 ` 而不是 ’ 的一些解释:
两者在linux下和windows下不同,linux下不区分,windows下区分。
在MySQL中 反引号 ` 用来区分保留字符与普通字符
单引号 ’ 或双引号主要用于 字符串的引用符号
反勾号 ` 数据库、表、索引、列和别名用的是引用符是反勾号 (注:Esc下面的键)
有MYSQL保留字作为字段的,必须加上反引号来区分!!!
如果是数值,请不要使用引号,要用那个反引号包裹起来
9.从之前的回显发现实际上都是words表内的,若想得到flag中的内容,需将其换为words表内的内容进行回显
换个角度来说,就是我们需要将1919810931114514表名换为words,并将flag的列名换为id
则需要以下三步:
将表名words换为其他的,类似于word1
将表名1919810931114514换为words
将列名flag换为id
并通过之前的过滤规则发现并没有过滤掉alter、rename等关键字
于是构造payload:
1' ; rename tables `words` to `word1` ; rename tables `1919810931114514` to `words` ; alter table `words` change `flag` `id` varchar(100);#
rename - 重命名 重命名表words
为word1
alter - 变更列 变更表words
中的列flag
为id
且其性质为varchar(100)
10,改变数据库结构后,使用万能密码,得到flag
1' or 1=1#