【问题标题】:Get bytes of encoded non-printable string获取编码的不可打印字符串的字节
【发布时间】:2015-07-11 16:29:43
【问题描述】:

当我用sqlmap 和--hex 键转储表条目时,我正确地获得了密码哈希字节,但powershell 将这些字节表示为字符串。所有不可打印的字符都被转义,我得到这些字节为\\?e1\n\\?dc9I\\?baY\\?ab\\?beV\\?e0W\\?f2\x0f\\?88>。如何取消转义此字符串以从中获取原始字节?

【问题讨论】:

    标签: powershell escaping sqlmap non-printing-characters


    【解决方案1】:

    从字符串到字节将取决于它是否是每个字节的字符串,如果是这样试试这个:

    # simulated output as a byte per string
    $str = [string[]][char[]][byte[]](0xE1,0x0A,0xDC,0x39,0x49,0xBA,0x59,0xAB,0xBE,0x56,0xE0,0x57,0xF2,0x0F,0x88,0x3E)
    
    # convert to bytes
    $str | Foreach {[byte][char]$_}
    

    如果是单个字符串,试试这个:

    # simulated output as a single string containing all the bytes
    $ofs=''
    $str = [string][char[]][byte[]](0xE1,0x0A,0xDC,0x39,0x49,0xBA,0x59,0xAB,0xBE,0x56,0xE0,0x57,0xF2,0x0F,0x88,0x3E)
    
    # convert to bytes
    $str.ToCharArray() | % {[byte]$_}
    

    【讨论】:

    • 对不起,如果我没记错的话,您将字节转换为字符串,但在我的情况下,我需要相反的。我知道数据库中的值为E10ADC3949BA59ABBE56E057F20F883E,它被sqlmap成功转储为十六进制。但是 powershell 在命令行中表示它,例如\\?e1\n\\?dc9I\\?baY\\?ab\\?beV\\?e0W\\?f2\x0f\\?88>。我需要从第二个值中获取第一个值。
    • 在我看来,第一个值在 shell 中表示为 ASCII 字符。此字符串中有不可打印的字符,因此它们以某种方式编码并出现第二个值。问题是——这种编码是什么?
    • 你从中得到了什么输出:sqlmap --hex <rest of your params> | Foreach {$_.GetType().FullName}
    • 作为输出,我有很多 System.String 行
    • 如果输出是 System.String,试试这个。 $str = sqlmap --hex <rest of your params> ; $str.ToCharArray() | Foreach { [byte]$_ }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多