web
[极客大挑战 2019]EasySQL 1(sql注入)
从题目给出可以发现应该是个sql注入的知识点
先随便输入点东西看看是怎么样
从地址栏可以看出是跳转到了check.php
这里有两个参数,我们不能用转义字符来判断这个sql语句的闭合符号
当我们输入1’的时候,出现报错,所以可以判断应该是单引号的闭合方式
那我们只需要构造单引号的万能钥匙就可以
[SUCTF 2019]EasySQL 1(sql注入)
[极客大挑战 2019]Havefun 1(代码审计)
打开之后是一只猫
我们先F12看一下源代码
发现这一块是进行比较,通过get接收到的参数与dog进行比较,比较成功的话就输出flag
于是在地址栏构造/index.php?cat=dog,则
[HCTF 2018]WarmUp 1(代码审计)
先F12看一下,发现这边强调source.php,那么访问一下
跳转除了这个页面的源码
从源码中可以看到还有一个hint.php,访问看看
这个ffffllllaaaagggg应该是最后falg的文件名
class emmm
2 {
3 public static function checkFile(&$page)
4
5 {
6 //白名单列表
7 $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
8 //isset()判断变量是否声明is_string()判断变量是否是字符串 &&用了逻辑与两个值都为真才执行if里面的值
9 if (! isset($page) || !is_string($page)) {
10 echo "you can't see it A";
11 return false;
12 }
13 //检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
14 if (in_array($page, $whitelist)) {
15 return true;
16 }
17 //过滤问号的函数(如果$page的值有?则从?之前提取字符串)
18 $_page = mb_substr(
19 $page,
20 0,
21 mb_strpos($page . '?', '?')//返回$page.?里卖弄?号出现的第一个位置
22 );
23
24 //第二次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
25 if (in_array($_page, $whitelist)) {
26 return true;
27 }
28 //url对$page解码
29 $_page = urldecode($page);
30
31 //第二次过滤问号的函数(如果$page的值有?则从?之前提取字符串)
32 $_page = mb_substr(
33 $_page,
34 0,
35 mb_strpos($_page . '?', '?')
36 );
37 //第三次检测传进来的值是否匹配白名单列表$whitelist 如果有则执行真
38 if (in_array($_page, $whitelist)) {
39 return true;
40 }
41 echo "you can't see it";
42 return false;
43 }
44 }
所以要用四层目录进行构建?file=hint.php?../../../../../ffffllllaaaagggg
[ACTF2020 新生赛]Include 1(文件包含漏洞)
点击tips之后会跳转到flag.php,那么我们需要查看这个文件该怎么办呢
在这里需要用到的是php封装协议的知识
需要构造payload:/?file=php://filter/read=convert.base64-encode/resource=flag.php
这里的意思是将flag.php转换成base64编码形式之后输出出来,之后只需要再将输出来的东西解码即可
flag{938029f7-7d58-44ab-bfc9-f9923880d857}
[ACTF2020 新生赛]Exec 1(命令执行漏洞)
题目提示ping,那先ping一下本地回环地址试试看,ping了之后有返回
那我们可以在ip后面加上“|”让其依次执行多个命令,先试试看加上ls查看文件
发现该目录下只有一个index.php,那我们加上/返回上级目录看看
发现里面有个flag文件,使用cat命令去读取该文件,得到flag
flag{6d96a593-4606-45bc-8dda-ca18d9d2d7e2}
[GXYCTF2019]Ping Ping Ping 1(命令执行漏洞+代码审计)
题目提示我们直接通过地址栏来进行命令的植入,先试试看本地回环地址,发现有回显
之后进行尝试ls,可以看到该目录下面有flag文件
构造/?ip=127.0.0.1|cat flag.php之后,发现输出来的不是flag
看到这英文,猜测是空格被过滤
在命令执行漏洞钟,当关键字被过滤的时候,一般有两个绕过思路:
1.base64编码绕过
2.定义变量,拼接命令
去网上搜了一下空格被过滤之后的方法,详情见下面这个blog在CTF比赛中,命令中空格被过滤的解决方法-CSDN博客https://blog.csdn.net/a3320315/article/details/99773192跟着上面这个试了一下之后,发现flag也被过滤了
那先去另外一个index.php里面看看过滤的规则,构造127.0.0.1|cat$IFS$9index.php
可以看到里面定义了一个变量"a",所以我们可以利用a字符来绕过flag字符
构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php
查看源码即可发现flag
注意,这道题里让我知道在进行字符替换绕过的时候,顺序也很重要,比如说我替换fla$a($a=g)就可以出来flag,但是如果我替换f$aag($a=l)的时候flag就出不来
flag{d793b983-a750-491d-8e5e-ccff72c9e2a5}
[强网杯 2019]随便注 1(sql注入)
输入1之后可以看到回显,并且观察可以看到使用的get传参,接着继续试数字,发现只有1,2可以
之后尝试输入1' and '1' ='1,发现有正常回显,说明是字符型sql注入
输入1'之后报错
说明这道题目是单引号闭合,且会返回报错信息,可以尝试联合查询
但是在尝试过程中发现回显,过滤掉了下面这些关键词,那我们无法用联合查询了,只能尝试堆叠注入
构造payload:0’; show tables;#
0’是为了让前面不成立,show tables是为了显示出表名,#是为了注释掉后面的语句
发现两个表名
接下来需要构造payload去查看两个表的字段,看看能不能看出什么东西来
0'; show columns from words;#
0'; show columns from `1919810931114514`;#
推测可以得知,我们语句现在查询的都是words表里面的值,通过文本框注入id然后得到对应的data,另一张表里面的字段名字叫flag,所以flag应该在另一张表里面
由于整体的语句是查询words表里面的id,所以我们应当将1919810931114514表名字改成words表,将该表里面的flag名字改成id,这样在下次查询的时候查到的就是1919810931114514里面的flag了
0';rename table `words` to word;rename table `1919810931114514` to words;alter table words change flag id varchar(100);show tables;#
这样可以看到,我们原来的words表现在叫word,原来的1919810931114514表现在叫words,接下来正常输入1' or '1' = '1即可,这里不能输入1是因为我们不知道现在words表里面flag字段的值,于是无法查询,只能够通过构造1' or '1'='1来使得or后面恒成立来输出flag
flag{1e443f69-f46e-47f6-a6b5-8680d2f280bd}
[极客大挑战 2019]LoveSQL 1(sql注入)
先输入个万能密码试试看
ok,成功且有正常回显,接下来试试联合查询
-1' union select 1,database() #,用这句之后报错,说明是字段数量的问题,再加一个试试看
-1' union select 1,2,database() # 用这句成了,可以看到是2,3位置可以进行注入,接下来就是依次暴库暴表暴字段暴数据
-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='geek')
Basic
1 linux labs
这道题主要考查的是ssh的知识,需要远程用ssh连接上这台虚拟机。
题目中给了地址、端口、账号和密码
打开了这个网页之后其实并没有什么用。
我们需要通过主机cmd去用ssh链接
格式是:ssh -p 端口 用户名@网址
然后输入yes和密码,就成功连接上。
先用ls命令看看有什么东西没有,发现没有返回的东西,说明一开始就进去了一个空的文件夹。
这时我们可以用cd..这个命令去返回上一级
然后再用ls查看,发现一个flag.txt文件,用cat命令进行查看,就可以看到flag了
BUU LFI COURSE 11
题目中其实已经给出来了提示 LFI(Local File Include)
这就是php文件包含类型题目【程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程一般被称为文件包含】
文件包含在 php 中,涉及到的危险函数有四个: include()、include_once()、require()、require_once()。
include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。
include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入。
require:包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。
require_once:和 require 类似,不同处在于 require_once 只导入一次。
当利用这四个函数来包含文件时,不管文件是什么类型(图片、txt等等),都会直接作为php文件进行解析。在本题的PHP代码中即可看到include函数
因为文件路径可控,当输入系统的密码文件所在路径时,内容会输出出来
所以直接在url后面构造/?file=/flag即可
Crypto
1 MD5
下载这个压缩包,解压之后题目就在里面
网上搜一个一个MD5解密的网站
直接复制扔进去解密就好了
提交的时候记得加上flag{}
flag就是flag{admin1}
一眼就解密 1
这串编码中有“=”,说明应该是base64编码
Url编码1
题目提示的很清楚了,是url解密
看我回旋踢 1
看到这个题目“回旋踢”应该能够联想到凯撒密码,因为凯撒密码的关键词就是“回旋踢”“回转”之类的,而且格式是synt{},可以联想到应该是flag{},所以应该是凯撒密码,并且移动了13位,是rot13编码。
摩丝1
这个就是很明显很普通的摩斯密码了,扔到在线解密网站解密去
这道题其实有个坑,就是解密出来的都是小写,但是flag交上去的时候要全部换成大写,而且我在不同网站解密出来的竟然不一样,其他有的网站解密出来很抽象,上图解密出来的比较正常一些,应该就是答案。
password 1
这道题目太抽象了,我刚拿到一头雾水,谁能想到flag就是zs19900315呢,竟然就是首字母加上生日,这道题真的不知道怎么解释。
变异凯撒1
既然是凯撒密码,关键点就是需要找到移动的位数就行了
通过对照ASCII码可以发现第一个a和f移动了5位,第二个f和l移动了6位,第三个Z和a移动了7位,以此类推每一位都多移动一位,所以可以对照着ASCLL码把flag推算出来是flag{Caesar_variation}
Quoted-printable 1
这边先介绍一些这个编码:
任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值.例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式.
所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示.ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).
quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行(soft line break). 即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中.
由此可知简单来说的话就是三个为一组的,以“=”开头的ASCII字符编码。
Rabbit 1
根据题目可知是rabbit解码
篱笆墙的影子 1
这道题中因为答案是flag{}的格式,题目中给的依稀是可以看出来flag的,可以看出来应该是两个字母一组取前面那个,所以推测是栅栏密码
RSA1
这个说实话,就开始考验计算能力了
关于RSA相关公式
n = p * q
ø(n) = (p - 1) * (q - 1)
ed ≡ 1 mod ø(n)
c = m**e mod n
m = c**d mod n
这道题用到前三个公式就可以解出来,知道公式之后感觉就像数学题目一样。
flag{125631357777427553}
丢失的MD51
下载之后得到一段python代码
先运行一下,发现报错是因为算法之前没有编码,上网查了一下之后,发现要在第六行update的括号里面每一项后面都要加上 .encode('utf-8'),然后最后print的des也要加上个括号
然后再运行一下
得到最后一行的flag
Alice与Bob 1
先得把这两个素数给找出来
然后再去md5加密一下
得到flag