准备参加某个CTF竞赛,所以找了XCTF平台上的一些题目练练。也就随手做了个记录。只做了Web题目。(⊙﹏⊙‖∣ 逆向也不会啊)
这题还是比较简单的。考渗透测试的思路。第一步扫端口,第二部肯定扫目录。于是拿出AWVS。
发现存在robots.txt,打开 robots.txt
然后直接打开 rob0t.php 出现flag
这题还是比较坑的,不过还是学到了一些知识,正在做一个CTF中关于头文件的总结,有时间会发出来。 回归主题,这题刚开始做的时候思路就是想改下X-Forwarded-For。但是改过了后发现没卵用,测试好久终于注意到下图。
把编码调整过来后。
真是吐血……吃了burp编码上的亏,浪费那么多时间。 结合页面和注释的提示,继续添加头信息Host:www.topsec.com
继续添加信息Referer:www.baidu.com
继续添加X-Requested-With:XMLHttpRequest
在User-Agent的括号里添加MSIE 4.0;就可以了
继续在User-Agent括号里添加.NET CLR 8.0;
修改Accept-Language为Accept-Language: de-DE,de;
注意返回的头信息,有个set-cookie选项,于是设置
Cookie: login=4e6a59324d545a6a4e7a4d324e513d3d
发现没卵用,页面还是刚才那样,提示没有登陆。于是考虑是不是cookie信息不对。看了下login后面的字符,应该是加密的,从加密的形式上来看,有可能是MD5/HEX/SHA于是拿去解密,发现md5/SHA无果,HEX解密为
明显的base64,解密后为:66616c7365 于是屁颠屁颠的拿到burp,发现还是不对……这尼玛,继续试一试hex解密
终于出来了,于是直接拿着false去,发现不对,试了true也不对,于是将true先hex加密,在base64加密,在hex加密得4e7a51334d6a63314e6a553d,拿到burp里面,成功获取flag。
这题做的实在是无语了。
看这个验证码我就没想过识别。就算能识别,对我来说不可能的好吗((/ □ )没有识别验证码的经历)… 所以第一想法是绕过,于是留空,拿到burp里面去爆破。至于爆破密码,看这里:
右击另存为password.txt 载入burp里面开始爆破。全部提示:VCODE ERROR
无果。陷入了窘境。 半天没头绪,于是睡了一觉起来继续做。
重新载入的时候发现了这个。想着是不是COOKIE原因导致绕不过去,于是删除了继续爆破。发现:
不在提升验证码错误了,也就是说,验证码的验证是绕过去了。按理说这个时候应该可以爆破出Flag了,但是还是清一色的
猜测是不是user也是需要爆破点,于是把user也载入爆破了,还是无果…… 最后把user设置成ADMIN(一开始设置的admin),终于爆破成功。
真是,还分大小写……
没法做。网站GG了
这题实在是不会,于是网上找了几份wp,还是看不太明白,又请教了一些大佬,加上自己研究了一上午,终于搞定了。 首先进入首页,随手输入几个字符,然后点击submit。如图
注意地址栏object后面的参数,很明显的base64加密,于是拿去解密。结果如下:
除去了特殊字符后,大概是以下内容:
sr com.ctf.cn.User / L idt L java/lang/Integer; L name t L java/lang/String;xp sr java.lang.Integer 8 I value xr java.lang.Number ˂ xp test
这些应该就是Java对象序列化后其某些类中参数的值。且是有三个参数,类型分别是String,Integer,Number。根据页面的提示name not admin or id not 1,可以知道其中两个参数应该是name和id,并且要求name=admin&&id=1
到这里大概也就清楚这个题目的思路了。 判断类对象判断对象中的参数值序列化该对象将序列化后的结果进行Base64加密。 但是对于java的序列号相关不是熟悉,所以尝试了很多次后,发现写的脚本都没有办法用。 所以这里想到了一个办法。逆向做题。 首先我们填写admin,然后点击submit后,将后面的base64加密的密文
rO0ABXNyAA9jb20uY3RmLmNuLlVzZXIAAAAAA/kvvQIAAkwAAmlkdAATTGphdmEvbGFuZy9JbnRlZ2VyO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAPodAAFYWRtaW4=
保存为1.txt。 然后使用python进行解密到2.txt文件.脚本如下:
import sys
import base64
import os
filename_list = []
def readfile(filename):
input = open(filename)
for x in input:
print x
filename_list.append(x)
input.close()
def writefile(filename):
output = open(filename,'w')
for x in filename_list:
x = encode_base64(x)
output.write(x)
output.close()
# base64
def encode_base64(line):
line = base64.b64decode(line)
return line
readfile(sys.argv[1])
writefile(sys.argv[2])
print 'OK!'
将文件使用16进制编辑器打开
发现不知道从哪里修改。这就比较蛋疼了。 想了想,如果需要确定ID的值,那么就需要自己构造序列化,然后分析。 于是参考了一些资料(这里)后,用我可怜的Java知识,写了一个Java脚本。如下:
Test.java
package com.ctf.cn;
public class test implements java.io.Serializable
{
public String name = "admin";
public Integer id = 1;
public long number = 1234567L;
// 根据上文,所以这里创建三个值
}
Xuliehua.java
package com.ctf.cn;
import java.io.*;
public class SerializeDemo
{
public static void main(String [] args)
{
test e = new test();
try
{
FileOutputStream fileOut = new FileOutputStream("E:\\id1.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("OK!");
}catch(IOException i)
{
i.printStackTrace();
}
}
}
如上,将id的值分别改成1,2 然后输出了两个文件:id1.ser,id2.ser
打开可以发现:
Id1.ser
Id2.ser
两个文件除了74 前的那个01、 02不相同之外,其余全部相同。很明显只要将先前的2.txt中的数字也改成00 01即可。如图:
保存。 再写一个base64的加密脚本。如下:
import sys
import base64
import os
filename_list = []
def readfile(filename):
input = open(filename)
for x in input:
print x
filename_list.append(x)
input.close()
def writefile(filename):
output = open(filename,'w')
for x in filename_list:
x = encode_base64(x)
output.write(x)
output.close()
# base64
def encode_base64(line):
line = base64.b64encode(line)
return line
readfile(sys.argv[1])
writefile(sys.argv[2])
print 'OK!'
最终的加密结果为:
rO0ABXNyAA9jb20uY3RmLmNuLlVzZXIAAAAAA/kvvQIAAkwAAmlkdAATTGphdmEvbGFuZy9JbnRlZ2VyO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABdAAFYWRtaW4=
所以playload为:
http://218.2.197.232:18005/ctfobj/Login?object=rO0ABXNyAA9jb20uY3RmLmNuLlVzZXIAAAAAA/kvvQIAAkwAAmlkdAATTGphdmEvbGFuZy9JbnRlZ2VyO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABdAAFYWRtaW4=
时间关系。没有做完,剩余的题目,抽时间继续做。 做的这五题还是很有收获的。首先是头文件的相关知识掌握更加牢固,对于细心方面需要更加注意才是,对于java的序列号也有了更加深刻的认识。 做题是成长最快的~哈哈~
2017.6.16
Panda