<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>PortSwigger on Phat Mai Blog</title>
    <link>https://blog.pzhat.id.vn/tags/portswigger/</link>
    <description>Recent content in PortSwigger on Phat Mai Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 15 Dec 2025 00:00:00 +0700</lastBuildDate>
    <atom:link href="https://blog.pzhat.id.vn/tags/portswigger/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>GraphQL API Vulnerability</title>
      <link>https://blog.pzhat.id.vn/posts/2025-11-25-graphql-api-vulnerability/</link>
      <pubDate>Mon, 15 Dec 2025 00:00:00 +0700</pubDate>
      <guid>https://blog.pzhat.id.vn/posts/2025-11-25-graphql-api-vulnerability/</guid>
      <description>&lt;h1 id=&#34;graphql-api-vulnerability-portswigger-challenge&#34;&gt;GraphQL API Vulnerability PortSwigger Challenge&lt;/h1&gt;
&lt;h3 id=&#34;overview-về-graphql&#34;&gt;Overview về GraphQL&lt;/h3&gt;
&lt;p&gt;GraphQL là một ngôn ngữ truy vấn cho API (Query Language for APIs) và cũng là một môi trường thực thi phía máy chủ (server-side runtime) để thực hiện các truy vấn đó.&lt;/p&gt;
&lt;p&gt;Để dễ hiểu hãy hình dung như sau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Với &lt;code&gt;API truyền thống&lt;/code&gt; (như REST API): Bạn phải gọi nhiều &lt;code&gt;&amp;quot;endpoint&amp;quot;&lt;/code&gt;(đường dẫn) khác nhau để lấy các loại dữ liệu khác nhau.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ví dụ: để lấy thông tin người dùng và các bài viết của họ, bạn có thể phải gọi /users/1 để lấy thông tin người dùng, sau đó gọi &lt;code&gt;/users/1/posts&lt;/code&gt; để lấy danh sách bài viết. Bạn thường nhận về toàn bộ dữ liệu mà endpoint đó cung cấp, dù bạn có cần hết hay không.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PortSwigger CORS (Cross-Origin Resource Sharing) challenge WriteUp</title>
      <link>https://blog.pzhat.id.vn/posts/2025-11-16-cors-portswigger/</link>
      <pubDate>Sun, 14 Dec 2025 00:00:00 +0700</pubDate>
      <guid>https://blog.pzhat.id.vn/posts/2025-11-16-cors-portswigger/</guid>
      <description>&lt;h1 id=&#34;portswigger-cors-cross-origin-resource-sharing-challenge-writeup&#34;&gt;PortSwigger CORS (Cross-Origin Resource Sharing) challenge WriteUp&lt;/h1&gt;
&lt;h3 id=&#34;overview-về-cors&#34;&gt;Overview về CORS&lt;/h3&gt;
&lt;h4 id=&#34;cors-là-gì-vì-sao-lại-xuất-hiện&#34;&gt;CORS là gì? Vì sao lại xuất hiện&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CORS (Cross-Origin Resource Sharing) là một cơ chế bảo mật trong web cho phép các tài nguyên trên một máy chủ được chia sẻ với các trang web có nguồn (origin) khác. &amp;ldquo;Nguồn&amp;rdquo; ở đây được định nghĩa bởi ba yếu tố: giao thức (http, https), tên miền (domain), và cổng (port).&lt;/p&gt;</description>
    </item>
    <item>
      <title>PortSwigger CSRF Challenge WriteUps</title>
      <link>https://blog.pzhat.id.vn/posts/2025-11-14-csrf-portswigger-challenge/</link>
      <pubDate>Fri, 12 Dec 2025 00:00:00 +0700</pubDate>
      <guid>https://blog.pzhat.id.vn/posts/2025-11-14-csrf-portswigger-challenge/</guid>
      <description>&lt;h1 id=&#34;portswigger-csrf-challenge-writeup&#34;&gt;PortSwigger CSRF Challenge WriteUp&lt;/h1&gt;
&lt;h3 id=&#34;giới-thiệu-về-csrf-cross-site-request-forgery&#34;&gt;Giới thiệu về CSRF (Cross-Site Request Forgery)&lt;/h3&gt;
&lt;h4 id=&#34;lỗ-hổng-csrf-là-gì-&#34;&gt;Lỗ hổng CSRF là gì :&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Cross-Site Request Forgery hay còn gọi theo tiếng việt là giả mạo yêu cầu trên nhiều trang, là một lỗ hổng bảo mật cho phép attacker lừa người dùng đã được xác thực (đã đăng nhập) thực hiện các hành động không mong muốn trên 1 ứng dụng Web.&lt;/li&gt;
&lt;li&gt;Nói đơn giản thì attacker sẽ mượn danh tính và session của một victim để gửi đi một yêu cầu giả mạo đến ứng dụng mà victim không hề hay biết. Nếu ứng dụng dễ bị tấn công, nó sẽ không thể phân biệt được đâu là yêu cầu giả mạo đâu là yêu cầu hợp lệ của victim (User).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;csrf-hoạt-động-như-thế-nào-&#34;&gt;CSRF hoạt động như thế nào :&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Để thực hiện tấn công CSRF cần có 3 điều kiện bao gồm :
&lt;ul&gt;
&lt;li&gt;Hành động quan trọng : Ứng dụng phải có một function (hành động, action) mà attacker muốn thực hiện ví dụ như là đổi mật khẩu, đổi username, đổi email, chuyển tiền,…. Nói chung nó có lợi có attacker là tương hết hay còn gọi là attack surface ngon, nhiều.&lt;/li&gt;
&lt;li&gt;Xử lý request dựa trên cookie, session : Application phải chỉ dựa vào cookie của trình duyệt để xác định người dùng đang gửi yêu cầu. Không có cơ chế nào xác minh request.&lt;/li&gt;
&lt;li&gt;Không có tham số không thể đoán trước : Các tham số trong yêu cầu thực hiện hành động phải là những giá trị mà attacker có thể đoán trược hoặc là biết trước.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;tại-sao-lỗ-hổng-này-tồn-tại-&#34;&gt;Tại sao lỗ hổng này tồn tại :&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Lỗ hổng CSRF tồn tại do sự tin tưởng của ứng dụng web vào các cookie mà trình duyệt tự động gửi kèm theo mỗi yêu cầu. Ứng dụng chỉ kiểm tra &amp;ldquo;ai&amp;rdquo; đang gửi yêu cầu (dựa trên cookie session) mà không kiểm tra &amp;ldquo;ý định&amp;rdquo; của người dùng có thực sự muốn thực hiện hành động đó hay không.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image&#34; loading=&#34;lazy&#34; src=&#34;https://hackmd.io/_uploads/ByFpDfMx-x.png&#34;&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
