Bugku 部分WP

 

Misc

图穷匕见
这题主要学习了kali下gnuplot的使用
下载得到
在这里插入图片描述
binwalk分离不出东西,用winhex看到文件尾部有一堆
在这里插入图片描述
应该是十六进制,原文件剪切出来保存为txt文件,用notepad++打开,plugins->converter->hex->asc||
得到
在这里插入图片描述
应该是要画图,用notepad++去掉,和() Ctrl+F,这一步是为了符合kali下gnuplot的格式
kali打开gunplot ,使用命令plot 1.txt得到
在这里插入图片描述
扫码得到flag{40fc0a979f759c8892f4dc045e28b820}
参考https://www.cnblogs.com/zaqzzz/p/9469828.html

QAQ
这道题主要学习STEGOSAURUS的使用
题目给的cipher.txt可得
FSAnRAIzNlMjPQMjNyBJNTs6NlIFPFIqDDVTJy0zGE8rKxZBJDIrJkYoPUQML1M3MDYJZTElFyI7
UzE6DTtSNxckNDw2Mxk9Jzc=
下载得到QAQ文件,winhex打开
在这里插入图片描述
有这个判断与python有关,后缀名改为.pyc,反编译一下得到
在这里插入图片描述
cypher转base64并保存为十六进制,再通过python的eval()函数转为asc||码
python脚本为

cyp=[21, 32, 39, 68, 2, 51, 54, 83, 35, 61, 3, 35, 55, 32, 73, 53, 59, 58, 54, 82, 5, 60, 82, 42, 12, 53, 83, 39, 45, 51, 24, 79, 43, 43, 22, 65, 36, 50, 43, 38, 70, 40, 61, 68, 12, 47, 83, 55, 48, 54, 9, 101, 49, 37, 23, 34, 59, 83, 49, 58, 13, 59, 82, 55, 23, 36, 52, 60, 54, 51, 25, 61, 39, 55]
key = 'LordCasser'
cipher = ''
for i in range(74):
    cipher += chr(ord(key[i % len(key)]) ^ (cyp[i]))

print cipher
得到
YOU ARE FOOLED
THIS IS NOT THAT YOU WANT
GO ON DUDE
CATCH THAT STEGOSAURUS

 

可知是用STEGOSAURUS进行隐写,具体方法参考
https://www.cnblogs.com/ECJTUACM-873284962/p/10041534.html
把QAQ.pyc放入kali里解一下即可得到
在这里插入图片描述

神秘的文件
这题学习到了怎么使用archpr进行明文攻击

下载得到rar文件
需要密码,通过archpr判断其为rar伪加密
使用winrar修复
winrar解压修复后的文件,发现一个加密文件夹和一张png图片
将png文件压缩,用archpr进行明文攻击
在这里插入图片描述
得到word文档和logo图片
binwalk分解word文档,在flag.txt中找到base64加密的flag,解密即可得到flag
思考:
1.伪加密文件可以使用winrar进行修复
2.加密文件中存在和外围文件夹中相同的文件时,可以考虑将该文件压缩成与加密文件同格式的文件,使用archpr进行明文攻击
3.所有的压缩和解压缩都要用winrar操作,要不然明文攻击会失败

一枝独秀
winhex打开,得知是一个zip
修改后缀名,打开得到一枝独秀.zip
ARCHPR暴力解密得到密码为12345678
在这里插入图片描述
解压得到一堆jpg图片,发现第81号大小与其他图片不一致
在这里插入图片描述
打开属性看到
在这里插入图片描述
这个flowers后面应该有用
使用jphs05打开flowers(81).jpg
在这里插入图片描述
使用seek,密码为上面提到的flowers
保存为1.txt
打开1.txt,发现PK,可知这是zip文件
在这里插入图片描述
将其保存为1.zip
打开得到参悟佛法.txt
打开得到
在这里插入图片描述
这是与佛论禅加密
在此处进行解密
http://www.keyfc.net/bbs/tools/tudoucode.aspx
注意,把佛法写在下面的框中,再点击参悟佛所言的真意,在上面的框中得到

H-hDs10OZL3lhIZZbeRSbbbVRZNm32W2X33mGm3Txt999RdV9hx0

  

使用栅栏解密得到

HINT-ZmxhZ3tDb29seW91R290SXROb3dZb3VLbm93VGhlRmxhZ30

  

把HINT后面的东西拿去做base64解码即可得到flag

不简单的压缩包
binwalk分离出两个压缩包,分别存有flag.swf和tingshuo.txt
其中一个用ARCHPR跑出来密码为0
得到tingshuo.txt,打开提示密码有50位
从大佬那儿得知这50位的密码全是一样的
经测试,密码为50个a
打开得到flag.swf,是一个游戏
用JPEXS Free Flash Decompiler打开
搜索player,进到该处的代码段
发现在此处的k有问题
在这里插入图片描述
拿出来做一个base16的解码即可得到flag

WEB

秋名山老司机

#!/usr/bin/python2.7
#coding:utf-8
import re
import requests
import sys;
reload(sys);
sys.setdefaultencoding("utf8")
s = requests.Session()
r = s.get("http://123.206.87.240:8002/qiumingshan/")
searchObj = re.search(r'^<div>(.*)=\?;</div>$',r.text,re.M | re.S)
# ^匹配字符串开头 $匹配字符串末尾
#  (.*) 第一个匹配分组,.* 代表匹配除换行符之外的所有字符。
'''
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释
'''
d = {
	"value":eval(searchObj.group(1)) #执行找到的第一组
}
r = s.post("http://123.206.87.240:8002/qiumingshan/",data=d)
f = open("aa.txt",'w')
f.write(r.text)
f.close()

  

速度要快

import base64
import requests
import re
import sys;
reload(sys);
sys.setdefaultencoding("utf8")
url = "http://123.206.87.240:8002/web6/"
r = requests.Session()
s = r.get(url)
flag = s.headers['flag']
mid = base64.b64decode(flag)
#print mid
mid = mid.decode()
#print mid.split(':')[1]
flag = base64.b64decode(mid.split(':')[1])
#print flag
data = {'margin':flag}
#print data
print r.post(url,data=data).text

 

前女友
题目如下

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){
        if(!strcmp($v3, $flag)){
            echo $flag;
        }
    }
}
?>

 

payload为?v1[]=1&v2[]=2&v3[]=1
两个数组的哈希值为0
php5.3以后的版本strcmp函数将数组与字符串比较时,返回0

login1SKCTF
sql约束,注册时账号为admin 1,密码Aa12345,即可登录

你从哪里来
在这里插入图片描述
抓包,将referer改成https://ww.google.com即可得到flag
在这里插入图片描述

MD5 collision
两个不同的值MD5后却相同即成为md5碰撞
payload为http://123.206.87.240:9009/md5.php?a=s214587387a
常用的碰撞的MD5:

0e开头的md5和原值:

s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020

 

程序员本地网站
在这里插入图片描述
抓包构建X-Forwarded-For头为127.0.0.1即可得到flag
在这里插入图片描述

数组返回null绕过
源代码

<?php
$flag = "flag";

if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
echo 'You password must be alphanumeric';
else if (strpos ($_GET['password'], '--') !== FALSE)
die('Flag: ' . $flag);
else
echo 'Invalid password';
}
?>

 

以下文字来自https://hackfun.org/2018/01/09/CTF%E4%B8%AD%E5%B8%B8%E8%A7%81PHP%E7%89%B9%E6%80%A7%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#15-strpos%E6%95%B0%E7%BB%84%E7%BB%95%E8%BF%87NULL%E4%B8%8Eereg%E6%AD%A3%E5%88%99-00%E6%88%AA%E6%96%AD

strpos()找的是字符串,那么传一个数组给它,strpos()出错返回null,null!==false,所以符合要求.
那为什么ereg()也能符合呢?因为ereg()在出错时返回的也是null,null!==false,所以符合要求.

PHP_encrypt_1(ISCCCTF)
密文

fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=

 

<?php
function encrypt($data,$key)
{
    $key = md5('ISCC'); //key=729623334F0AA2784A1599FD374C120D
    $x = 0;
    $len = strlen($data);
    $klen = strlen($key); //klen=32
    for ($i=0; $i < $len; $i++) { 
        if ($x == $klen)
        {
            $x = 0;
        }
        $char .= $key[$x]; 
        $x+=1;
    }
    for ($i=0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    }
    return base64_encode($str);
}
?>

  

解密脚本

#coding:utf-8
s = [0x7d ,0x1e ,0x1a ,0x1d ,0x6c ,0x2e ,0x14 ,0x26 
,0x18 ,0x57 ,0x27 ,0x45 ,0x47 ,0x13 ,0x2a ,0x1e 
,0x18 ,0x42 ,0x28 ,0x1b ,0x1e ,0x1f ,0x57 ,0x5b 
,0x17 ,0x28 ,0x2b ,0x47 ,0x12 ,0x16 ,0x27 ,0x55 
,0x18 ,0x16 ,0x1a ,0x2d ,0x16 ,0x30]

key= '729623334F0AA2784A1599FD374C120D'
key = key.lower()

a = ''
for i in range(38):
    a += chr((s[i]-ord(key[i%32]))%128)
print a

 

posted @ 2020-05-14 19:01  山野村夫z1  阅读(629)  评论(0编辑  收藏  举报