2017.08.14这两天开始刷ctf的题目,首先看了i春秋上边的ctf入门视频,了解到很多刷题网站,分享如下:
http://pwdme.cc/tag/idf%E5%AE%9E%E9%AA%8C%E5%AE%A4/
https://microcorruption.com/login
http://smashthestack.org/
http://overthewire.org/wargames/
http://pwnable.kr/
http://prompt.ml/0
https://ctftime.org/
https://www.xctf.org.cn/
https://www.wechall.net/challs
其中我选择了最后一个wechalls刷题入门,我按照difficulty递增来做,总结一下目前做的几个题目:
Training:Get Sourced
右键,查看源代码,拉到最下方出现: <!-- You are looking for this password: html_sourcecode -->
答案即为:html_sourcecode
Training: ASCII
根据提示的连接,打开ACSII码表,对照ASCii值,找到对应的字符、单词、、、即可得到答案
Encodings: URL
首先找一个线上解码器,将一排的编码解码得到一个URL,然后在用户登录的情况下,访问这个URL,即可得分;不需要提交answer
Training: Stegano I
一个简单的隐写,下载图片,然后用记事本打开,就可以得到结果
Training: WWW-Robots
这个过程主要是学习robots规则,robots规则主要是说明在网络爬虫或是机器人扫描时是否可以访问连接内容。
做法:
访问https://www.wechall.net/robots.txt
User-agent: *
Disallow: /challenge/training/www/robots/T0PS3CR3T
User-agent: Yandex
Disallow: *
继续访问
https://www.wechall.net/challenge/training/www/robots/T0PS3CR3T/即可得分
Training: Crypto - Caesar I
首先这个题目中的明文每次都会发生变化,切记不要把上一次的密文再次当作结果输入
这个题目考察简单的凯撒密码,将密文按照密钥0-25分别解密,找到合理的明文,即可得到答案
其中手解的不可取,代码如下(java)
public class Caesar {
public static void main(String args[]){
String string="ESP BFTNV MCZHY QZI UFXAD ZGPC ESP WLKJ OZR ZQ NLPDLC LYO JZFC FYTBFP DZWFETZY TD DNDCPPMCRXWC";
int length=string.length();
for(int i=0;i<26;i++){
StringBuilder ss=new StringBuilder("");
for(int j=0;j<length;j++){
char c=string.charAt(j);
if(c==' '){
ss.append(c);
}
else{
c=(char)(c+i);
if(c>'Z'){
c=(char)(c-26);
ss.append(c);
}
else ss.append(c);
}
}
System.out.println(ss);
}
}
}
PHP 0817
http://www.cnblogs.com/dreamofus/p/5950736.html
Prime Factory
public class PrimeFactory {
public static void main(String[] args){
int flag=0;
StringBuilder ss=new StringBuilder("");
for(int i=1000001;;i=i+2){
if(isPrime(i)&&isPrimeToo(i)){
System.out.println(i);
flag++;
ss.append(i);
}
if(flag==2){
System.out.println(ss);
break;
}
}
}
public static boolean isPrime(int a){
int mid=(int)(Math.sqrt(a));
for(int i=2;i<=mid;i++){
if(a%i==0){
return false;
}
}
return true;
}
public static boolean isPrimeToo(int a){
int sum=0;
while(a!=0){
sum+=a%10;
a=a/10;
}
return isPrime(sum);
}
}