webhacking.kr 7번

 

auth를 눌러보면 엑세스 디나이드가 뜬다.

소스를 먼저 살펴보았다.

sql인젝션을 활용해서 풀어야 할것 같다.

preg_match() 는 2번째 인자 안에 있는 1번째 인자 중 일치하는 것이 있으면 true 없으면 false다.

현재는 go의 값에 일치하는 값이 있기 때문에 Acess Deniend가 뜨는 것일거다.

2, -, from, =, * 등이 go의 값에 존재해서는 안될것 같다.

 

rand()이후의 if문을 살펴보면

mysqli_fetch_array() 는 mysqli_query()의 결과에서 레코드 행을 1개씩 리턴하는 함수다.

data[0] 이 2여야 문제를 풀 수 있을 것 같다.

 

여러가지 방법을 생각해 볼 수 있는데 val에 직접적으로 2를 넣으면 preg_match에 걸러지므로 다른 방법으로 2를 만들어야 한다.

 

이렇게 입력을 해주었더니 쿼리에러가 떴다.

db에 lv이 2인 레코드가 없기 때문이다.

따라서 sql문을 사용하여 val를 정해 줘야 한다.

 

union과 select를 이용해 레코드를 주입해준다.

 

괄호를 닫지 않은 이유는

이 부분에서 최종적으로 select lv from chall7 where lv=(2)union(select lv like 5%3))이 되도록 만들어야 하기 때문.

 

하지만 아직 풀리지 않고 nice try가 떴다.

nice try는 rand에서 걸린 숫자가 내가 주입한 sql문과 괄호 개수가 맞지 않기 때문에 뜬 것이라고 생각해서 계속 새로고침을 눌러보았다.

하지만 여전히 풀리지 않아서 버프스위트의 리피트 기능을 이용해볼까 싶었는데 역시 아닌거 같아서 결국 구글링의 힘을 빌리게 됐다.

 

찾아보니 처음 val에 2가 아니라 다른 틀린값을 넣어줘야 풀리는 것 같았다.

그리고 계속 시도하다가 다른 블로그를 보니 select안에 lv like가 아니라 그냥 바로 숫자 값을 넣어서 go를 해줬더니 풀려버렸따.... 무슨 차이가 있는거지?

 

찾아보니 일단 내가 select문에 대한 이해가 부족했던거 같다.

참고한 블로그

Union Select SQL injection,주석,addslashes 우회,공백 우회,url encoding (tistory.com)

 

Union Select SQL injection,주석,addslashes 우회,공백 우회,url encoding

50번 문제의 view-source는 위와 같았다. 문제를 풀어보니, 크게 5가지 내용에 대해 공부할 수 있었다. 1. Union Select SQL Injection 2. 주석 /**/와 #, -- 3. 띄어쓰기 우회 4. addslashes 우회 (EUC-KR을 UTF..

zzzmilky.tistory.com

 

union을 이용해서 데이터를 추출할때 기존 select문의 출력에 공격자가 원하는 데이터를 합쳐서 출력이 가능하다.

 

즉 내가 val에 5)union(select 5%3)을 넣음으로써

select lv from chall7 where lv=(5)union(select 5%3))이 완성되는데

lv이 5인 레코드가 존재하지 않으므로 select 5%3에 의해 lv이 2인 결과값 레코드가 출력된다.

 

'문제풀이 > 보안 writeup' 카테고리의 다른 글

webhacking.kr 45번  (0) 2021.04.08
webhacking.kr 38번  (0) 2021.04.08
webhacking.kr 8번  (0) 2021.03.19
webhacking.kr 27번  (0) 2021.03.18
webhacking.kr 18번  (0) 2021.03.18
myoskin