lundi 28 décembre 2020
Get Guarnateed DA50+ for %domain%
Get an amaazing Domain Authority score above 50 for your website and
increase sales and visibility in just 30 days
https://www.str8creative.co/product/moz-da-seo-plan/
Service is guaranteed
Regards
Mike
Str8 Creative
support@str8creative.co
mercredi 23 décembre 2020
re: I need to make a website`s ranks go down
Yes, it is possible, with our service here
https://negativerseo.co/
for further information please email us here
support@negativerseo.co
thanks
Peter
vendredi 18 décembre 2020
Our most powerful SEO Ultimate Plan
Getting Top 10 Position in Search Engines is a Must for every Website if
you are re@lly serious*to do Online Business. If you are not in top 10 it
means you are getting only 5% of visitors for that particular keyword.
Please find more information on our plan here:
https://str8creative.co/product/seo-ultimate/
thanks
Lynard
support@str8creative.co
lundi 7 décembre 2020
re: Rank top 5 in the Google maps
Did you know that when someone is looking for a search term on their
phones, the Gmaps listings its what pop up first in the results?
Stop losing all that visibility and let us boost your G listing into the
tops for local terms
https://www.str8creative.co/product/1500-gmaps-citations/
thanks and regards
Mike
support@str8creative.co
vendredi 4 décembre 2020
Buy quality business traffic for blogger.com
Do you want more quality visits engaging on your website?
Increase ranks and sales swith our business website traffic
Please find more information about our service here
https://basedbusinesstraffic.co/
thanks
Peter
lundi 30 novembre 2020
Guaranteed Domain Authority 50/100
Here is how we can do it
https://www.str8creative.co/product/moz-da-seo-plan/
Regards
Mike
Str8 Creative
support@str8creative.co
jeudi 26 novembre 2020
re: I need to make a website`s ranks go down
Yes, it is possible, with our service here
https://negativerseo.co/
for further information please email us here
support@negativerseo.co
thanks
Peter
jeudi 19 novembre 2020
re: need unique domains backlinks
Do you mean that you want 1 backlinks from 1 domain? unique domains links
like this?
yes, we offer that here
https://str8creative.co/product/unique-domains-links/
thanks and regards
Mike
support@str8creative.co
dimanche 25 octobre 2020
re: re: Boost SEO with quality EDU backlinks
1000 Edu blog backlinks to improve your backlinks base and increase SEO
metrics and ranks
http://www.str8-creative.io/product/edu-backlinks/
Improve domain authority with more .edu blog backlinks
Unsubscribe from this newsletter
http://www.str8-creative.io/unsubscribe/
mardi 20 octobre 2020
Domain Authority 50 for your website - Guaranteed Service
cent
for only 150 usd, you`ll have DA50 for your website, guaranteed
Order it today:
http://www.str8-creative.co/product/moz-da-seo-plan/
thanks
Alex Peters
jeudi 1 octobre 2020
re: please send me the Facebook traffic offer
otabagismonoreply
here it is, social website traffic:
http://www.mgdots.co/detail.php?id=113
Full details attached
Regards
Johnny Jakes �
Unsubscribe option is available on the footer of our website
samedi 26 septembre 2020
Domain Authority 50 for your website - Guaranteed Service
cent
for only 150 usd, you`ll have DA50 for your website, guaranteed
Order it today:
http://www.str8-creative.co/product/moz-da-seo-plan/
thanks
Alex Peters
mardi 22 septembre 2020
Three Gaming Interfaces To Pay Attention To
DEAD SPACE (PS3)
In the horror-fiction game Dead Space, the interface is something to pay special attention to. The character's (Isaac Clarke) main statuses are disposed in a very strategic way: the life meter is located on his back in the shape of a spinal light, the weapon ammunition is showed as a small number when you aim the gun and, finally, the game has an interesting resource that is a luminous laser to help you easily locate the way the character must go (and it saves time in the complex scenario maze).
HERO (Atari)
This one is a relic from the beginning of the video-gaming era. HERO is an interesting case of user experience (UX) and interface with very limited constrols. Atari's joystick has only one button and one directional stick; with only two resources, HERO's designers implemented a wide range of possibilities: when you press the red button in the joystick the character uses its laser vision to kill enemies; by pressing down the control stick the character launches a dynamite do open walls and, finally, when you hold the control stick up the character flies using a jetpack. A very rich interface and UX created using minimal resources.
Entwined (PS4)
One of my favorite indie games Entwined is a great case of interface and usability. All the gameplay is based on how you can manage the two control sticks from PlayStation's joystick. During the whole experience, you must control the two mystic entities by only using circular movements; the user experience is focused on coordinating two different positions simultaneously (a challenge to your dexterity). Entwined is an incredibly created game, using only circular movements in two control sticks, a master class of game design.
On the three cases related in the post, we can clearly see the ideas of how games must strategically use concepts from the user experience field. To finish this conversation I want to share some content from the site nForm about this subject:
"The user experience is not one simple action – it is an interconnected cycle of attempting to satisfy hopes, dreams, needs and desires. This takes the shape of individuals comparing their expectations to the outcomes generated by their interaction with a system. Managing expectations then becomes key to successfully providing a satisfying "return on experience" that delights users and generates shared, sustainable value".
#GoGamers
lundi 21 septembre 2020
An Apology And A Heads Up.
I was killing time yesterday, checking my blog reading list and so on, when it occurred to me that it had been ages since I had last been notified of a blog comment that needed approval. These are comments that have either been tagged as potential Spam by the system or were made more than three days after a post was published.
It took a minute to sort out the new version comment approval tab and figure out why I hadn't received, or at least seen, any notices. To my dismay, in addition to several dozen Spam comments, there were about two dozen actual comments, some as old as July. Ooops! So, I went through, approving and replying. All caught up now.
I have now made a note to myself to check the list daily and I apologise to all those who left a comment on a page or an older post and did not get answered or at least published.
Over the last few days, preparations for the approach of another Hurricane have taken precedence over other activities so there is not much to post about. These days, power outages seem to be the inevitable result of having a Hurricane or even a Post Tropical storm blow through so if I disappear for a few days, fear not, all the hatches are battened and we will be hunkered down, snacking and reading, maybe even playing a game, until the power is restored.
Frost warning for the morning, tropical storm warning for the afternoon. Ohhhkay. See you on the other side.
mercredi 16 septembre 2020
1500 google maps citations cheap
http://www.str8-creative.io/product/1500-gmaps-citations/
regards,
Str8 Creative
samedi 12 septembre 2020
Planet X3 - Review Of A New Real Time Strategy Game For The IBM PC
Title Screen VGA |
Read more »
Black Friday Sale And So Much More....
lundi 7 septembre 2020
Domain Authority 50 for your website - Guaranteed Service
cent
for only 150 usd, you`ll have DA50 for your website, guaranteed
Order it today:
http://www.str8-creative.co/product/moz-da-seo-plan/
thanks
Alex Peters
vendredi 4 septembre 2020
Movie Reviews: Ready Player One, Game Night, Three Billboards Outside Ebbing Missouri, The Phantom Thread, Loving Vincent
Sorry guys; five disappointing movies ...
Ready Player One: From Steven Spielberg, this is a shallow, uninteresting movie is about a guy who plays in a virtual world looking for three Easter eggs, or "keys", so that he can gain ownership of the company that owns the virtual world. While he is at it, others are also looking for the keys, one of whom is a woman who joins him as love interest (along with some other guild members), as well as certain high-financed players backed by people who are willing to kill you in the real world if they discover who you are and that you are a competitor.
Within five minutes of the start of the movie I found myself not caring about the boy or anyone else, since there is zero character development. Astonishingly, the amount I cared continued to drop as the movie went along. I didn't think that was possible, since I already didn't care at all, but I managed to continue to care less and less. I eventually figured out that this was because the score was very good. It cued me into thinking, every once in a while, that something that I might care about was about to occur. Each time, however, this never happened.
The amusement of the movie is supposed to come from a) watching other people play video games, which is a colossal bore (unless the player knows how to fill the time with snarky commentary, as people often do on YouTube), and b) seeing hundreds of throwbacks to 1980s video games and fiction. Unlike recent media in which this worked, such as Stranger Things and even Super 8 to an extent, it did not work here. I didn't get 90% of the references, and, anyway, simply seeing references on screen is not what made those other media good; the other media had good stories. And, I guess, we are supposed to be amused by c) the suspense as to whether the main character will solve the rather obvious and uninteresting puzzles and ultimately find the keys and triumph. Duh.
There is not a scrap of emotion in the entire movie. Someone gets killed at one point, but it's someone who we were barely introduced to and who is not shown as having any emotional connection to the main character. I am really in shock at this. This is the emotionally manipulative director who brought us Jaws? E.T.? Shindler's List? Bridge of Spies?
Whatever. I guess, while it is a useless and dull movie, it is not particularly offensive, at least. Oh wait, it is: at the end of the movie the narrator tells us that we shouldn't be spending all of our time playing video games / in virtual reality, but should instead interact with each other more in the real world. Thanks for that very important message; never would have known that.
One more thing that irritated me: T.J. Miller played the exact same character in this movie that he played in Silicon Valley. I liked it in Silicon Valley, but it was pretty out of place here.
Game Night: This is ninety minutes of one joke, the kind of joke that is funny only if it comes once, unexpectedly, in the middle of an otherwise serious situation, but is not funny when it comes repeatedly for ninety minutes. This is a farcical remake of The Game (1997, Michael Douglas). Instead of a strange combination of gaslighting, pursuit, and trying to figure out what is going on as the terror mounts, in this movie the terror happens, but everyone keeps making stupid jokes. It's supposed to be funny, because they keep making light of things while bad things happen; that's the one and only joke, really. The acting, directing, and cinematography were fine. Jason Bateman and Rachel McAdams are always cute.
The movie that did this well is The Man Who knew Too Little (1997, Bill Murray), which was a cute and silly movie. I was appalled enough at this movie to happily walk outside the movie theater twice to answer phone calls (I had it on vibrate, guys). If my friends hadn't been with me in the theater, I would have gone home and not gone back in to the theater to finish the movie. In the movie's defense, my friends liked it. They said that they like to see a mindless, silly movie once in a while (I think that's a slight directed at me and my movie choices).
Three Billboards Outside Ebbing Missouri: This is a well-acted, grim piece of midwest Americana. Mildred's (Fances McDermott) daughter was raped and murdered several months ago, but she hasn't heard anything from the police who are busy (according to her) chasing and shooting blacks who aren't really doing anything. So she puts up some billboards that pointedly call out the chief of police (Woody Harrelson) in a low-trafficked area. What makes it interesting is that a) she is actually friends with the chief of police, b) the chief is dying of cancer and should really not be at work, and c) the rest of the police dept doesn't take kindly to this, especially one lunatic racist violent hotheaded police creep. Things come to a boil, especially after the police chief shoots himself.
This movie is relentlessly depressing, representing a lot of the worst aspects of American prejudice, violence, despair, and hatred. Just about nobody supports Midred, not even her son. Interestingly, the lunatic police guy actually makes a kind of (unbelievable) change around two thirds into the movie. This should have given us a bit of hope. However, the movie ends just as bleakly and miserably as it started.
Other than being relentlessly depressing, what actually ruins the movie for me are the multiple acts of outrageous criminal behavior performed by multiple people on multiple occasions, some of it incredibly brutal and most of it performed in sight of multiple witnesses. These acts are done and never have repercussions. And I'm not saying that the bad guys weasel their way out of repercussions, I'm saying that the movie doesn't seem to believe that any reactions by the witnesses or police is expected. What the hell? Is this a video game? While I expect to sometimes find injustice in the system, the system still exists; treating violence like it's just a video game broke the reality of the movie for me.
The movie has compelling performances and some good ideas, but it's ultimately not realistic enough to recommend.
The Phantom Thread: Daniel Day Lewis gives another astounding performance as Reynolds, a dressmaker / bachelor / bully and all around a**hole in 1950s London. He is joined by other great performances by Vicky Krieps, Lesley Manville, and everyone else in this beautifully shot and artfully scripted period piece about a dressmaker who obsessively creates beautiful dresses, but only if his cadre of assistants take care of his other needs and none of them interrupts his "solitary genius" thinking. This genius is, apparently, sufficient excuse for everyone to give him his way, and for him to throw toxic vitriol at anyone who expresses any kind of opinion, presence, or personality. Like a spoiled baby, as one of the other main characters eventually says.
Krieps plays a waitress, Anna, who is drawn to this bully and who follows him to London to be a dress model and eventually a lover. She falls deeply in love with him - because he is such a genius - and even goes and does some of his bullying for him, both - because he is such a genius - and because she hopes he will one day fall in love with her and allow her to butter her toast in his presence without cursing her out. Even taking into account that this is the 1950s, she is really pathetic; in the first two thirds of the movie, not a moment is shown where she has a relationship with anyone else but him. No family? No friends or neighbors at all?
SPOILERS follow, because really you shouldn't watch this movie, and if you do you should be prepared for what happens.
Anna has a little strength in her, just enough to keep wanting him to love her. And so, one day after she suffers great abuse from him, she poisons him, and he falls sick and can't work for the next few days he is too sick to abuse her, so she is happy. And then, he comes back from his illness and proposes to her.
Okay ... but maybe he doesn't know that she poisoned him?
After the marriage, things go back to as they were, obviously, and he begins to heap abuse at her again until one day she overhears him complaining about how he doesn't want her around as she is disrupting his work. So she poisons him again, and this time he knows it and goes along with it. And he loves her.
And that's the movie. Okay...
So this is a sick, toxic (literally) relationship that works for both of them. She is only happy when he is poisoned and helpless, and he, despite his passion and perfection for work is apparently only able to love her when his work is taken from him and he is poisoned and helpless. Apparently he makes the choice to let her poison him. Perhaps he really doesn't want the endless pressure of being a genius after all? It's hard to say, as the screenwriter leaves it a mystery.
Like Whiplash, I recognize great performances and interesting screenplay, but I can't watch it. Who really wants to watch two hours of repulsive people, where the main character is an abusive, horrible person? A little bit of it in a movie adds color. You know that the scriptwriter threw it in for you to not like the abusive character. But, if the whole movie is about an abusive character who doesn't learn the error of his ways, you get the impression that the scriptwriter thinks that we should be entertained by it, or even sympathetic to this toxic white privileged male jerk.
But I wasn't. And I wasn't. I was simply repulsed. And the perfect "solitary genius" who is too important to be bothered with having to be nice to people is a myth.
Loving Vincent: Like a number of other animations I have reviewed, this work is one of astounding, gorgeous animation but also utterly boring. The plot, such as it is, is ... um ... well, there isn't one. A police officer wanders around trying to deliver a letter and asks a few questions about how Van Gogh died. It is all shots, and scenes, and music, and flaccid unimportant dialog. And nothing happens and there are no characters.
lundi 31 août 2020
$$$ Bug Bounty $$$
A bug bounty program, also called a vulnerability rewards program (VRP), is a crowdsourcing initiative that rewards individuals for discovering and reporting software bugs. Bug bounty programs are often initiated to supplement internal code audits and penetration tests as part of an organization's vulnerability management strategy.
Many software vendors and websites run bug bounty programs, paying out cash rewards to software security researchers and white hat hackers who report software vulnerabilities that have the potential to be exploited. Bug reports must document enough information for for the organization offering the bounty to be able to reproduce the vulnerability. Typically, payment amounts are commensurate with the size of the organization, the difficulty in hacking the system and how much impact on users a bug might have.
Mozilla paid out a $3,000 flat rate bounty for bugs that fit its criteria, while Facebook has given out as much as $20,000 for a single bug report. Google paid Chrome operating system bug reporters a combined $700,000 in 2012 and Microsoft paid UK researcher James Forshaw $100,000 for an attack vulnerability in Windows 8.1. In 2016, Apple announced rewards that max out at $200,000 for a flaw in the iOS secure boot firmware components and up to $50,000 for execution of arbitrary code with kernel privileges or unauthorized iCloud access.
While the use of ethical hackers to find bugs can be very effective, such programs can also be controversial. To limit potential risk, some organizations are offering closed bug bounty programs that require an invitation. Apple, for example, has limited bug bounty participation to few dozen researchers.
Related articles
- Hacking Tools Name
- Best Hacking Tools 2020
- Hacking Tools Windows 10
- Tools 4 Hack
- Hacking Apps
- Hacking Tools For Games
- Hacking Tools Github
- Hacker Tools Mac
- Hacking Tools Kit
- Hacking Tools
- Pentest Tools
- Pentest Tools Website
- Hackrf Tools
- Pentest Tools Framework
- Pentest Tools Nmap
- Hacker Tools Free
- Hack Tool Apk No Root
- Hacking Tools Name
- Hacker Tools 2019
- Pentest Reporting Tools
- Ethical Hacker Tools
- Hacker Hardware Tools
- Tools For Hacker
- Pentest Tools Port Scanner
- Hacker Tools 2019
- Hacking Tools Name
- Hacker Tools For Ios
- Hack App
- Hacking Apps
- Hacker Techniques Tools And Incident Handling
- Hack And Tools
- Hack Tools Mac
- Hacking Tools Online
- Hacks And Tools
- Hack Tools
- Hacker Tools 2019
- Hacking Tools Online
- Hacking Tools Free Download
- Black Hat Hacker Tools
- Hack Tools For Pc
- Hacker Tools For Mac
- Top Pentest Tools
- Hack Tools Github
- Hackers Toolbox
- Hacking Tools Pc
- Install Pentest Tools Ubuntu
- Hacker Tools Online
- Hack Tool Apk No Root
- Pentest Tools Download
- Computer Hacker
- What Are Hacking Tools
- Nsa Hacker Tools
- Pentest Tools Download
- Hack Tools
- Hacker Tools Mac
- Pentest Tools Kali Linux
- Hacker Tools Online
- Install Pentest Tools Ubuntu
- Install Pentest Tools Ubuntu
- Pentest Tools For Android
- Pentest Reporting Tools
- Hack App
- Pentest Reporting Tools
- Tools 4 Hack
- Hack Rom Tools
- Hack Tools For Ubuntu
- Hacker Tools 2019
- Best Hacking Tools 2020
- New Hack Tools
- Easy Hack Tools
- Pentest Tools Subdomain
- Hack Tools
- Pentest Tools Review
- Hacker Techniques Tools And Incident Handling
- Game Hacking
- Hacking Tools For Pc
- Pentest Tools Apk
- Pentest Tools List
- Hacker Tools 2020
- Hacker Tools Free
- Pentest Tools Website
- Hacking Tools Mac
- New Hacker Tools
- Hacker Tools Linux
- Hack Tools Download
- Best Hacking Tools 2020
- Hacker Tools Apk Download
- Pentest Tools Bluekeep
- Pentest Tools Android
- Hacking Tools For Games
- Hack Tools For Mac
- Hackers Toolbox
- Pentest Tools Tcp Port Scanner
- Pentest Tools Nmap
- Hacker Tools Free Download
- Beginner Hacker Tools
- Hack Tools For Mac
- Pentest Tools Linux
- Hacker Tools 2020
- Hack Tools 2019
- Pentest Tools For Mac
- Kik Hack Tools
- Hack Tools
- Pentest Tools Website Vulnerability
- Hacker Tools 2019
- How To Hack
- Pentest Tools Bluekeep
- Hack Tools Pc
dimanche 30 août 2020
Snmpcheck
Website: http://www.nothink.org/perl/snmpcheck
Related articles
- Hack App
- Android Hack Tools Github
- Hacker
- Hacking Tools Github
- Bluetooth Hacking Tools Kali
- Pentest Recon Tools
- Termux Hacking Tools 2019
- Hacker Tools For Ios
- Hacking Tools Windows 10
- Tools For Hacker
- Pentest Tools Online
- Hack Tools
- Hack Tools Online
- Pentest Automation Tools
- How To Make Hacking Tools
- Hacking Tools Mac
- Hacking App
- Hacking Tools For Kali Linux
- Hack Tool Apk No Root
- Hacker Tools Windows
- Physical Pentest Tools
- Hack Tools Download
- Underground Hacker Sites
- Pentest Tools Tcp Port Scanner
- Hacking Tools For Mac
- Hacker Tools Mac
- Pentest Tools Github
- Underground Hacker Sites
- Hacking Tools Kit
- Pentest Tools Github
- Computer Hacker
- Hacker Tools Apk
- Hackers Toolbox
- Hacker Tool Kit
- Hacker Tools Github
- Hacking Tools 2019
- Hacking Tools 2019
- Tools 4 Hack
- Pentest Tools Linux
- Pentest Tools For Mac
- Pentest Recon Tools
- How To Make Hacking Tools
- Hacker Tools Online
- Usb Pentest Tools
- Hacking Tools 2020
- Hacking Tools Software
- Pentest Tools For Windows
- What Is Hacking Tools
- How To Make Hacking Tools
- How To Hack
- Pentest Recon Tools
- Pentest Tools Download
- Hacker Tools Online
- Hacking Tools 2019
- Hacker Tools List
- Hacking Tools Name
- Hacking Apps
- Pentest Tools For Ubuntu
- Bluetooth Hacking Tools Kali
- Hack Tools 2019
- Hacking Tools Usb
- Pentest Tools Open Source
- Hack Tools Download
- Hack Tool Apk No Root
- Hacker Tools Linux
- Hacks And Tools
- Kik Hack Tools
- Pentest Tools Android
- Nsa Hack Tools Download
- Pentest Tools Subdomain
- Top Pentest Tools
- Hack Rom Tools
- Hacker Tools For Windows
- Hacking Tools And Software
- Hack Tools For Mac
- Bluetooth Hacking Tools Kali
- Pentest Tools Online
- Hacking Tools Pc
- Hacker Hardware Tools
- Hacking Tools 2020
- Pentest Tools Nmap
- Hacker Tools Free
- Bluetooth Hacking Tools Kali
- Hacker Techniques Tools And Incident Handling
- Hack Rom Tools
- Tools For Hacker
- Nsa Hack Tools
- Best Pentesting Tools 2018
- Pentest Recon Tools
- Hack And Tools
- Hak5 Tools
- Computer Hacker
- Growth Hacker Tools
- Pentest Tools Framework
- Hacking Tools For Mac
- Pentest Automation Tools
- Github Hacking Tools
- Hacking App
- Hacking Tools Windows 10
- Hack Tools For Windows
- Kik Hack Tools
- Pentest Tools Download
- Hacks And Tools
- Hack Tools Github
- Hacker Tools For Mac
- New Hacker Tools
- World No 1 Hacker Software
- Pentest Tools Android
- Hacker Tools List
- Hacking Tools 2019
- Hacking Tools
- Hacking Tools Github
- Pentest Tools Subdomain
- Android Hack Tools Github
- Hacking Tools Software
CTF: FluxFingers4Future - Evil Corp Solution
So let me introduce the challenge first.
The Challenge
You were called by the incident response team of Evil-Corp, the urgently need your help. Somebody broke into the main server of the company, bricked the device and stole all the files! Nothing is left! This should have been impossible. The hacker used some secret backdoor to bypass authentication. Without the knowledge of the secret backdoor other servers are at risk as well! The incident response team has a full packet capture of the incident and performed an emergency cold boot attack on the server to retrieve the contents of the memory (its a really important server, Evil Corp is always ready for such kinds of incidents). However they were unable to retrieve much information from the RAM, what's left is only some parts of the "key_block" of the TLS server. Can you help Evil-Corp to analyze the exploit the attacker used?
(Flag is inside of the attackers' secret message).
TT = Could not recover
key_block:
6B 4F 93 6A TT TT TT TT TT TT 00 D9 F2 9B 4C B0
2D 88 36 CF B0 CB F1 A6 7B 53 B2 00 B6 D9 DC EF
66 E6 2C 33 5D 89 6A 92 ED D9 7C 07 49 57 AD E1
TT TT TT TT TT TT TT TT 56 C6 D8 3A TT TT TT TT
TT TT TT TT TT TT TT TT 94 TT 0C EB 50 8D 81 C4
E4 40 B6 26 DF E3 40 9A 6C F3 95 84 E6 C5 86 40
49 FD 4E F2 A0 A3 01 06
If you are not interested in the solution and want to try the challenge on your own first, do not read past this point. Spoilers ahead.
The Solution
So lets analyze first what we got. We have something called a "key_block" but we do not have all parts of it. Some of the bytes have been destroyed and are unknown to us. Additionally, we have a PCAP file with some weird messages in them. Lets look at the general structure of the message exchange first.So looking at the IP address and TCP ports we see that the attacker/client was 127.0.0.1:36674 and was talking with the Server 127.0.0.1:4433. When looking at the individual messages we can see that the message exchange looked something like this:
ENC HS MESSAGE .... ENC HS MESSAGE ->
<- SERVER HELLO, CERTIFICATE, SERVER HELLO DONE
ENC HS MESSAGE .... ENC HS MESSAGE CCS ENC HS MESSAGE, ENC HS MESSAGE ->
<-CCS, ENC HS MESSAGE
ENC HEARTBEAT ->
<- ENC HEARTBEAT
-> ENC APPLICATION DATA
<- INTERNAL ERROR ... INTERNAL ERROR
So this message exchange appears weird. Usually the client is supposed to send a ClientHello in the beginning of the connection, and not encrypted handshake messages. The same is true for the second flight of the client. Usually it transmits its ClientKeyExchange message here, then a ChangeCipherSpec message and finally its Finished message. If we click at the first flight of the client, we can also see some ASCII text fragments in its messages.
Furthermore we can assume that the message sent after the ChangeCipherSpec from the server is actually a TLS Finished message.
Since we cannot read a lot from the messages the client is sending (in Wireshark at least), we can look at the messages the server is sending to get a better hold of what is going on. In the ServerHello message the server selects the parameters for the connection. This reveals that this is indeed a TLS 1.1 connection with TLS_RSA_WITH_AES_256_CBC_SHA , no compression and the Heartbeat Extension negotiated. We can also see that the ServerRandom is: 1023047c60b420bb3321d9d47acb933dbe70399bf6c92da33af01d4fb770e98c (note that it is always 32 bytes long, the UNIX time is part of the ServerRandom).
Looking at the certificate the server sent we can see that the server used a self-signed certificate for Evil.corp.com with an 800-bit RSA modulus:
00ad87f086a4e1acd255d1d77324a05ea7d250f285f3a6de35b9f07c5d083add5166677425b8335328255e7b562f944d55c56ff084f4316fdc9e3f5b009fefd65015a5ca228c94e3fd35c6aba83ea4e20800a34548aa36a5d40e3c7496c65bdbc864e8f161
and the public exponent 65537.
If you pay very close attention to the handshake you can see another weird thing. The size of the exchanged HeartbeatMessages is highly uneven. The client/attacker sent 3500 bytes, the server is supposed to decrypt these messages, and reflect the contents of them. However, the Server sent ~64000 bytes instead. The heartbeat extension became surprisingly well known in 2014, due to the Heartbleed bug in OpenSSL. The bug causes a buffer over-read on the server, causing it to reflect parts of its memory content in return to malicious heartbeat requests. This is a good indicator that this bug might play a role in this challenge.
But what is this key_block thing we got from the incident response team? TLS 1.1 CBC uses 4 symmetric keys in total. Both parties derive these keys from the "master secret" as the key_block. This key_block is then chunked into the individual keys. You can imagine the key_block as some PRF output and both parties knowing which parts of the output to use for which individual key. In TLS 1.1 CBC the key_block is chunked as follows: The first N bytes are the client_write_MAC key, the next N bytes are the server_write_MAC key, the next P bytes are the client_write key and the last P bytes are the server_write key. N is the length of the HMAC key (which is at the time of writing for all cipher suites the length of the HMAC) and P is the length of the key for the block cipher.
In the present handshake AES-256 was negotiated as the block cipher and SHA (SHA-1) was negotiated for the HMAC. This means that N is 20 (SHA-1 is 20 bytes) and P is 32 (AES-256 requires 32 bytes of key material).
Looking at the given key_block we can chunk it into the individual keys:
client_write_MAC = 6B4F936ATTTTTTTTTTTT00D9F29B4CB02D8836CF
server_write_MAC = B0CBF1A67B53B200B6D9DCEF66E62C335D896A92
client_write = EDD97C074957ADE1TTTTTTTTTTTTTTTT56C6D83ATTTTTTTTTTTTTTTTTTTTTTTT
server_write = 94TT0CEB508D81C4E440B626DFE3409A6CF39584E6C5864049FD4EF2A0A30106
Since not all parts of the key_block are present, we can see that we actually have 14/20 bytes of the client_write_MAC key, the whole server_write_MAC key, 12/32 bytes of the client_write key and 31/32 bytes of the server_write key.
The client_write_MAC key is used in the HMAC computations from the client to the server (the server uses the same key to verify the HMAC),
The server_write_MAC key is used in the HMAC computations from the server to the client (the client uses the same key to verify the HMAC),
The client_write key is used to encrypt messages from the client to the server, while the server_write key is used to encrypt messages from the server to the client.
So looking at the keys we could compute HMAC's from the client if we could guess the remaining 6 bytes. We could compute HMAC's from the server directly, we have not enough key material to decrypt the client messages, but we could decrypt server messages if we brute-forced one byte of the server_write key. But how would you brute force this byte? When do we know when we got the correct key? Lets look at how the TLS record layer works to find out :)
The Record Layer
TLS consists out of multiple protocols (Handshake, Alert, CCS, Application (and Heartbeat)). If one of those protocols wants to send any data, it has to pass this data to the record layer. The record layer will chunk this data, compress it if necessary, encrypt it and attach a "record header" to it.This means, that if we want to decrypt a message we know that if we used the correct key the message should always have a correct padding. If we are unsure we could even check the HMAC with the server_write_MAC key.
In TLS 1.0 - TLS 1.2 the padding looks like this:
1 byte padding : 00
2 bytes padding: 01 01
3 bytes padding: 02 02 02
4 bytes padding: 03 03 03 03
...
So if we guessed the correct key we know that the plaintext has to have valid padding.
An ideal candidate for our brute force attack is the server Finished message. So lets use that to check our key guesses.
The ciphertext looks like this:
0325f41d3ebaf8986da712c82bcd4d55c3bb45c1bc2eacd79e2ea13041fc66990e217bdfe4f6c25023381bab9ddc8749535973bd4cacc7a4140a14d78cc9bddd
The first 16 bytes of the ciphertext are the IV:
IV: 0325f41d3ebaf8986da712c82bcd4d55
Therefore the actual ciphertext is:
Ciphertext: c3bb45c1bc2eacd79e2ea13041fc66990e217bdfe4f6c25023381bab9ddc8749535973bd4cacc7a4140a14d78cc9bddd
The 256 key candidates are quick to check, and it is revealed that 0xDC was the missing byte.
(The plaintext of the Finished is 1400000C455379AAA141E1B9410B413320C435DEC948BFA451C64E4F30FE5F6928B816CA0B0B0B0B0B0B0B0B0B0B0B0B)
Now that we have the full server_write key we can use it to decrypt the heartbeat records.
This is done in the same way as with the Finished. Looking at the decrypted heartbeat messages we can see a lot of structured data, which is an indicator that we are actually dealing
with the Heartbleed bug. If we convert the content of the heartbeat messages to ASCII we can actually see that the private key of the server is PEM encoded in the first heartbeat message.
Note: This is different to a real heartbeat exploit. Here you don't usually get the private key nicely encoded but have to extract it using the coppersmith's attack or similar things. I did not want to make this challenge even harder so I was so nice to write it to the memory for you :)
The private key within the Heartbeat messages looks like this:
-----BEGIN RSA PRIVATE KEY-----
MIIB3gIBAAJlAK2H8Iak4azSVdHXcySgXqfSUPKF86beNbnwfF0IOt1RZmd0Jbgz
UyglXntWL5RNVcVv8IT0MW/cnj9bAJ/v1lAVpcoijJTj/TXGq6g+pOIIAKNFSKo2
pdQOPHSWxlvbyGTo8WECAwEAAQJkJj95P2QmLb5qlgbj5SXH1zufBeWKb7Q4qVQd
RTAkMVXYuWK7UZ9Wa9nYulyjvg9RoWOO+SaDNqhiTWKosQ+ZrvG3A1TDMcVZSkPx
bXCuhhRpp4j0T9levQi0s8tR1YuFzVFi8QIzANNLrgK2YOJiDlyu78t/eVbBey4m
uh2xaxvEd8xGX4bIBlTuWlKIqwPNxE8fygmv4uHFAjMA0j7Uk1ThY+UCYdeCm4/P
eVqkPYu7jNTHG2TGr/B6hstxyFpXBlq6MJQ/qPdRXLkLFu0CMwCf/OLCTQPpBiQn
y5HoPRpMNW4m0M4F46vdN5MaCoMUU+pvbpbXfYI3/BrTapeZZCNfnQIzAJ7XzW9K
j8cTPIuDcS/qpQvAiZneOmKaV5vAtcQzYb75cgu3BUzNuyH8v2P/Br+RJmm5AjMA
jp9N+xdEm4dW51lyUp6boVU6fxZimfYRfYANU2bVFmbsSAU9jzjWb0BuXexKKcX7
XGo=
-----END RSA PRIVATE KEY-----
We should store it in a file and decode it with OpenSSL to get the actual key material.
>> openssl rsa -in key.pem -text -noout
RSA Private-Key: (800 bit, 2 primes)
modulus:
00:ad:87:f0:86:a4:e1:ac:d2:55:d1:d7:73:24:a0:
5e:a7:d2:50:f2:85:f3:a6:de:35:b9:f0:7c:5d:08:
3a:dd:51:66:67:74:25:b8:33:53:28:25:5e:7b:56:
2f:94:4d:55:c5:6f:f0:84:f4:31:6f:dc:9e:3f:5b:
00:9f:ef:d6:50:15:a5:ca:22:8c:94:e3:fd:35:c6:
ab:a8:3e:a4:e2:08:00:a3:45:48:aa:36:a5:d4:0e:
3c:74:96:c6:5b:db:c8:64:e8:f1:61
publicExponent: 65537 (0x10001)
privateExponent:
26:3f:79:3f:64:26:2d:be:6a:96:06:e3:e5:25:c7:
d7:3b:9f:05:e5:8a:6f:b4:38:a9:54:1d:45:30:24:
31:55:d8:b9:62:bb:51:9f:56:6b:d9:d8:ba:5c:a3:
be:0f:51:a1:63:8e:f9:26:83:36:a8:62:4d:62:a8:
b1:0f:99:ae:f1:b7:03:54:c3:31:c5:59:4a:43:f1:
6d:70:ae:86:14:69:a7:88:f4:4f:d9:5e:bd:08:b4:
b3:cb:51:d5:8b:85:cd:51:62:f1
prime1:
00:d3:4b:ae:02:b6:60:e2:62:0e:5c:ae:ef:cb:7f:
79:56:c1:7b:2e:26:ba:1d:b1:6b:1b:c4:77:cc:46:
5f:86:c8:06:54:ee:5a:52:88:ab:03:cd:c4:4f:1f:
ca:09:af:e2:e1:c5
prime2:
00:d2:3e:d4:93:54:e1:63:e5:02:61:d7:82:9b:8f:
cf:79:5a:a4:3d:8b:bb:8c:d4:c7:1b:64:c6:af:f0:
7a:86:cb:71:c8:5a:57:06:5a:ba:30:94:3f:a8:f7:
51:5c:b9:0b:16:ed
exponent1:
00:9f:fc:e2:c2:4d:03:e9:06:24:27:cb:91:e8:3d:
1a:4c:35:6e:26:d0:ce:05:e3:ab:dd:37:93:1a:0a:
83:14:53:ea:6f:6e:96:d7:7d:82:37:fc:1a:d3:6a:
97:99:64:23:5f:9d
exponent2:
00:9e:d7:cd:6f:4a:8f:c7:13:3c:8b:83:71:2f:ea:
a5:0b:c0:89:99:de:3a:62:9a:57:9b:c0:b5:c4:33:
61:be:f9:72:0b:b7:05:4c:cd:bb:21:fc:bf:63:ff:
06:bf:91:26:69:b9
coefficient:
00:8e:9f:4d:fb:17:44:9b:87:56:e7:59:72:52:9e:
9b:a1:55:3a:7f:16:62:99:f6:11:7d:80:0d:53:66:
d5:16:66:ec:48:05:3d:8f:38:d6:6f:40:6e:5d:ec:
4a:29:c5:fb:5c:6a
So now we got the private key. But what do we do with it? Since this is an RSA handshake we should be able to decrypt the whole session (RSA is not perfect forward secure). Loading it into Wireshark does not work, as Wireshark is unable to read the messages sent by the client. What is going on there?
De-fragmentation
So if you do not yet have a good idea of what the record layer is for, you can imagine it like envelops. If someone wants to send some bytes, you have to put them in an envelop and transmit them. Usually implementations use one big envelop for every message, however you can also send a single message in multiple envelops.
The attacker did exactly that. He fragmented its messages into multiple records. This is not very common for handshake messages but fine according to the specification and accepted by almost all implementations. However, Wireshark is unable to decode these kinds of messages and therefore unable to use our private key to decrypt the connection. So we have to do this step manually.
So each record has the following fields:
Type | Version | Length | Data
If we want to reconstruct the ClientHello message we have to get all the data fields of the records of the first flight and decode them.
This is simply done by clicking on each record in Wireshark and concatenating the data fields. This step is at least on my Wireshark version (3.0.5) not very easy as the copying is actually buggy, and Wireshark is not copying the correct bytes.
As you can see in the image, the record is supposed to have a length of 8 bytes, but Wireshark is only copying 4 bytes. I am not sure if this bug is actually only in my version or affects all Wireshark versions. Instead of copying the records individually I therefore copied the whole TCP payload and chunked it manually into the individual records.
16030200080100009e03020000
160302000800000000004e6f62
16030200086f64796b6e6f7773
1603020008696d616361740000
16030200080000000000002053
1603020008746f70206c6f6f6b
1603020008696e67206e6f7468
1603020008696e6720746f2066
1603020008696e646865726500
16030200080200350100005300
16030200080f00010113370015
16030200084576696c436f7270
1603020008206b696c6c732070
1603020008656f706c65000d00
16030200082c002a0102020203
16030200080204020502060201
16030200080102010301040105
16030200080106010103020303
160302000803040305030603ed
1603020008edeeeeefefff0100
16030200020100
If we structure this data it looks like this:
Type Version Length Payload
16 0302 0008 0100009e03020000
16 0302 0008 00000000004e6f62
16 0302 0008 6f64796b6e6f7773
16 0302 0008 696d616361740000
16 0302 0008 0000000000002053
16 0302 0008 746f70206c6f6f6b
16 0302 0008 696e67206e6f7468
16 0302 0008 696e6720746f2066
16 0302 0008 696e646865726500
16 0302 0008 0200350100005300
16 0302 0008 0f00010113370015
16 0302 0008 4576696c436f7270
16 0302 0008 206b696c6c732070
16 0302 0008 656f706c65000d00
16 0302 0008 2c002a0102020203
16 0302 0008 0204020502060201
16 0302 0008 0102010301040105
16 0302 0008 0106010103020303
16 0302 0008 03040305030603ed
16 0302 0008 edeeeeefefff0100
16 0302 0002 0100
The actual message is the concatenation of the record payloads:
0100009e0302000000000000004e6f626f64796b6e6f7773696d6163617400000000000000002053746f70206c6f6f6b696e67206e6f7468696e6720746f2066696e64686572650002003501000053000f000101133700154576696c436f7270206b696c6c732070656f706c65000d002c002a010202020302040205020602010102010301040105010601010302030303040305030603ededeeeeefefff01000100
So what is left is to parse this message. There is an easy way on how to do this an a labor intensive manual way. Lets do the manual process first :) .
We know from the record header that his message is in fact a handshake message (0x16).
According to the specification handshake messages look like this:
struct {
HandshakeType msg_type; /* handshake type */
uint24 length; /* bytes in message */
select (HandshakeType) {
case hello_request: HelloRequest;
case client_hello: ClientHello;
case server_hello: ServerHello;
case certificate: Certificate;
case server_key_exchange: ServerKeyExchange;
case certificate_request: CertificateRequest;
case server_hello_done: ServerHelloDone;
case certificate_verify: CertificateVerify;
case client_key_exchange: ClientKeyExchange;
case finished: Finished;
} body;
} Handshake;
This is RFC speak for: Each handshake message starts with a type field which says which handshake message this is, followed by a 3 byte length field which determines the length of rest of the handshake message.
So in our case the msg_type is 0x01 , followed by a 3 Byte length field (0x00009e, 158[base10]). 0x01 means ClientHello (https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-7). This means we have to parse the bytes after the length field as a ClientHello.
{
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-2>;
CompressionMethod compression_methods<1..2^8-1>;
select (extensions_present) {
case false:
struct {};
case true:
Extension extensions<0..2^16-1>;
};
} ClientHello;
This means: The next 2 bytes are the ProtocolVersion, the next 32 bytes are the ClientRandom, the next byte is the SessionID Length, the next SessionID Length many bytes are the SessionID, the next 2 bytes are the CipherSuite Length bytes, followed by CipherSuite Length many CipherSuites, followed by a 1 byte Compression Length field, followed by Compression Length many CompressionBytes followed by a 2 byte Extension Length field followed by extension length many ExtensionBytes. So lets try to parse this:
Handshakye Type : 01
Handshake Length : 00009e
ProtocolVersion : 0302
ClientRandom : 000000000000004e6f626f64796b6e6f7773696d616361740000000000000000
SessionID Length : 20
SessionID : 53746f70206c6f6f6b696e67206e6f7468696e6720746f2066696e6468657265
CipherSuite Length: 0002
CipherSuites : 0035
Compression Length: 01
CompressionBytes : 00
Extension Length : 0053
ExtensionBytes: : 000f000101133700154576696c436f7270206b696c6c732070656f706c65000d002c002a010202020302040205020602010102010301040105010601010302030303040305030603ededeeeeefefff01000100
This is manual parsing is the slow method of dealing with this. Instead of looking at the specification to parse this message we could also compare the message structure to another ClientHello. This eases this process a lot. What we could also do is record the transmission of this message as a de-fragmented message to something and let Wireshark decode it for us. To send the de-fragmented message we need to create a new record header ourselves. The record should look like this:
Type : 16
Version: 0302
Length : 00A2
Payload: 0100009e0302000000000000004e6f626f64796b6e6f7773696d6163617400000000000000002053746f70206c6f6f6b696e67206e6f7468696e6720746f2066696e64686572650002003501000053000f000101133700154576696c436f7270206b696c6c732070656f706c65000d002c002a010202020302040205020602010102010301040105010601010302030303040305030603ededeeeeefefff01000100
To send this record we can simply use netcat:
echo '16030200A20100009e0302000000000000004e6f626f64796b6e6f7773696d6163617400000000000000002053746f70206c6f6f6b696e67206e6f7468696e6720746f2066696e64686572650002003501000053000f000101133700154576696c436f7270206b696c6c732070656f706c65000d002c002a010202020302040205020602010102010301040105010601010302030303040305030603ededeeeeefefff01000100' | xxd -r -p | nc localhost 4433
Now we can use Wireshark to parse this message. As we can see now, the weired ASCII fragments we could see in the previous version are actually the ClientRandom, the SessionID, and a custom extension from the attacker. Now that we have de-fragmented the message, we know the ClientRandom: 000000000000004e6f626f64796b6e6f7773696d616361740000000000000000
De-fragmenting the ClientKeyExchange message
Now that we have de-fragmented the first flight from the attacker, we can de-fragment the second flight from the client. We can do this in the same fashion as we de-fragmented the ClientHello.
16 0302 0008 1000006600645de1
16 0302 0008 66a6d3669bf21936
16 0302 0008 5ef3d35410c50283
16 0302 0008 c4dd038a1b6fedf5
16 0302 0008 26d5b193453d796f
16 0302 0008 6e63c144bbda6276
16 0302 0008 3740468e21891641
16 0302 0008 0671318e83da3c2a
16 0302 0008 de5f6da6482b09fc
16 0302 0008 a5c823eb4d9933fe
16 0302 0008 ae17d165a6db0e94
16 0302 0008 bb09574fc1f7b8ed
16 0302 0008 cfbcf9e9696b6173
16 0302 0002 f4b6
14 0302 0001 01
16 0302 0030 cbe6bf1ae7f2bc40a49709a06c0e3149a65b8cd93c2525b5bfa8f696e29880d3447aef3dc9a996ca2aff8be99b1a4157
16 0302 0030 9bf02969ca42d203e566bcc696de08fa80e0bfdf44b1b315aed17fe867aed6d0d600c73de59c14beb74b0328eacadcf9
Note that his time we have 3 record groups. First there is chain of handshake records, followed by a ChangeCipherSpec record, followed by 2 more handshake records. The TLS specification forbids that records of different types are interleaved. This means that the first few records a probably forming a group of messages. The ChangeCipherSpec record is telling the server that subsequent messages are encrypted. This seems to be true, since the following records do not appear to be plaintext handshake messages.
So lets de-fragment the first group of records by concatenating their payloads:
1000006600645de166a6d3669bf219365ef3d35410c50283c4dd038a1b6fedf526d5b193453d796f6e63c144bbda62763740468e218916410671318e83da3c2ade5f6da6482b09fca5c823eb4d9933feae17d165a6db0e94bb09574fc1f7b8edcfbcf9e9696b6173f4b6
Since this is a handshake message, we know that the first byte should tell us which handshake message this is. 0x10 means this is a ClientKeyExchange message. Since we already know that TLS_RSA_WITH_AES_256_CBC_SHA was negotiated for this connection, we know that this is an RSA ClientKeyExchange message.
These messages are supposed to look like this (I will spare you the lengthy RFC definition):
Type (0x10)
Length (Length of the content) (3 bytes)
EncryptedPMS Length(Length of the encrypted PMS) (2 bytes)
EncrpytedPMS (EncryptedPMS Length many bytes)
For our message this should look like this:
Type: 10
Length: 000066
Encrypted PMS Length: 0064
Encrypted PMS: 5de166a6d3669bf219365ef3d35410c50283c4dd038a1b6fedf526d5b193453d796f6e63c144bbda62763740468e218916410671318e83da3c2ade5f6da6482b09fca5c823eb4d9933feae17d165a6db0e94bb09574fc1f7b8edcfbcf9e9696b6173f4b6
Now that we got the Encrypted PMS we can decrypt it with the private key. Since the connection negotiated RSA as the key exchange algorithm this is done with:
encPMS^privKey mod modulus = plainPMS
We can solve this equation with the private key from the leaked PEM file.
2445298227328938658090475430796587247849533931395726514458166123599560640691186073871766111778498132903314547451268864032761115999716779282639547079095457185023600638251088359459150271827705392301109265654638212139757207501494756926838535350 ^ 996241568615939319506903357646514527421543094912647981212056826138382708603915022492738949955085789668243947380114192578398909946764789724993340852568712934975428447805093957315585432465710754275221903967417599121549904545874609387437384433 mod 4519950410687629988405948449295924027942240900746985859791939647949545695657651701565014369207785212702506305257912346076285925743737740481250261638791708483082426162177210620191963762755634733255455674225810981506935192783436252402225312097
Solving this equation gives us:
204742908894949049937193473353729060739551644014729690547520028508481967333831905155391804994508783506773012994170720979080285416764402813364718099379387561201299457228993584122400808905739026823578773289385773545222916543755807247900961
in hexadecimal this is:
00020325f41d3ebaf8986da712c82bcd4d554bf0b54023c29b624de9ef9c2f931efc580f9afb081b12e107b1e805f2b4f5f0f1000302476574204861636b6564204e6f6f622c20796f752077696c6c206e65766572206361746368206d65212121212121
The PMS is PKCS#1.5 encoded. This means that it is supposed to start with 0x0002 followed by a padding which contains no 0x00 bytes, followed by a separator 0x00 byte followed by a payload. In TLS, the payload has to be exactly 48 bytes long and has to start with the highest proposed protocol version of the client. We can see that this is indeed the case for our decrypted payload. The whole decrypted payload is the PMS for the connection.
This results in the PMS: 0302476574204861636b6564204e6f6f622c20796f752077696c6c206e65766572206361746368206d65212121212121 (which besides the protocol version is also ASCII :) )
Now that we have the PMS its time to revisit the key scheduling in TLS. We already briefly touched it but here is a overview:
As you can see, we first have to compute the master secret. With the master secret we can reconstruct the key_block. If we have computed the key_block, we can finally get the client_write key and decrypt the message from the attacker.
master secret = PRF ( PMS, "master secret", ClientRandom | ServerRandom)
key_block = PRF (master_secret, "key expansion", ServerRandom | ClientRandom )
Where "master secret" and "key expansion" are literally ASCII Strings.
Note that in the key_block computation ClientRandom and ServerRandom are exchanged.
To do this computation we can either implement the PRF ourselfs, or easier, steal it from somewhere. The PRF in TLS 1.1 is the same as in TLS 1.0. Good places to steal from are for example openssl (C/C++), the scapy project (python), the TLS-Attacker project (java) or your favourite TLS library. The master secret is exactly 48 bytes long. The length of the key_block varies depending on the selected cipher suite and protocol version. In our case we need 2 * 20 bytes (for the 2 HMAC keys) + 2 * 32 bytes (for the 2 AES keys) = 104 bytes.
I will use the TLS-Attacker framework for this computation. The code will look like this:
This results in the following master secret: 292EABADCF7EFFC495825AED17EE7EA575E02DF0BAB7213EC1B246BE23B2E0912DA2B99C752A1F8BD3D833E8331D649F And the following key_block:
6B4F936ADE9B4010393B00D9F29B4CB02D8836CFB0CBF1A67B53B200B6D9DCEF66E62C335D896A92EDD97C074957ADE136D6BAE74AE8193D56C6D83ACDE6A3B365679C5604312A1994DC0CEB508D81C4E440B626DFE3409A6CF39584E6C5864049FD4EF2A0A30106
Now we can chunk our resulting key_block into its individual parts. This is done analogously to the beginning of the challenge.
client_write_mac key = 6B4F936ADE9B4010393B00D9F29B4CB02D8836CF
server_write_mac key = B0CBF1A67B53B200B6D9DCEF66E62C335D896A92
client_write key = EDD97C074957ADE136D6BAE74AE8193D56C6D83ACDE6A3B365679C5604312A19
server_write key = 94DC0CEB508D81C4E440B626DFE3409A6CF39584E6C5864049FD4EF2A0A30106
Now that we have the full client_write key we can use that key to decrypt the application data messages. But these messages are also fragmented. But since the messages are now encrypted, we cannot simply concatenate the payloads of the records, but we have to decrypt them individually and only concatenate the resulting plaintext.
Analogue to the decryption of the heartbeat message, the first 16 bytes of each encrypted record payload are used as an IV
IV, Ciphertext Plaintext
6297cb6d9afba63ec4c0dd7ac0184570 a9c605307eb5f8ccbe8bbc210ff1ff14943873906fad3eca017f49af8feaec87 557365723A20726FB181CF546350A88ACBE8D0248D6FF07675D1514E03030303
063c60d43e08c4315f261f8a4f06169a cdb5818d80075143afe83c79b570ab0b349b2e8748f8b767c54c0133331fb886 6F743B0A50617373D6F734D45FB99850CCAF32DF113914FC412C523603030303
cd839b95954fcadf1e60ee983cbe5c21 ac6f6e1fe34ae4b1214cded895db4746b8e38d7960d7d45cb001aab8e18c7fc7 3A20726F6F743B0A937048A265327642BD5626E00E4BC79618F9A95C03030303
8092d75f72b16cb23a856b00c4c39898 8df099441e10dca5e850398e616e4597170796b7202e2a8726862cd760ebacdf 6563686F20224F7769EACFBEEB5EE5D1F0B72306F8C78AD86CB4835003030303
8e9f83b015fce7f9c925b8b64abee426 224a5fbd2d9b8fc6ded34222a943ec0e8e973bcf125b81f918e391a22b4b0e65 6E6564206279204061736E93BFDC5103C8C2FE8C543A72B924212E8403030303
0e24ba11e41bfcf66452dc80221288ce a66fb3aed9bdc7e08a31a0e7f14e11ce0983ec3d20dd47c179425243b14b08c9 6963306E7A31223B84A3CAFA7980B461DE0A6410D6251551AE401DD903030303
0465fdb05b121cdc08fa01cdacb2c8f4 eff59402f4dbf35a85cc91a6d1264a895cd1b3d2014c91fbba03ec4c85d058c9 0A7375646F20726DB97422D8B30C54CC672FFEC3E9D771D4743D96B903030303
e2ddbbb83fe8318c41c26d57a5813fab 89549a874ff74d83e182de34ecf55fff1a57008afd3a29ef0d839b991143cd2a 202F202D72663B0A996F3F1789CB9B671223E73C66A0BA578D0C0F3203030303
524f5210190f73c984bd6a59b9cf424c b7f30fafe5ea3ac51b6757c51911e86b0aa1a6bbf4861c961f8463154acea315 0A666C61677B436868BF764B01D2CDCB2C06EA0DFC5443DABB6EC9AE03030303
32765985e2e594cddca3d0f45bd21f49 a5edfe89fdb3782e2af978585c0e27ba3ef90eb658304716237297f97e4e72bc 696D696368616E67FBF32127FA3AF2F97770DE5B9C6D376A254EF51E03030303
e0ae69b1fa54785dc971221fd92215fb 14e918a9e6e37139153be8cb9c16d2a787385746f9a80d0596580ba22eaf254e 61467233346B7D8BE8B903A167C44945E7676BF99D888A4B86FA8E0404040404
The plaintext then has to be de-padded and de-MACed.
Data HMAC Pad:
557365723A20726F B181CF546350A88ACBE8D0248D6FF07675D1514E 03030303
6F743B0A50617373 D6F734D45FB99850CCAF32DF113914FC412C5236 03030303
3A20726F6F743B0A 937048A265327642BD5626E00E4BC79618F9A95C 03030303
6563686F20224F77 69EACFBEEB5EE5D1F0B72306F8C78AD86CB48350 03030303
6E65642062792040 61736E93BFDC5103C8C2FE8C543A72B924212E84 03030303
6963306E7A31223B 84A3CAFA7980B461DE0A6410D6251551AE401DD9 03030303
0A7375646F20726D B97422D8B30C54CC672FFEC3E9D771D4743D96B9 03030303
202F202D72663B0A 996F3F1789CB9B671223E73C66A0BA578D0C0F32 03030303
0A666C61677B4368 68BF764B01D2CDCB2C06EA0DFC5443DABB6EC9AE 03030303
696D696368616E67 FBF32127FA3AF2F97770DE5B9C6D376A254EF51E 03030303
61467233346B7D 8BE8B903A167C44945E7676BF99D888A4B86FA8E 0404040404
This then results in the following data:
Data:
557365723A20726F6F743B0A506173733A20726F6F743B0A6563686F20224F776E656420627920406963306E7A31223B0A7375646F20726D202F202D72663B0A0A666C61677B4368696D696368616E6761467233346B7D8B
Which is ASCII for:
User: root;
Pass: root;
echo "Owned by @ic0nz1";
sudo rm / -rf;
flag{ChimichangaFr34k}
Honestly this was quite a journey. But this presented solution is the tedious manual way. There is also a shortcut with which you can skip most of the manual cryptographic operations.
The Shortcut
After you de-fragmented the messages you can patch the PCAP file and then use Wireshark to decrypt the whole session. This way you can get the flag without performing any cryptographic operation after you got the private key. Alternatively you can replay the communication and record it with Wireshark. I will show you the replay of the messages. To recap the de-fragmented messages looks like this:ClientHello
0100009e0302000000000000004e6f626f64796b6e6f7773696d6163617400000000000000002053746f70206c6f6f6b696e67206e6f7468696e6720746f2066696e64686572650002003501000053000f000101133700154576696c436f7270206b696c6c732070656f706c65000d002c002a010202020302040205020602010102010301040105010601010302030303040305030603ededeeeeefefff01000100
ClientKeyExchange:
1000006600645de166a6d3669bf219365ef3d35410c50283c4dd038a1b6fedf526d5b193453d796f6e63c144bbda62763740468e218916410671318e83da3c2ade5f6da6482b09fca5c823eb4d9933feae17d165a6db0e94bb09574fc1f7b8edcfbcf9e9696b6173f4b6
We should now add new (not fragmented) record header to the previously fragmented message. The messages sent from the server can stay as they are. The ApplicationData from the client can also stay the same. The messages should now look like this
ClientHello
16030200A20100009e0302000000000000004e6f626f64796b6e6f7773696d6163617400000000000000002053746f70206c6f6f6b696e67206e6f7468696e6720746f2066696e64686572650002003501000053000f000101133700154576696c436f7270206b696c6c732070656f706c65000d002c002a010202020302040205020602010102010301040105010601010302030303040305030603ededeeeeefefff01000100
ServerHello / Certificate / ServerHelloDone
160302006A1000006600645de166a6d3669bf219365ef3d35410c50283c4dd038a1b6fedf526d5b193453d796f6e63c144bbda62763740468e218916410671318e83da3c2ade5f6da6482b09fca5c823eb4d9933feae17d165a6db0e94bb09574fc1f7b8edcfbcf9e9696b6173f4b61403020001011603020030cbe6bf1ae7f2bc40a49709a06c0e3149a65b8cd93c2525b5bfa8f696e29880d3447aef3dc9a996ca2aff8be99b1a415716030200309bf02969ca42d203e566bcc696de08fa80e0bfdf44b1b315aed17fe867aed6d0d600c73de59c14beb74b0328eacadcf9
ClientKeyExchange / ChangeCipherSpec / Finished
160302006A1000006600645de166a6d3669bf219365ef3d35410c50283c4dd038a1b6fedf526d5b193453d796f6e63c144bbda62763740468e218916410671318e83da3c2ade5f6da6482b09fca5c823eb4d9933feae17d165a6db0e94bb09574fc1f7b8edcfbcf9e9696b6173f4b61403020001011603020030cbe6bf1ae7f2bc40a49709a06c0e3149a65b8cd93c2525b5bfa8f696e29880d3447aef3dc9a996ca2aff8be99b1a415716030200309bf02969ca42d203e566bcc696de08fa80e0bfdf44b1b315aed17fe867aed6d0d600c73de59c14beb74b0328eacadcf9')
ApplicationData
1703020030063c60d43e08c4315f261f8a4f06169acdb5818d80075143afe83c79b570ab0b349b2e8748f8b767c54c0133331fb8861703020030cd839b95954fcadf1e60ee983cbe5c21ac6f6e1fe34ae4b1214cded895db4746b8e38d7960d7d45cb001aab8e18c7fc717030200308092d75f72b16cb23a856b00c4c398988df099441e10dca5e850398e616e4597170796b7202e2a8726862cd760ebacdf17030200308e9f83b015fce7f9c925b8b64abee426224a5fbd2d9b8fc6ded34222a943ec0e8e973bcf125b81f918e391a22b4b0e6517030200300e24ba11e41bfcf66452dc80221288cea66fb3aed9bdc7e08a31a0e7f14e11ce0983ec3d20dd47c179425243b14b08c917030200300465fdb05b121cdc08fa01cdacb2c8f4eff59402f4dbf35a85cc91a6d1264a895cd1b3d2014c91fbba03ec4c85d058c91703020030e2ddbbb83fe8318c41c26d57a5813fab89549a874ff74d83e182de34ecf55fff1a57008afd3a29ef0d839b991143cd2a1703020030524f5210190f73c984bd6a59b9cf424cb7f30fafe5ea3ac51b6757c51911e86b0aa1a6bbf4861c961f8463154acea315170302003032765985e2e594cddca3d0f45bd21f49a5edfe89fdb3782e2af978585c0e27ba3ef90eb658304716237297f97e4e72bc1703020030e0ae69b1fa54785dc971221fd92215fb14e918a9e6e37139153be8cb9c16d2a787385746f9a80d0596580ba22eaf254e
What we want to do now is create the following conversation:
CH->
<-SH, CERT, SHD
-> CKE, CCS, FIN
-> APP, APP ,APP
This will be enough for Wireshark to decrypt the traffic. However, since we removed some messages (the whole HeartbeatMessages) our HMAC's will be invalid.
We need to record an interleaved transmission of these message with Wireshark. I will use these simple python programs to create the traffic:
If we record these transmissions and tick the flag in Wireshark to ignore invalid HMAC's we can see the plaintext (if we added the private key in Wireshark).
Challenge Creation
I used our TLS-Attacker project to create this challenge. With TLS-Attacker you can send arbitrary TLS messages with arbitrary content in an arbitrary order, save them in XML and replay them. The communication between the peers are therefore only two XML files which are loaded into TLS-Attacker talking to each other. I then copied parts of the key_block from the debug output and the challenge was completed :)If you have question in regards to the challenge you can DM me at @ic0nz1
Happy HackingRelated posts
- Hack Tools
- How To Make Hacking Tools
- How To Hack
- Install Pentest Tools Ubuntu
- Hacker Tools For Ios
- How To Make Hacking Tools
- Hacker Tools For Ios
- Hackrf Tools
- Pentest Tools Port Scanner
- How To Install Pentest Tools In Ubuntu
- Pentest Tools Linux
- Hak5 Tools
- Hacking Tools Mac
- Hack Tools Github
- Best Hacking Tools 2020
- Bluetooth Hacking Tools Kali
- Pentest Tools Online
- Hack Tools For Mac
- Pentest Tools Kali Linux
- Hacking Tools 2019
- Growth Hacker Tools
- Hacking Tools Free Download
- Kik Hack Tools
- Pentest Tools For Windows
- How To Install Pentest Tools In Ubuntu
- Hacking Tools Mac
- Install Pentest Tools Ubuntu
- Hack Tools Download
- Hack Tools Online
- Github Hacking Tools
- Hack App
- Nsa Hacker Tools
- Pentest Tools Github
- Pentest Tools Kali Linux
- Hack Tools 2019
- Hacks And Tools
- Hack Tools Pc
- Hacker Tools
- Beginner Hacker Tools
- Hack Tools
- Hacking Apps
- Pentest Tools For Windows
- What Are Hacking Tools
- Pentest Reporting Tools
- Hack App
- Hacking Tools 2020
- Nsa Hack Tools Download
- Pentest Tools Alternative
- Pentest Tools Website Vulnerability
- Beginner Hacker Tools
- Pentest Tools Download
- Free Pentest Tools For Windows
- Pentest Tools Alternative
- Hacking Apps
- Hack Tools
- Hack Tools Download
- Hack Tools
- Computer Hacker
- Hack And Tools
- Hacker Tools
- Hacker Tools Hardware
- Hacking Tools Free Download
- Hacker Tools For Windows
- Blackhat Hacker Tools
- Pentest Tools Url Fuzzer
- Hacking App
- Growth Hacker Tools
- Hacking Tools Online
- World No 1 Hacker Software
- Best Pentesting Tools 2018
- Pentest Tools Website Vulnerability
- Pentest Tools Find Subdomains
- Hack Tools Github
- Nsa Hacker Tools
- Hack Tools
- Hacking Tools Online
- How To Hack
- How To Install Pentest Tools In Ubuntu
- Hack Website Online Tool
- Underground Hacker Sites
- Hacking Tools Name
- Hack Tools
- Pentest Tools Apk
- Tools 4 Hack
- Hack Tools
- Pentest Tools Open Source
- Android Hack Tools Github
- Pentest Tools Kali Linux
- Pentest Tools Online
- Hak5 Tools
- Hacking Tools For Pc
- Hacking Tools Free Download
- Hacking Apps
- Github Hacking Tools
- Computer Hacker
- Hacking Tools Software
- Hackrf Tools
- What Are Hacking Tools
- Hacker Security Tools
- Hack Tools For Mac
- Pentest Tools Open Source
- Hacker Tools Online
- Pentest Tools Bluekeep
- Pentest Tools Nmap
- Pentest Tools Online
- Kik Hack Tools
- Hackrf Tools
- Game Hacking
- Pentest Tools Windows
- Pentest Tools Kali Linux
- New Hacker Tools
- Hacking Tools Download
- Hacker Tools Software
- Pentest Tools Tcp Port Scanner
- Hak5 Tools
- Tools Used For Hacking
- Game Hacking
- Hacking Tools For Kali Linux
- What Is Hacking Tools
- Pentest Tools Linux
- Hacks And Tools
- Usb Pentest Tools
- New Hacker Tools
- Pentest Reporting Tools
- Nsa Hack Tools