xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Golang如何实现任意进制转换的方法示例,分享一

来源:http://www.ccidsi.com 作者:最新解决方案 人气:173 发布时间:2019-06-12
摘要:前言 python完成各进制调换的计算大全,python大全 前言 玩ctf平日际遇进制调换的主题材料,就正好做一个进制调换总计,分享出去供大家参照他事他说加以侦查学习,下边来一起探访详

前言

python完成各进制调换的计算大全,python大全

前言

玩ctf平日际遇进制调换的主题材料,就正好做一个进制调换总计,分享出去供大家参照他事他说加以侦查学习,下边来一起探访详细的介绍:

字符串与十6进制转变

比方百度ctf 一月的第2场先是个misc

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

相比轻易的一种做法正是直接调用字符串的.decode('hex')解密就能够, 但如若不用那几个函数你会怎么解呢?

一种思路便是先3个分组,解出每组的ascii值,合并下字符串即可获得,具体代码如下

import re
s='666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D'
s = re.findall(r'.{2}',s)
s = map(lambda x:chr(int(x,16)),s)
print ''.join(s)
>>>
flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

如今说了字符串的decode('hex')函数,别的还会有多个转1陆进制的函数,这里都计算一下

放手函数hex()

只可以转变拾进制整数为十陆进制,无法转字符串

binascii库的hexlify()和b2a_hex()

这多少个函数的成效是将字符串调换到十6进制,对应的解密函数分别为 unhexlify()a2b_hex()

进制互转

贰进制,八进制,十6进制转⑩进制比较轻巧,直接调用

int函数

int(str,base) //返回十进制整数,但注意此时第一个参数为字符串

相应的解密函数分别是

bin() //10进制转二进制

oct() //十进制转八进制

hex() //十进制转十六进制

但贰进制直接转16进制就须要多走一步了,先用int转10进制,在用上面提到的hex()函数将十进制转变到十6进制,比非常的短小的写法是

map(lambda x:hex(int(x,2)),['0011']) //lambda表达式

或者是

[hex(int(x,2)) for x in ['0011']] //列表解析

相应的解密函数就是

map(lambda x:bin(int(x,16)),['ef'])

最终在附上本身用python写的二个进制调换小工具,首要职能是对一组2进制,或许ascii,或十六进制转变到字符串,想必ctf上也不常会高出那类题型吧

# make by 江sir
#coding:utf-8
import re
import argparse

def bintostr(text):
 text = text.replace(' ','')
 text = re.findall(r'.{8}',text)
 s = map(lambda x:chr(int(x,2)),text) #批量二进制转十进制
 flag = ''.join(s)
 return flag

def asciitostr(text):
 if ' ' in text:
 text = text.split(' ')
 elif ',' in text:
 text = text.split(',')
 s = map(lambda x:chr(int(x)),text)
 flag = ''.join(s)
 return flag

def hextostr(text):
 text = re.findall(r'.{2}',text)
 #print text
 s = map(lambda x:chr(int(x,16)),text)
 #print s
 flag = ''.join(s)
 return flag


if __name__ == '__main__':
 parser = argparse.ArgumentParser()
 parser.add_argument("-b")
 parser.add_argument("-a")
 parser.add_argument("-x")
 argv = parser.parse_args()
 #print argv
 if argv.b:
 res = bintostr(argv.b)
 elif argv.a:
 res = asciitostr(argv.a)
 elif argv.x:
 res = hextostr(argv.x)
 print res

用法:

十六进制转字符串:

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

bintostr.py -x "666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D"
flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

2进制转字符串:

能够有空格,也得以无空格

00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100

bintostr.py -b "00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100"
/f6732410aadc037fb0cbaa00c7531373.txt

ascii转字符串

能够是空格分隔,也足以是,分隔

s='45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32'

bintostr.py -a "45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32"
-.-. - ..-. .-.. ... -... ..--.- -... ... .-..

如上实例均出自有个别ctf赛题

总结

上述正是那篇作品的全体内容了,希望本文的源委对大家的读书大概工作能拉动一定的声援,假如不正常大家能够留言交换,谢谢我们对帮客之家的帮助。

前言 玩ctf平时境遇进制调换的标题,就恰恰做贰个进制调换总计,分享出来供我们参谋学习,...

享用二个方可生成各种进制格式IP的小工具实例代码,进制ip

前言

在始发本文从前,先来介绍一下相关内容,大家都知道某个防备SS福睿斯F漏洞的代码一般选择正则来剖断访问IP是或不是为内部IP,比方上边这段网络相比较常见的正则:

if re.match(r"^192.168(.([2][0-4]d|[2][5][0-5]|[01]?d?d)){2}$", ip_address) or 

 re.match(r"^172.([1][6-9]|[2]d|3[01])(.([2][0-4]d|[2][5][0-5]|[01]?d?d)){2}$", ip_address) or 
 re.match(r"^10(.([2][0-4]d|[2][5][0-5]|[01]?d?d)){3}$", ip_address):
 raise Execption("inner ip")

很醒目那些正则有数不完难题,能够有八种方法绕过,举例

      1. 用到8进制IP地址绕过

      二. 利用十陆进制IP地址绕过

      叁. 施用十进制的IP地址绕过

      四. 种种进制组合造成的IP绕过

一般大家常见都以10进制表示的IP,其实系统是足以辨认别的进制表示的IP,例如8进制,16进制,只怕它们的结缘,更多详细情形可以参照他事他说加以考查:计算一些您大概不知晓的ip地址

据此,大家在测试系统是否有SS宝马X5F漏洞的时候,有时候必要尝试种种进制的IP组合,看看是不是能绕过系统的堤防,于是就有了本文的这么些小程序,用于自动生成各类进制方式的IP,以扶助我们实行安全测试,下边话相当少说了,来1块探访详细的介绍:

实例源码

程序代码

#!/usr/bin/env python
# -*- coding:utf8 -*-
"""
各种进制的IP表示及其它们的组合
"""
import socket
import struct
import itertools
def ip_split_by_comma_oct(ip):
 """
 :param ip:
 :return:
 """
 parsed_result = set()
 ip_split = str(ip).split('.')
 ip_split_oct = [oct(int(_)) for _ in ip_split]
 parsed_result.add('.'.join(ip_split_oct))
 return parsed_result
def ip_split_by_comma_hex(ip):
 """
 :param ip:
 :return:
 """
 parsed_result = set()
 ip_split = str(ip).split('.')
 ip_split_hex = [hex(int(_)) for _ in ip_split]
 parsed_result.add('.'.join(ip_split_hex))
 return parsed_result
def combination_oct_int_ip(ip):
 """
 :param ip:
 :return:
 """
 result = set()
 parsed_result = set()
 ip_split = str(ip).split('.')
 oct_2 = list(itertools.combinations([0, 1, 2, 3], 2))
 oct_3 = list(itertools.combinations([0, 1, 2, 3], 3))
 for n, _ in enumerate(ip_split):
 _tmp = oct(int(_))
 _delete = ip_split[:n]   ip_split[n 1:]
 _delete.insert(n, _tmp)
 result.add(tuple(_delete))
 for _ in oct_2:
 _tmp_ip = ip_split[:]
 _tmp1 = oct(int(ip_split[_[0]]))
 _tmp2 = oct(int(ip_split[_[1]]))
 del _tmp_ip[_[0]]
 del _tmp_ip[_[1] - 1]
 _tmp_ip.insert(_[0], _tmp1)
 _tmp_ip.insert(_[1], _tmp2)
 result.add(tuple(_tmp_ip))
 for _ in oct_3:
 _tmp_ip = ip_split[:]
 _tmp1 = oct(int(ip_split[_[0]]))
 _tmp2 = oct(int(ip_split[_[1]]))
 _tmp3 = oct(int(ip_split[_[2]]))
 del _tmp_ip[_[0]]
 del _tmp_ip[_[1] - 1]
 del _tmp_ip[_[2] - 2]
 _tmp_ip.insert(_[0], _tmp1)
 _tmp_ip.insert(_[1], _tmp2)
 _tmp_ip.insert(_[2], _tmp3)
 result.add(tuple(_tmp_ip))
 for _ in result:
 parsed_result.add('.'.join(_))
 return parsed_result
def combination_hex_int_ip(ip):
 """
 :param ip:
 :return:
 """
 result = set()
 parsed_result = set()
 ip_split = str(ip).split('.')
 hex_2 = list(itertools.combinations([0, 1, 2, 3], 2))
 hex_3 = list(itertools.combinations([0, 1, 2, 3], 3))
 for n, _ in enumerate(ip_split):
 _tmp = hex(int(_))
 _delete = ip_split[:n]   ip_split[n 1:]
 _delete.insert(n, _tmp)
 result.add(tuple(_delete))
 for _ in hex_2:
 _tmp_ip = ip_split[:]
 _tmp1 = hex(int(ip_split[_[0]]))
 _tmp2 = hex(int(ip_split[_[1]]))
 del _tmp_ip[_[0]]
 del _tmp_ip[_[1] - 1]
 _tmp_ip.insert(_[0], _tmp1)
 _tmp_ip.insert(_[1], _tmp2)
 result.add(tuple(_tmp_ip))
 for _ in hex_3:
 _tmp_ip = ip_split[:]
 _tmp1 = hex(int(ip_split[_[0]]))
 _tmp2 = hex(int(ip_split[_[1]]))
 _tmp3 = hex(int(ip_split[_[2]]))
 del _tmp_ip[_[0]]
 del _tmp_ip[_[1] - 1]
 del _tmp_ip[_[2] - 2]
 _tmp_ip.insert(_[0], _tmp1)
 _tmp_ip.insert(_[1], _tmp2)
 _tmp_ip.insert(_[2], _tmp3)
 result.add(tuple(_tmp_ip))
 for _ in result:
 parsed_result.add('.'.join(_))
 return parsed_result
def combination_hex_int_oct_ip(ip):
 """
 :param ip:
 :return:
 """
 result = set()
 parsed_result = set()
 ip_split = str(ip).split('.')
 hex_3 = list(itertools.combinations([0, 1, 2, 3], 3))
 for n1, n2, n3 in hex_3:
 _tmp_ip = ip_split[:]
 _tmp_2 = oct(int(_tmp_ip[n2]))
 _tmp_3 = hex(int(_tmp_ip[n3]))
 del _tmp_ip[n2]
 del _tmp_ip[n3 - 1]
 _tmp_ip.insert(n2, _tmp_2)
 _tmp_ip.insert(n3, _tmp_3)
 result.add(tuple(_tmp_ip))
 for _ in result:
 parsed_result.add('.'.join(_))
 return parsed_result
if __name__ == '__main__':
 ip = '10.1.100.1'
 ip_int = struct.unpack('!L', socket.inet_aton(ip))[0]
 ip_oct_no_comma = oct(ip_int)
 ip_hex_no_comma = hex(ip_int)
 ip_oct_by_comma = ip_split_by_comma_oct(ip)
 ip_hex_by_comma = ip_split_by_comma_hex(ip)
 all_result = ip_oct_by_comma | ip_hex_by_comma | combination_oct_int_ip(ip) | combination_hex_int_ip(ip) | combination_hex_int_oct_ip(ip)
 for _ip in all_result:
 print _ip

代码很轻松看懂,首先生成纯八进制表示的IP、纯1陆进制表示的IP,然后在分级生成十进制和捌进制混合组成的IP,1陆进制和拾进制混合组成的IP, 1陆进制八进制10进制混合组成的IP,最终输出种种组合的结果

在动用别的脚本或许工具遍历测试这几个剧本的结果,看看是不是能绕过SS福睿斯F的卫戍

①对截图:

诸如生成十.一.100.壹 那么些IP的别的各类进制方式:

图片 1

图片 2

总结

工具尽管简易,但却能给大家的渗漏测试带来便利,其实职业中有多数足以计算沉淀的地方,都足以变成工具化,不惟有能方便以往专业,还是能拉动大家知识的沉淀,加速大家自家实力升高。也愿意大家从此也能多多分享。

好了,以上便是那篇小说的全体内容了,希望本文的原委对大家的就学只怕专门的学业能带动一定的鼎力相助,要是有疑问大家能够留言调换,谢谢我们对帮客之家的支撑。

前言 在起来本文此前,先来介绍一下生死相依内容,大家都清楚有些防守SS普拉多F漏洞的...

近些年因为做事的须要,供给写个短链服务,用到了拾->6二进制,互连网找了3个,能够转移最多7六个人进制的博客,以往享受出来,下边话非常的少说了,来共同看看详细的牵线吧。

缩减数量用,无损压缩

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:Golang如何实现任意进制转换的方法示例,分享一

关键词: 68399皇家赌场

最火资讯