CTF超级简单入门学习笔记,主要是防止忘记和加深巩固使用的。。。。
入门篇-等级1
1.Get Source
考察点:右键查看源代码,会隐藏一些被注释的内容。2.Stegano I
考察点:图片隐藏信息,使用winhex等工具查看图片可以发现隐藏信息。3.Caesar Crypto
考察点:凯撒加密--将字母向前或向后按照字母表中顺序移动相同个字符数。工具:https://github.com/DukeoHu/CTF-program/blob/master/Caesar%20Crypto
4.ASCII
考察点:ASCII码:将字母和常用字符进行编码的方式工具:https://github.com/DukeoHu/CTF-program/blob/master/Ascii%20Decode
5.URL Encode
考察点:URL编码-将非英文字母的字符转换为ASCII码后再用16进制进行编码,使用%进行分割的编码方式工具:https://github.com/DukeoHu/CTF-program/blob/master/URL_DECODE
入门篇-等级2
1.Primes
考察点:素数-只能被1和自身整除的数思路:如果数m不能被2~根号m间任一整数整除,则m必定为素数
工具:https://github.com/DukeoHu/CTF-program/blob/master/Primes
2.Encoding
考察点:二进制转ASCII思路:注意先查看二进制数组可以被什么数整除,因为有些不是按照8个二进制数划分的
工具:https://github.com/DukeoHu/CTF-program/blob/master/Primes
3.PHP LFI
考察点:PHP本地文件包含思路:%00文件名截断
答案:https://www.wechall.net/challenge/training/php/lfi/up/index.php?file=../../solution.php%00
4.PHP 0817
考察点:PHP本地文件包含思路:switch的每一个case代码段里面都必须要设置break语句,否则会顺序向下执行每一个case代码段
答案:https://www.wechall.net/challenge/php0817/index.php?which=solution
5.Crypto Transpositions I
考察点:矩阵变换密码--将待加密文本写成矩阵的形式,然后打乱列的顺序即得到密文思路:将密文按照矩阵形式(注意调整矩阵的列数)写出,然后从左至右,从上至下进行读写
答案:写成N*2矩阵形式,再读出
6.Crypto Substitution I
考察点:古典置换加密思路:词频分析方式,根据
答案:www.puipui.com词频分析网站
7.Crypto Caesar II
考察点:凯撒加密思路:将16进制转换为10进制,再将该值不断加1直至128后,将该数字转换为ASCII值
工具:
8.Training: Crypto - Digraphs
考察点:有向图加密思路:将一个字符映射为两个字符,猜测第一个密文段表示Congratulation,然后找出其对应关系,不断猜测密文代表的含义,直至找出结果。
工具:https://github.com/DukeoHu/CTF-program/blob/master/Digraph-Crypto.py
9.Training: MySQL I
考察点:MYSQL万能密钥思路:查看SQL语句为:$query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; 未进行过滤,发现可以使用省略号进行万能密钥尝试。
使用单引号进行闭合,再配合--省略号发现不行,换成#进行省略成功。答案:admin' #
10.Training: MySQL II
考察点:SQL绕过思路:查看源代码发现username和password采用分开验证的方式:先查询username是否存在,再查询该username对应的密码MD5值是否和我们输入的密码MD5值对应
因此,我们需要使用union构造已知MD5值来进行查询,答案:123' union select 1,'admin',md5('password');#
详细思路:username一栏填写123' union select 1,'admin',md5('password');# 密码一栏填password
构成sql语句:
SELECT * FROM users WHERE username='123' union select 1,'admin',md5('password');#'
由于最后有个注释符号,所以相当于:
SELECT * FROM users WHERE username='123' union select 1,'admin',md5('password');
这句话首先通过username=123将原语句报错。因此返回的将会是第二条语句产生的信息。
而我们union select的是直接构造了用户名为admin,密码为password的md5值。这样就可以让程序误认为我们构造的信息就是它从数据库里面提取得到的信息。
验证密码正确是通过判断: $result['password'] 和 $password 是否一致。
$result['password']是用union构造的,因此password一栏填写password即可登录成功。<br>
11.Training: Register Globals
考察点:PHP参数register_globals思路:PHP参数register_globals开启时,会将用户提交的GET,POST参数注册成全局变量并初始化为参数的值。
send request?存在两个if判断,第一个用于判断能否登录成功,第二个用于返回登录状态和userid。根据题目可知存在register_globals,所以我们直接使用GET传参数,不经过第一个if判断直接传递login[0]=admin进行绕过。#
答案:www.wechall.net/challenge/training/php/globals/globals.php?login[0]=admin。
12.Training: LSB
考察点:隐写术思路:LSB最低有效位(Least Significant Bits)。
PNG和BMP图片采用无损压缩可以用于隐藏信息,JPG图片采用有损压缩无法进行LSB信息隐藏。RGB中,每一个颜色由8bit组成,仅仅变更低比特位不会对图像影响太大。#
RGB-三通道:Red,Green,Blue。
工具:stegasolove
13.Limited Access
考察点:.htaccess.htaccess分布式配置文件-Apache配置文件,负责相关目录下网页配置(修改httpd.conf,启用其中的AllowOverride已开启该配置文件)。可以实现302重定向,自定义404错误页面,改变文件扩展名,允许/阻止特定用户访问,禁止目录列表,配置默认文档
功能:文件夹密码保护,用户自动重定向,自定义错误页面,改变文件扩展名,封禁特定IP,使用其他文件作为index文件#
适用场合:内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。
答案:只对GET方式进行限制,使用POST方式代替
14.Repeating History
考察点:大量文件中查找隐藏信息的能力github相关页面下查找信息,第一部分比较明显,第二部分需要查看history提交信息找到明文信息
15.PHP myadmin
考察点:phpmyadmin常见的路径和缩写答案:pma.wechall.net