SKCTF-入门与爬坑

0x01来自:

宋志伟 信息安全2017-1

0x02签到题&Encode:

签到:关注微信公众号SKSEC,发送"give me flag"。得到flag。

ASCII :ASCII码在线转换   http://www.ab126.com/goju/1711.html#ecms

HEX : 16进制在线转换   http://www.bejson.com/convert/ox2str/

Escape : escape加密  http://tool.chinaz.com/Tools/escape.aspx

Jsfuck  :  jsfuck加密   https://www.bugku.com/tools/jsfuck/

附常见加密与编码的总结 : https://www.cnblogs.com/mq0036/p/6544055.html

0x03web:建议用火狐或者谷歌浏览器

1.你能看见flag吗:打开网页按F12直接看到flag

2.GET : 打开网址后发现代码

$get=$_GET['get'];

echo $get;

if($get == 'flag')

echo 'flag{*************}'; 

在地址栏输入?get=flag,回车得到flag;

3.找一找flag :  打开后一直弹框;鼠标右键查看源代码,发现最下边

SKCTF-入门与爬坑_第1张图片

base64解密得到flag;

4.where_are_u_from : 打开后提示 ”Please access the server from the local“ 意思就是从本地访问 f12-网络->重新载入->编辑消息头下面加上 X-Forwarded-For: 127.0.0.1   点击发送看响应得到flag;

5.JS Console : 题目给出提示控制台执行js代码;f12,调试器中看到源代码

SKCTF-入门与爬坑_第2张图片

可以看到a就是密码;控制台输入print(a)得到密码,提交得到flag;也可以直接复制源码,在return false前加了一句 document.write(a); 直接输出a的值有点麻烦;

6.locate:打开后先按f12->重新载入后,在点击flag在哪里啊; 会发现出现一个302,响应头中发现flag;base64解码得到flag;

7.成绩单:Bugku原题 https://www.cnblogs.com/hell0w/p/7906711.html

8.header:题目提醒header;查看消息头中发现flag;base64解密的password,地址栏输入?Password=e64b78fc3bc91bcbc7dc232ba8ec59e0   回车得到flag;

9.phpmd5:打开发现phpmd5漏洞

详情请见:https://blog.csdn.net/vspiders/article/details/78218512

常见漏洞;   将username和password转换成数组即可;地址栏输入  ?username[]=a&password[]=b  回车得到flag;

10.简单的sql注入:输入万能密码:' or 1='1  ,没有小红sqlmap直接跑出来;https://blog.csdn.net/qq_35304570/article/details/79358597

0x04Crypto

培根,Base64,Caesar来啦,栅栏里的爱  http://tool.bugku.com/CTF|CTF工具下载|CTF工具包|CTF教程

base一家:两次base64,一次base32,一次base16解密得flag;

仿射密码:

RivestShamirAdleman:。。。这题折磨了我一个星期没做出来。在ubantu上试了很多方法,要么乱码,要么错误。最后装了kali以后直接openssl就能就出来。附上openssl常见用法:

openssl rsa -pubin -in (文件名) -text    :提取公钥信息,

openssl rsautl -encrypt -in test -out test.enc -inkey asn1pub.pem -pubin   :  公钥加密

openssl rsautl -decrypt -in test.enc -out test.dec -inkey asn1enc.pem    :   私钥解密

openssl rsautl -sign -in test -out test.sig-inkey asn1enc.pem    :   私钥签名

openssl rsautl -verify -in test.sig -out test.vfy -inkey asn1pub.pem -pubin     :  公钥验证

这个题先从公钥提取信息,生成私钥,在进行私钥解密;穿起来就是flag;附上由p,q,e生成私钥脚本

import math

import sys

from Crypto.PublicKey import RSA

keypair = RSA.generate(1024)

keypair.p = 

keypair.q = 

keypair.e = 

keypair.n = keypair.p * keypair.q

Qn = long((keypair.p-1) * (keypair.q-1))

i = 1

while (True):

    x = (Qn * i ) + 1

    if (x % keypair.e == 0):

        keypair.d = x / keypair.e

        break

    i += 1

private = open('private.pem','w')

private.write(keypair.exportKey())

private.close

https://www.anquanke.com/post/id/84632    https://www.freebuf.com/articles/others-articles/161475.html

0x05Misc

1.Ez密码:题目提示密码为17年以后的8位日期当密码;直接使用ARCHPR暴力破解

SKCTF-入门与爬坑_第3张图片

解压出图片查看属性->详细信息得到flag;常见图片隐写术总结:https://blog.csdn.net/riba2534/article/details/70544076

2.小猪佩奇:stegsolve打开(要有java环境);点击下方箭头更改颜色通道

SKCTF-入门与爬坑_第4张图片

扫码得flag;

3.Fonts:winhex打开,在下方发现flag

SKCTF-入门与爬坑_第5张图片

4.miao:这题做的最痛苦了;根据题目提示,发现zip缺少文件头,添加文件头后发现损坏的图片,winhex打开后对照jfif文件格式发现16进制数据错位。彩笔的我不会py,最后琢磨了几天用notepad++手动一列一列的还原。。。。打开图片即得flag;

5.ZipWithCrypto:zip伪加密,winrar打开点击工具修复zip文件即可,记事本打开flag发现加密字符串。此案栅栏密码将两个花括号匹配好,然后凯撒密码解密得flag;https://blog.csdn.net/kajweb/article/details/76474476   https://blog.csdn.net/pdsu161530247/article/details/73612910

6.Crack it:省赛题;shadow文件破解:先了解一下shadow文件;kali下有专门得破解工具;执行john -show shadow;

SKCTF-入门与爬坑_第6张图片
flag就是hellokitty

不得不说kali好用;

7.啊哒:jpg图片,kali下binwalk跑一下发现隐藏压缩包,

SKCTF-入门与爬坑_第7张图片

binwalk -e ada.jpg 分离,zip加密,在ada.jpg属性中发现16进制

SKCTF-入门与爬坑_第8张图片

转成字符串即为压缩包密码;

8.basic:很明显得像素点转换成图片,百度脚本跑一下即可;

# coding=utf-8

from PIL import Image

import re

pic = Image.new("RGB",(150,900))

f = open('basic.txt','r')

imlist = []

for i in f.readlines():

    i = re.sub('[( )\n]','',i)

    imlist.append(i)


i=0

for x in range(0,150):

    for y in range(0,900):

        s = imlist[i].split(',')

        pic.putpixel([x,y],(int(s[0]),int(s[1]),int(s[2])))

        i+=1

    print 135000-i

pic.show()

pic.save("flag.png")

9.进制转换:思路也很清晰,手动一个一个对着ASCII码表解得。。。。看了大佬wp才知道用脚本

f = open("./text.txt","r")

flag = ""

for i in range(107):

    s = f.readline()

    if s[0] == 'b':

        flag += chr(int(s[1:],2))

    elif s[0] == 'd':

        flag += chr(int(s[1:]))

    elif s[0] == 'o':

        flag += chr(int(s[1:],8))

    elif s[0] == 'x':

        flag += chr(int(s[1:],16))

print(flag)

f.close()

好好学python。。。

10.神秘的文件:打开压缩包发现flag压缩包,与logo.png。flag压缩包内也有一个logo.png。两者CRC32相同。明文攻击。将flag.zip与logo解压出来,将logo压缩,使用ARCHPR明文攻击

SKCTF-入门与爬坑_第9张图片

得到密码,winhex打开doc文件,最下方发现有flag.txt,binwalk分离找到flag文件,base64解码的flag;

0x06Reverse:

1.Re-1:打开,shift+f12搜索字符串的到flag;

2.getit:ida打开发现疑似base64加密的字符串 

SKCTF-入门与爬坑_第10张图片

题目提示这并不是flag,并且base64解不出flag,考虑base64中“=”往往是在最后的,栅栏密码解密将=移至最后,得到 U0tDVEZ7V2UxMVkwdUdldDF0fQ== 再用base64解密得flag;

3.baby:apk逆向;AK打开发现反编译失败;百度后找到答案,取出apk中classes.dex文件,用apktoolbox(吾爱破解爱盘下载)转成jar,AK打开就能看见java源码

SKCTF-入门与爬坑_第11张图片


SKCTF-入门与爬坑_第12张图片

凯撒解密即可;

4.newDriver:ida64打开f5看伪代码。

SKCTF-入门与爬坑_第13张图片

可以看到三段字符串以及加密算法。dAP6L5H`e5Tn与6异或。kOc`jS/WUGw加3(ascii码+3)第三段直接base64解密即可。穿起来即为flag;

SKCTF-入门与爬坑_第14张图片

解出flag1,flag2,base64解码即可。当初用ida6.8时会出现类似下面这种情况,并且会发现字符串是倒着得,选中按R,倒回来即可

5.Take these scores:ida打开,shift+f12 搜索到一堆md5加密字符串

SKCTF-入门与爬坑_第15张图片

https://www.somd5.com/解密即可;

6.signin:apktoolbox将dex转成jar查看源码。

SKCTF-入门与爬坑_第16张图片

如果输入与getflag中字符串逆序base64解密后一样,则成功。直接去资源文件中查找

SKCTF-入门与爬坑_第17张图片

逆序base64解密得flag;

7.Re-2:还是apk。直接拖进AK查看源码得到flagasccii码

8.shell:upx壳。PEID查壳是upx的壳,百度找工具直接能脱掉。手动脱壳总结:https://www.52pojie.cn/thread-259984-1-1.html

这个题比较简单,不需要脱壳也可以做:OD打开程序

SKCTF-入门与爬坑_第18张图片

F7,在004017A4跳转。紧接着跟着一个call。

SKCTF-入门与爬坑_第19张图片

f7进入。搜索ascii找到关键点


SKCTF-入门与爬坑_第20张图片

scanf后下断点

SKCTF-入门与爬坑_第21张图片

f9运行,输入密码12456789后断在4015C3处。f8单步运行。4015D5处函数获得输入字符串的长度,

SKCTF-入门与爬坑_第22张图片

一直f8,直到4016F1,发现strcmp字符串比较函数以及两个疑似base64加密的字符串。

SKCTF-入门与爬坑_第23张图片

base64解密的到我们输入的“123456789”以及“w0y_Fsi_gFxj64_1x_jf5d”原本以为这就是flag,叫上却错误。在分析,我们输入w0y_Fsi_gFxj64_1x_jf5d以后发现

SKCTF-入门与爬坑_第24张图片

原本输入的字符串变了。可以看到除了数字跟下划线其他字符都循环加了5。当初我是一个一个对着26个字符对出来了,刚刚反应过来是凯撒加密。。Orz。。。写完去好好研究一下手动脱壳。。

9.Play a game:老套路。OD载入,搜索字符串。

SKCTF-入门与爬坑_第25张图片

运行几遍就能发现规律,跟着提示按下回车就会随机产生一个点数,如果更提示要求的点数一样则进行下一步,否则gameover。每一次比较都有型如下图的判断。在每一个jnz下断点,修改ZF的值为1;运行即可。

最后flag是个这???!!!

SKCTF-入门与爬坑_第26张图片

百度以后发现是原题,参考他们的解法。将每一个jnz都nop填充。保存后在DOS窗口运行。一路回车敲出flag

SKCTF-入门与爬坑_第27张图片

10.Debug or Die:OD打开F9发现直接飞了。单步f8一直运行到11B1485飞了,下断点,重新载入,f9再次到这里,f7进入。

f8单步执行发现s%,输入函数??果然,随便输入123456789

SKCTF-入门与爬坑_第28张图片

发现如下代码:计算输入字符串长度,与0x2A比较,不等则跳转,修改ZF值为1。

SKCTF-入门与爬坑_第29张图片

下方发现加密代码

SKCTF-入门与爬坑_第30张图片

本来想参考上一个题将两个jnz  nop掉。结果不行。老是一步步分析吧。。

可以看到上边的算法是将我们输入的字符的16进制值进行sar 运算,下面的进行and运算。都是位运算。。头大。sar指令是算数右移运算符:例如

sar eax,1   : eax的值为7(0000 ……0111),则移位以后,eax的值为3(0000…… 0011),高位用符号位补充,即0补充。这里说一下shr逻辑右移运算符:以为是与sar唯一区别就是高位用0补充。

and:与运算

mov al,01100011B

and al,00111011B  ;执行后:

      al=00100011B

补充一下or指令

mov al,01100011B

   or al,00111011B   ;执行后:

      al=01111011B

歪日!看完还是很懵圈。。分析一下:

先是右移4位,然后与0xF进行与运算sar eax 0x4  也就是除以2^4=16;一个数的16进制除以16;那不就是这个数值的16进制值的“高位”吗。比如0x63除以16得到的整数位就是6。   

再看and。and  esi  0xF  ;  0xF的二进制就是 00001111  ;esi存放的也是输入字符的16进制值。and运算后。esi中存放的字符二进制的“高4位”肯定是0,运算结果也就是“低4位”的值。也就是说前面sar运算得到了字符16进制的“高位”,and运算得到“低位”。仔细思考一下就会明白。

那么就一步步执行,记录“高位”和“低位”。然后对着ascii码表找出flag。。。附上我当初找的图片。。。不知道有没有简单一点的方法。。。。

SKCTF-入门与爬坑_第31张图片

11.file:拖进ida,f5看伪代码

SKCTF-入门与爬坑_第32张图片

发现加密算法 :k ^ v14[k] ^ v13[k] ;   双击查看flllag与sttr_home;

sub_400EB9函数将sttr_home转换成10进制。然后异或得到16进制数。题目提醒flag是丢失文件的md5值。将得到的16进制写入文件百度找计算文件md5值得工具得到flag;

12.F5已扣,谁回谁怂:拖进ida,按f5报错。

SKCTF-入门与爬坑_第33张图片

经表哥提醒知道是花指令干扰静态编译。了解以下反反汇编https://blog.csdn.net/pianogirl123/article/details/53871397; http://www.cnblogs.com/h2zZhou/p/6637890.html

看完确实能收获很多。。回到题目,找程序中得花指令,可以看到jz跳转紧接着跟着一句毫无意义的指令:add  esp , 4  ;光标移到到条指令,按下D键(将该汇编语句转为数据),按f5,得到伪代码。

SKCTF-入门与爬坑_第34张图片
SKCTF-入门与爬坑_第35张图片

加密算法是简单的异或。v8是rand()产生的伪随机数(详情百度)。异或一边即可得到flag的ascii码值。注:要在linux系统解题,因为srand()函数在window系统和linux中产生的随机数是不同的;附上解密代码

SKCTF-入门与爬坑_第36张图片
SKCTF-入门与爬坑_第37张图片

13.ida很好用?:拖入ida,f5,逻辑很简单,但是有个calc()函数,以及4个不知道是啥的变量;

SKCTF-入门与爬坑_第38张图片

开始还以为是代码混淆,捣鼓了4,5天毫无进展。。最后问表哥说是符号执行,于是开始百度。百度有很多示例与py脚本这里不列举了。符号执行的思想是使用符号值来表示程序的输入数据,并将程序的运算过程逐指令或逐语句地转换为数学表达式,在CFG的基础上生成符号执行树,并为每一条路径建立一系列以输入数据为变量的符号表达式。。angr跑出答案。GitHub上angr的中文说明;最难的是搭建angr的环境。。。搞故了一天终于弄好。。(建议用kali,我在u版图上遇见各种毛病。。)

SKCTF-入门与爬坑_第39张图片

你可能感兴趣的:(SKCTF-入门与爬坑)