[ACTF2020 新生赛]Include
1,打开时,页面显示tips
2,点击tips时查看得不到flag
file=flag.php,可以试着想,flag是否在flag.php中,进行查看
3,可以了解到,这是php伪协议
file:// 协议
在下边这个链接可以了解到php伪协议
https://segmentfault.com/a/1190000018991087
简称来说,就是用来访问本地文件系统,在ctf中用来读取本地文件且不受allow_url_fopen与allow_url_include的影响
4,下一步得到
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7OTI4Zjc5N2UtOTY4MC00OTI4LTkxMTEtNTllZGUxNmU4NGJmfQo=
需要进行base64解码 就会得到flag。了解到用php伪协议来读取flag.php
5,使用base64解码
flag{a9e354a5-d208-4a6c-8a36-55e0596c341e}
https://base64.supfree.net/
[强网杯 2019]随便注
1,看到这题,想到的就是sql注入,按正常sql注入的方法去写,结果显示
发现select ,update,delete,…被过滤了
2,所以采用堆叠注入
1’;show databases;(查询数据库名)
3,查询表名
4,查看表的结构
0’;desc '1919810931114514
;#
在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符
eg. mysql> SELECT * FROM table
WHERE id
= ‘123’ ;
1919810931114514必须用反单引号括起来,但是words不需要,应该是和数据类型有关
那么查询语句很有可能是 : selsect id,data from words where id =
因为可以堆叠查询,这时候就想到了一个改名的方法,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id,结合上面的1’ or 1=1#爆出表所有内容就可以查flag啦
payload:
0’;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;desc words;#
- 再用一下一开始的操作id=1’ or 1=1#
BUUCTF-WEB-[极客大挑战 2019]EasySQL 1
-
打开网址是一个简单的登陆界面
-
简单的打量一番,这里使用万能密码即可进行注入即可得到flag
-
简单的了解万能密码
原理:SQL语句sql=“select * from user where username=’”&username&"‘and password=’"& password&’",当我们的密码填写’or’1’=‘1提交的时候,此时语句中的password等于’or’1’=‘1,那么,这条SQL语句就变成了:sql="select * from user where username=’"&username&"'and password= '‘or’1’=‘1’,然而,1=1是恒等条件,自然也就通过了程序的验证。
方法:首先我们需要在密码的最前面有一个单引号,来闭合SQL语句中的单引号,然后构造一个or,也就是或者,后面加一个恒等条件即可最简单的就是1=1,同样为了使SQL语句不出错,是来闭合程序中的SQL语句的后面的单引号的,如果我们在后面再加上一个单引号的话就会出错。
HCTF2018(代码审计)
分析过程
打开之后看见源代码有source.php,直接看source.php
看了一会代码是发现有file等,就想到了文件上传,然后看代码。
首先是有一个checkfile函数
先定义了白名单,只有source.php和hint.php。之后是一个判断是否是空和字符串的if,不是就返回false,还有一个判断,是否在白名单里的if。再往下看,
mb_substr(str1,start,[length][,[str2]]):是在str1从start开始length为长度截取字符串,str2是表示字符编码
mb_strpos(str1,str2):查找str2在str1中出现的位置
所以可以看出_page=page,之后再判断一下 _page是否在白名单中
这一步是url解码,将page解码,此时_page就是解码过的page,接下来和上面是一样的,但不同的是对 _page操作,之后又是白名单判断,是就true,不是就false。
最后就是文件上传基本操作
同时还有hint.php
解题
所以需要考虑的就是如何绕过
首先是有3个true是可以返回的,但只有最后两个是可以的。
此时可以构造第一个payload在第一个地方返回
file=hint.php?/…/…/…/…/…/…/…/…/ffffllllaaaagggg
1
第二个payload,这里第二个是进行二次解码的,第一次是发去服务器,服务器解析一次,第二次是urldecode。所以可以逆推回两次前的是%25