Insecure Deserialization Attack Explained

Sdílet
Vložit
  • čas přidán 7. 09. 2024
  • #Deserialization #WebSecurity
    We'll explore the basic concepts of an Insecure Deserialization by attacking a web app written in Python.
    🐤 Twitter: / pwnfunction
    🎵 Track: Warriyo - Mortals (feat. Laura Brehm)
    NCS link: • Warriyo - Mortals (fea...

Komentáře • 244

  • @PwnFunction
    @PwnFunction  Před 3 lety +213

    eyJtZXNzYWdlIjoiaGVsbG8gdGltZSB3YXN0ZXIsIHdlbGNvbWUgdG8gdGhlIGNsdWIuIiwgInNlY3JldCI6Imh0dHBzOi8vYml0Lmx5LzNqc1BxUXoifQ==

  • @wnathanielw
    @wnathanielw Před 3 lety +222

    This channel is so underrated

    • @loanqypol6797
      @loanqypol6797 Před 3 lety +5

      completely, i just discovered it, the end music is perfect

    • @Fadhilx
      @Fadhilx Před 3 lety +2

      @@loanqypol6797 agreed

    • @thatguy5277
      @thatguy5277 Před 3 lety +2

      It's a programming channel
      No matter how good it is, most people are sadly extremely bored by programming content

    • @darknessandbelow.4640
      @darknessandbelow.4640 Před 3 lety +2

      @@thatguy5277 In fact, Programming is actually so enjoyable if u wish to learn it.

  • @fr0mage
    @fr0mage Před 3 lety +165

    Amazing video! It would be great if you could also include a small section at the end on how to defend against these vulnerabilities for the blue team people out there :D

    • @PwnFunction
      @PwnFunction  Před 3 lety +66

      Noted

    • @shivaganesh6939
      @shivaganesh6939 Před 3 lety

      Yes it is....

    • @mabakalox2353
      @mabakalox2353 Před 3 lety +11

      The simple way to defend against such attack is to check cookie string at first place, that this cookie was created by your server, before calling serializer. I mean Digital signature at cookie.

    • @dacid44
      @dacid44 Před 3 lety +16

      Certain serialization methods are also more secure than others. For example, don't use pickle. It literally has a huge warning at the top of it's documentation saying not to use it to (de)serialize untrusted data. Other forms like JSON are more secure (though check documentation for whichever library you might want to use to be sure.) This can still depend on your implementation though. JSON isn't secure just because it's JSON, if you write a deserializer that generates and runs code from the JSON, that could still be a vulnerability.

    • @hilligans1
      @hilligans1 Před 3 lety +1

      @@dacid44 just write the serialization and deserialization yourself with two methods. Boom easy

  • @batatakhizou4509
    @batatakhizou4509 Před 3 lety +15

    One of the best tutorials channel out there, MADE RESPECT TO YOU

  • @3N18AKPzmGOsBgWKH
    @3N18AKPzmGOsBgWKH Před 3 lety +8

    I found your channel earlier today when trying to search for anyone explaining the difference between XSS in HTML and XSS in json requests. Haven't had the luck but saw your XSS video. Loved it a lot and shared it with my co-workers! Trying to advance myself in web application pentesting and understand everything. It's rare to see people explain in a good way and even get things drawn graphically in front of you. It helps a lot so thank you!
    I've been working with this for about a year from being freshly new from university. All you learn is mostly the theoretical part and not the practical. What i've recently noticed is that i lack the knowledge in HTML to be able to perform and really understand XSSes. So i have also been on the look out to create a web application and use some HTML to really understand JavaScript.
    p.s Just got myself two 1TB M2 SSD for my Raspian :P Already have pi-hole installed and will now fiddle with creating an OpenMediaVault to create my own NAS. Hoping by fiddling with stuff like this, will give me more knowledge in actual hacking and understanding it all. Will be fun! Love your videos! have only seen two of them. Saving the rest for the weekend. Good job with them all and greetings from Sweden! :P

    • @PwnFunction
      @PwnFunction  Před 3 lety +3

      I very much appreciate comments like these, thanks.
      Also I do think it's necessary for one to learn HTML and Javascript to understand XSS on a fundamental level.

  • @marlon582
    @marlon582 Před 3 lety +22

    Your timing with these videos is pretty good! When I finished a challenge about Server-Side Template Injections you uploaded the video about SSTIs. And today I finished a challenge about Deserialization Attacks and now you uploaded this! Haha, keep it going man :)

  • @alexandros7832
    @alexandros7832 Před 3 lety

    The gif of the person banging his head against the desk accurately sums up my pentesting career… love all your content btw

  • @telnobynoyator_6183
    @telnobynoyator_6183 Před 3 lety +3

    came for the penguin profile pic, stayed for the awesome content

  • @eccentricOrange
    @eccentricOrange Před 2 lety +1

    1:04 I love how you took a moment there and then actually estimate "5 hours or so" as though it was meant to be precise :D

  • @Omar-wm9kz
    @Omar-wm9kz Před 3 lety +3

    the only teachers which i like Pwn for these awesome videos and net-ninja for explainning java script and web technologies.

  • @prog_demos
    @prog_demos Před 3 lety +3

    You're doing an amazing job. I have no idea why you don't have like 2 mil subs. I'm sure that in like a year or two we'll be there as well.
    Greetings from a fellow Gen Z-er from Croatia

  • @rishabhtiwari6641
    @rishabhtiwari6641 Před 3 lety +48

    Just imagine if this guy creates his own course. That would be crazy.

    • @mr.rabbit5642
      @mr.rabbit5642 Před rokem

      Is that sarcastic or there truly aren't any? :((

  • @vxqr2788
    @vxqr2788 Před 3 lety

    I have nothing to add, but to support this channel I will leave a comment.

  • @thesmartguy3523
    @thesmartguy3523 Před 3 lety +1

    Quality content like this is what is needed more. Kudos to you mate - waiting for more.

  • @venkateshpandian7239
    @venkateshpandian7239 Před 3 lety +2

    I have a request dear brother/mentor. You are posting really good stuff here 😊 big congratulations for that 😊👍. We need a complete course from you covering all the basics to advanced of hacking... So that it is helpful for lots of new comers like me. 😊👍 Hope you consider this !!!!

  • @Vazzible_gaming
    @Vazzible_gaming Před 6 měsíci

    I have a good idea for you, might I suggest you try giving us some QNA notes or questions at the beginning of each video, giving us the necessary question, and then you go onto answer the questions in depth in the rest of the video.

  • @_xylotus_
    @_xylotus_ Před 3 lety

    Keep going man, pretty underrated channel. I bet it'll gain some more popuation over time. The video has good quality.

  • @avilde
    @avilde Před 2 lety +1

    Well done with ilustrations and quite a good explanation. Definetely would be useful to also hear how to defend against such attacks )

  • @MrMrCraftmine
    @MrMrCraftmine Před 3 lety +3

    So normally the client would send a pickled + base64 encoded session object to the server? That means there should be Python running on the Client Browser? This is the easiest security hole to stuff, just don't use pickles. Use JSON or XML instead.

    • @seroamado6283
      @seroamado6283 Před 2 lety +1

      youre right, I didn't even know someone would actually restore objects in this way.

  • @okal7706
    @okal7706 Před 3 lety

    Excellent video! I've encountered this issue myself from a developer perspective, the workarounds are usually to either use a non-serialized format (i.e. store parameters in XML) or to only deserialize binaries signed with some server-side key.

    • @somebodystealsmyname
      @somebodystealsmyname Před 3 lety +2

      I mostly slap a JWT around these things. Makes it simple to create and parse.

    • @okal7706
      @okal7706 Před 3 lety

      @@somebodystealsmyname Very nice although mine was actually not a web application.

    • @xeridea
      @xeridea Před 2 lety

      Store parameters in JSON, and manually load them back in. I haven't had a reason to actually raw serialize an object. If need to store in a database or whatever I just use JSON... which is technically serialization, just not raw objects. Haven't touched Python though, I don't like the language. Mainly PHP, Java, or C++.

  • @corbyere
    @corbyere Před 3 lety

    thank you so much, best and most concise, easy to understand videos that saved my webtechnologies course grade. i'm reviewing for my exam and your videos came just in time

  • @khanhhnahk1
    @khanhhnahk1 Před rokem

    Thank you so much for your explaination, cant find anywhere else better than yours, hope you can make a lot more videos related to web vulnerabilities :D

  • @_DeProgrammer
    @_DeProgrammer Před 3 lety +3

    great video! Got a ton out of this! Thank you so much for all your amazing content!

  • @janwrona9539
    @janwrona9539 Před rokem

    Great explanation of what de/serialization is !

  • @Thiscantbeanyone
    @Thiscantbeanyone Před rokem

    This means the server should store cookies in python pickles, so that when reading pickled cookies to unpickle it, the bad code runs, this is a very specific situation, but its still a cool way to explain serialization and to say to not copy&paste random code into web compiler

  • @MadlipzMarathi
    @MadlipzMarathi Před 3 lety +2

    If you Deserialization object with verificarion is your fault not pythons , This can be done with any Language, nice video btw.

  • @mukulgaut
    @mukulgaut Před 3 lety +6

    Just one word PERFECT

    • @PwnFunction
      @PwnFunction  Před 3 lety +4

      🙏

    • @ifelseprog
      @ifelseprog Před 3 lety

      @@PwnFunction 🙏

    • @NightDragonPlayz_2
      @NightDragonPlayz_2 Před 3 lety +1

      @@ifelseprog
      SO PERFECT
      function subscribe2PWN()
      Redirection.load = subscribe
      Site.function.load = www.youtube.com
      (Not real html js)

  • @reyaaoki
    @reyaaoki Před 3 lety +1

    and that's why you should always sign this kind of stuff

  • @hyugacirsei3377
    @hyugacirsei3377 Před 3 lety

    Just a comment to say the content of your channel is great

  • @malikashtar7216
    @malikashtar7216 Před 3 lety

    Channels underrated but only one request would like mic volume to increase!!! 😍

  • @geigerflo37
    @geigerflo37 Před 3 lety +1

    Your video quality is insane!

  • @smiley_1000
    @smiley_1000 Před 3 lety +5

    I don't see how python is particularly vulnerable to this. You using an insecure package is not the languages fault.

    • @alagaika8515
      @alagaika8515 Před 3 lety +6

      Especially if the documentation of the package screams THIS IS INSECURE! DO NOT USE WITH UNTRUSTED INPUTS

    • @lismanrazvan5783
      @lismanrazvan5783 Před 2 lety +2

      it's about the concept...

  • @casual_gamer987
    @casual_gamer987 Před 3 lety

    I hit like button at your example of Serialization! Great video and explanation! Thanks

  • @idan4329
    @idan4329 Před 3 lety +2

    I don't get the web exploit:
    1.Does the server must have python installed or is this some kind of a asm shellcode?
    2.You didn't show the deserialization code on the server
    3.How can one distinct between local effects and remote successful rce?

  • @ducky1681
    @ducky1681 Před 2 lety +1

    Most disturbing part of this is that the server runs windows(or at least powershell).

  • @mohitkashyap5393
    @mohitkashyap5393 Před 3 lety

    mission passes + respect + concept amazing explanation please make more videos

  • @shinkaihuang6286
    @shinkaihuang6286 Před 3 lety

    man it's so damn cool! please keep creating videos. you'll be successful

  • @ratulhasan7136
    @ratulhasan7136 Před 2 lety +1

    Quick question: how did python code run in the server? Is it converted to ASM or some global language?

  • @sajidali-hs4vv
    @sajidali-hs4vv Před rokem

    каждый раз 10% это здорово спасибо за связки

  • @ammaarshamail
    @ammaarshamail Před 3 lety +1

    amazingly i understood every bit of it...Thanks..it means alot!!!

  • @coder_rc
    @coder_rc Před 3 lety +1

    As I said the best CZcamsr of Indian web security community.
    If you don't know he is Indian!.

  • @jenyasidyakin8061
    @jenyasidyakin8061 Před 3 lety

    I hope to see more videos on your channel. This content is special

  • @shaddy9648
    @shaddy9648 Před 3 lety

    That Keeanu Reeves joke was funny man

  • @adityyyaaa
    @adityyyaaa Před 2 měsíci

    you hyped me up for cybersec

  • @fabiorj2008
    @fabiorj2008 Před 2 lety

    Hi , amazing video. Its possible let the app available to download in a docker environment ?

  • @jamisonmartino1136
    @jamisonmartino1136 Před 3 lety +1

    Your vids are amazing, thanks so much!

  • @ogwokwilliam3891
    @ogwokwilliam3891 Před 3 lety

    Wowww the intro is killer

  • @saladking980
    @saladking980 Před 3 lety

    Love your content, man! I'm curious about what you use to draw on screen? What software & hardware do you use for drawing?

  • @DaggerMan11
    @DaggerMan11 Před 3 lety

    this exploit is so elegant and cool! thanks!

  • @draklowell
    @draklowell Před 2 lety

    Who uses pickle for serialization/deserialization on production?

  • @user-uw5ck9xm4l
    @user-uw5ck9xm4l Před rokem

    What I am not getting here is : the command is executed on server side (deserialization) , but how is shell obtained at client side ? It should have been on server side itself . Please correct if I am wrong here

  • @annomy1493
    @annomy1493 Před 3 lety

    Simple but great. Good work.

  • @alperkaya8919
    @alperkaya8919 Před 2 lety

    Basically, creator of the website trusts that you have given valid inputs instead of they checking your inputs.

  • @xenonbox9393
    @xenonbox9393 Před 3 lety

    The legend is back!

  • @khalilbouzidi8432
    @khalilbouzidi8432 Před 3 lety +1

    thanks a lot for this very educational content

  • @tarankaranth8782
    @tarankaranth8782 Před 2 lety

    awesome presentation.

  • @musicforalifetime133
    @musicforalifetime133 Před 3 lety +1

    what font do you use for terminal?

  • @chiragbablani8325
    @chiragbablani8325 Před 3 lety

    Bring more of these please!

  • @mudassiralvi1
    @mudassiralvi1 Před 3 lety

    Your videos are exceptional

  • @tarankaranth8782
    @tarankaranth8782 Před 2 lety

    one question, wouldnt this be an issue for all the existing restapi code we have,?

  • @tbc...
    @tbc... Před 2 lety

    What is the typography you're using on your vscode instance?

  • @loradawn
    @loradawn Před 3 lety +1

    Not only that your explanations are great, but you got a huge talent to draw/sketch, so you should change the hobby... (just kidding). :)

  • @4ag2
    @4ag2 Před 3 lety

    I love your teaching methodology 💯🔥

  • @king_tv4
    @king_tv4 Před 2 lety

    What software do you use for your screen explanation

  • @patrickslomian7423
    @patrickslomian7423 Před 3 lety

    Maan ! Love your videos !

  • @lusidras3682
    @lusidras3682 Před 3 lety

    Thank you!! love your videos!

  • @maulikshah28
    @maulikshah28 Před 3 lety +1

    Veautiful video man
    You deserve the like and subscribe

  • @anik6393
    @anik6393 Před 3 lety

    Best video ever i have been seen ❤️

  • @lordlenno6791
    @lordlenno6791 Před 3 lety

    Did somebody know which musik playes in the backround
    PS: thanks for your great videos

  • @galitan5881
    @galitan5881 Před 3 lety

    I didnt see comin, it was so fast !!!

  • @aphelioschenik3162
    @aphelioschenik3162 Před 2 lety

    Yo i have a question ! Is Laravel safe against these type of attacks ? Compared to Django witch is using python ( a prototyped style of OOP) it's possible to inject some functions in session cookie and execute them using something like constructor, but for Laravel i think it's impossible to do the same thing, so please correct me if i m wrong , and thanks in advance.

  • @lerooyferr3725
    @lerooyferr3725 Před 2 lety

    really cool and easy to understand. Agree @NathanielWard

  • @kolorytoweoke
    @kolorytoweoke Před 3 lety

    great explanation, thanks a lot!

  • @udaynarayanmukherjee5208

    Nice and superb art style.
    Btw What's the font on your terminal (python prompt)

  • @DHIRAL2908
    @DHIRAL2908 Před 3 lety

    Would love a vid on prototype pollution!

  • @renify_
    @renify_ Před 3 lety

    this is same thing happen last year about Drupal8 CMS , serialization RCE

  • @lisannasil2346
    @lisannasil2346 Před 5 měsíci

    you're a legend!

  • @checkmate6732
    @checkmate6732 Před 3 lety

    great job! continue please : D

  • @fxiqval
    @fxiqval Před rokem

    i know this is old, but my question is, why the f!ck does python serialize methods? can't it have just a class that you then initialize like a struct in C(++) somehow (not familiar with python) with only the member variables and the methods will be stored only in your code?

  • @gamesdean8620
    @gamesdean8620 Před 3 lety

    I think K. Reeves is 491 in 2021. But the rest of the video is fine. Jokes apart, excellent as always

  • @hidayatbachtar
    @hidayatbachtar Před 2 lety

    so Insecure deserialize have 2 category?
    - binary
    - Web Application?
    thats right?

  • @Manabender
    @Manabender Před 3 lety

    How come the base-64-encoded cookie has a run of AAAAAAAA in it? Is the cookie screaming? Does it need help? *Should I be concerned!?*
    (but no really why is that there?)

    • @cmyk8964
      @cmyk8964 Před 3 lety

      In Base64, the letter “A” corresponds to the bits “000000”.

    • @Manabender
      @Manabender Před 3 lety +1

      @@cmyk8964 So, long runs of zeroes get converted into A's. Or, emptiness gets converted into screaming. Sounds like midlife crisis.

  • @alfatihflowlesk4010
    @alfatihflowlesk4010 Před 3 lety

    ur videos man is too good !

  • @TheRetsekShow2236
    @TheRetsekShow2236 Před 3 lety +1

    Great video!!

  • @ukaszkiepas57
    @ukaszkiepas57 Před 2 měsíci

    thank you !!!! Awesome !!!

  • @berkaybakacak
    @berkaybakacak Před 3 lety

    Is this vulnerability still exists in Django?

  • @dilawar_uchiha
    @dilawar_uchiha Před 3 lety

    I mean you have clear warnings in pickle docs, for a moment I thought you pulled it off as json

  • @user-xv9qb6xs4k
    @user-xv9qb6xs4k Před 2 lety

    even json deserialization is enough to break your machine. i see no reason to use pickle unless it is encrypted after serialization

  • @VigneshWaran-jr1if
    @VigneshWaran-jr1if Před 3 lety

    I got error on def __reduce__(self) in this line

  • @btmg4828
    @btmg4828 Před 3 lety +1

    how about to Link the Stackoverflow post?

    • @btmg4828
      @btmg4828 Před 3 lety +1

      stackoverflow.com/questions/19855156/whats-the-exact-usage-of-reduce-in-pickler

  • @antimatter6728
    @antimatter6728 Před 3 lety

    How do i know that the website has the vulnerability

  • @abdessalam8468
    @abdessalam8468 Před 3 lety +1

    Thank you
    Please , api attack

  • @almorga
    @almorga Před 3 lety

    are there any vulnerable test apps you recommend to practice this? can you share what you used?

  • @jp46614
    @jp46614 Před 3 lety +1

    imagine a noob friendly, new and popular language having an exploit such as this

    • @someonerandom9939
      @someonerandom9939 Před 3 lety +1

      It's not a problem with the language, its the serialization library that has the exploit. It even outright tells you not to use it for anything untrusted.
      Not even the most security careless developers would use this kind of serialization in such a way so I'm not sure why this video was made.

    • @jp46614
      @jp46614 Před 3 lety +1

      @@someonerandom9939 ah that's some good context the video maker should've included, thanks

  • @user-ly8yz6ym1q
    @user-ly8yz6ym1q Před 2 měsíci

    amazing 🔥

  • @eduardoandrescastilloperer4810

    As Patrick star once said:
    I’ve come for your pickle!!!

  • @wael_shaikh
    @wael_shaikh Před 3 lety

    I was wondering... Can't we just call os.system('id') within the ___reduce___ function itself instead of by passing it as a return value?

    • @PwnFunction
      @PwnFunction  Před 3 lety +2

      `__reduce__` is called during serialization, this means that you'll execute `id` in your system while creating the payload. Only the return values of the `__reduce__` is called during deserialization.

  • @skibo4302
    @skibo4302 Před 3 lety

    Absolutely Beautiful!

  • @igu642
    @igu642 Před 2 lety

    You awesome thank you

  • @iftakharhussain
    @iftakharhussain Před 3 lety

    Are Django websites vaulnarable to this attack? If so, how can it be prevented?

    • @debug9424
      @debug9424 Před 3 lety +1

      Nothing that doesn't use pickle is vulnerable to this
      Pickle is not a normal (de)serialiser, it's an unsafe one, by design. It's made for a completely different use-case.
      The python documentation on pickle is full of warnings about using it on untrusted data.
      Most webapps use safe (de)serialisers and formats, like python's builtin 'json' module for the json format