> For the complete documentation index, see [llms.txt](https://docs.cooku222.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cooku222.kr/security/web-hacking/lord-of-sql-injection/lord-of-sqlinjection-golem.md).

# \[Lord Of SQLInjection] golem

<figure><img src="https://blog.kakaocdn.net/dna/bPK2GI/btsMCZGmR3s/AAAAAAAAAAAAAAAAAAAAAGvWpCtoykixKEhBJsFRPkMDV0csLxQ6AZVSxL9EmD3i/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=fHJ0zBeOz%2BID92ZjQRqqd%2B1K0fE%3D" alt="" height="329" width="572"><figcaption></figcaption></figure>

```
#7번째 줄
$query = "select id from prob_golem where id='guest' and pw='{$_GET[pw]}'";

#15번째 줄
if(($result['pw']) &&($result['pw'] == $_GET['pw'])) solve("golem");
```

→ 이 두 줄을 해석해보면 id는 guest로 고정되어있고, pw는 입력 받은 값을 처리하는 것인데, 입력받은 pw랑 결과 값이랑 일치해야 클리어 값이 나오는 것 같다.

```
#5-6번째 줄
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit(No Hack ~_~");
if(preg_match('/or|and|substr\\(|-/i', $_GET[pw])) exit("HeHe");
```

→ 필터링이 된 방식은 코드의 5-6번째 줄에서 확인 가능하다.

→ substr을 사용하지 않으면서 pw를 알아내는 방식을 사용해야하는데, 이때는 sql에서 자주 사용하는 like 연산자를 사용하면 좋다.

→ 해당 문제는 약간 trial and error? 방식으로 풀어야한다.

#### 풀이

```
[도메인값]?pw=0'||id like 'admin'%26%26'1' like '1'%23
```

→ 첫번째로 이 쿼리를 집어 넣는다.

→ 이 쿼리를 해석하면,

```
SELECT * FROM users WHERE pw = '0' OR id like 'admin' AND '1' like '1' #';
```

<figure><img src="https://blog.kakaocdn.net/dna/cQQhMB/btsMDusmrYx/AAAAAAAAAAAAAAAAAAAAAFswICo5J6v7yCkH0Xkddz3CjWl6WvOt3bWhPT4133Hv/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=N8AQE9J3LW4yKTqXnHpOrixv818%3D" alt="" height="445" width="735"><figcaption></figcaption></figure>

→ Hello admin 창이 나타난다.

```
[도메인값]?pw=0'||id like 'admin'%26%26'1' like '2'%23
```

→ 두번째로 이 쿼리를 집어 넣는다.

→ 1 like 1을 1 like 2 로 변경 ⇒ 다음 화면과 같이 Hello admin이라는 글자가 표시되지 않는다.

<figure><img src="https://blog.kakaocdn.net/dna/xoi4O/btsMC9BZhLm/AAAAAAAAAAAAAAAAAAAAAIeFHuYeupoRxdiUgPNLybAJohDdtOuuRGGyTJjKJkUf/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=wiUA32AjkhIbYAYo9%2B0mW2mceJg%3D" alt="" height="430" width="790"><figcaption></figcaption></figure>

→ 이러한 특징을 이용해 이 문제에서는 Blind Injection을 사용할 것이다.

#### Blind Injection의 특징

→ 공격자는 접속한 데이터베이스로부터 명시적인 정보를 받지 못함

→ 대신, 애플리케이션의 응답 변화를 분석하여 데이터를 추출한다.

→ 보통 참/거짓 값을 기반으로 데이터를 하나씩 추출

* pw의 길이를 알아보기 위해 다시 한 번 시도를 한다. 이때는 length함수를 사용한다.
  * 길이를 8로 설정했을때 hello admin 문장이 다시 출력되는 것을 볼 수 있다.

&#x20;

<figure><img src="https://blog.kakaocdn.net/dna/bFeKof/btsMB0TzHZt/AAAAAAAAAAAAAAAAAAAAAL7gHGht5A8tahiRqkzg7ECODp-skYxm8uCU9hFavQga/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=qhSPBLCe8gLY%2BXD5SnA0HpgwJ%2BQ%3D" alt="" height="441" width="825"><figcaption></figcaption></figure>

→ pw 값을 알아보기 위해 인코딩을 일일이 맞춰준다. ‘1%’ , ‘2%’ … 이렇게 맞추다보면 ‘7%’에서 걸리는 것을 볼 수 있다.

<figure><img src="https://blog.kakaocdn.net/dna/zk6zu/btsMDwwW9D7/AAAAAAAAAAAAAAAAAAAAAMLAK9SEfDgrZQdm2cqDvQQG4UbyDkIxg5zQUexSZ_Nf/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=FRJUuz6hsMdSYMYa%2FaP3YBQE1KY%3D" alt="" height="404" width="767"><figcaption></figcaption></figure>

→ pw 값은 7로 시작되는 것을 알 수 있다.

→ 같은 방법으로 두 번째 자리도 유추하다보면 두번째자리도 7인 것을 알 수 있다.

<figure><img src="https://blog.kakaocdn.net/dna/bvtRJC/btsMCa2PEje/AAAAAAAAAAAAAAAAAAAAAMC3KYuG0rCZMndgtOCaxbczo-bqtEphAxd7VqotYAlu/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=hd56674QaJCECfl5YW%2BlhoLlo0I%3D" alt="" height="452" width="814"><figcaption></figcaption></figure>

→ 77로 시작되는 8자리인것을 확인 가능

<figure><img src="https://blog.kakaocdn.net/dna/bZyFJi/btsMA4P2hvW/AAAAAAAAAAAAAAAAAAAAANkQJDjB_PzLkiLsg9YihNsRVHGjKQddWAP5M_oR3Wl0/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=2Kcapz31ekskfzK9of%2FnW0vt7bE%3D" alt="" height="392" width="784"><figcaption></figcaption></figure>

→ 77d로 시작되는 비밀번호인 것을 알 수 있다.

<figure><img src="https://blog.kakaocdn.net/dna/c2rMC5/btsMCsa3Zk1/AAAAAAAAAAAAAAAAAAAAABuZmgFybRe3Y-vD1fdZEanvHrdakNL7kJcizQRaumOH/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=Fk%2BG%2Fzy2cK3uslikQrJIMFRVZiI%3D" alt="" height="476" width="809"><figcaption></figcaption></figure>

→ 77d6로 시작되는 것을 확인 가능하다.

<figure><img src="https://blog.kakaocdn.net/dna/o9pD1/btsMBgW4lXm/AAAAAAAAAAAAAAAAAAAAAJ4ablwsr2f_7RwvNe4-PbtMcG5FcHDqCGREWodkQ0aK/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=yKIRSqKD9aM0cxgQIdWnphCbICI%3D" alt="" height="439" width="814"><figcaption></figcaption></figure>

→ 77d62로 시작되는 것을 확인 가능하다.

<figure><img src="https://blog.kakaocdn.net/dna/kVbsD/btsMBGgOYDp/AAAAAAAAAAAAAAAAAAAAAOPRQVZ4BewKomRK4fsduEtgfJrjS0MwwCFavt-8QN6d/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=pzhgz1JutGoKqqnUjzrp1wg8Ae4%3D" alt="" height="433" width="833"><figcaption></figcaption></figure>

→ 77d629로 시작되는 것을 확인 가능하다.

<figure><img src="https://blog.kakaocdn.net/dna/bLemop/btsMBHtc8Sy/AAAAAAAAAAAAAAAAAAAAAHpvQclPNoutaFVurgv_QZCJ3B4Z751RZSuSzF_Oi536/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=44tfQJ8LKyHTKerJne31%2BFDrK7k%3D" alt="" height="410" width="840"><figcaption></figcaption></figure>

→ 77d6290로 시작된다는 것을 알 수 있다.(노가다…)

이렇게 마지막까지 가다보면

<figure><img src="https://blog.kakaocdn.net/dna/coM18h/btsMC8QDN5P/AAAAAAAAAAAAAAAAAAAAAPdUE9D1OYQKS3b9wATkwwEtB4pwRh8R5vweFz8HrvNB/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=aFBiVtBAu9Tz27Tx24P%2FGXEjvjc%3D" alt="" height="418" width="814"><figcaption></figcaption></figure>

→ pw가 77d6290b이다.

<figure><img src="https://blog.kakaocdn.net/dna/lDuy5/btsMBEQM5LX/AAAAAAAAAAAAAAAAAAAAANi3fxCJoHrqpew1EU4K07_7OIyUBIynV_XZK5ojppil/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&#x26;expires=1782831599&#x26;allow_ip=&#x26;allow_referer=&#x26;signature=O7YZDEmoZV6EqLOpEv%2Fg4cRPPIA%3D" alt="" height="480" width="610"><figcaption><p>문제 해결</p></figcaption></figure>

<br>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cooku222.kr/security/web-hacking/lord-of-sql-injection/lord-of-sqlinjection-golem.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
