wargame.kr [SimpleBoard]

sql 인젝션임을 알려주고 시작한다.

먼저 view source를 눌러 읽어보았다.

내가 활용할 수 있을만한 부분을 찾아보니 쿠키에 관련된 소스들이 있었다.

function read_chk부터 살펴보겠다.

strpos() : 첫번째 인자로 오는 문자열에서 두번째 인자로 오는 문자열의 위치를 반환하는 함수다.

"/".$idx : php에서 문자열 사이에 .은 두 문자열을 합치는 것.

 

view라는 쿠키에 /$idx 가 존재한다면 true를 반환하고 존재하지 않는다면 false를 반환한다.

 

다음 function inc_hit을 살펴보면

update문이 실행되어 table의 hit의 숫자를 하나 증가시키고

$view에는 view쿠키/$idx 의 값을 넣는다.

setcookie() : 참고한 링크 https://webisfree.com/2015-03-02/[php]-%EC%BF%A0%ED%82%A4-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-setcookie() 

 

[PHP] 쿠키 설정하기, setcookie()

php에서 쿠키를 설정 및 사용하는 방법에 대하여 알아볼려합니다.

webisfree.com

view 쿠키에 앞서 설정한 $view의 내용으로 값을 정해준다.

time()+3600은 쿠키 만료시간을 한시간으로 설정한다는 의미.

 

function read 부분을 보면 앞서 정리한 함수 두가지가 사용되고 있다.

read_chk에서 false를 받았을때, 즉 view쿠키에 /$idx가 존재하지 않을때 inc_hit을 통해 update 문이 실행되고 view 쿠키의 값에 /$idx내용을 추가해주는 것 같다.

 

Board 클래스를 살펴보니 쿠키값을 어떻게 이용해야 할거 같은데

각 테이블의 내용을 클릭하면 넘어가는 read.php페이지에서 쿠키값을 확인해보았다.

앞에 %가 붙어있는 인코딩? -> url인코딩이다.

url디코딩 사이트를 통해 돌려보니 /1/2/3/4/5/0 라는 값이 나왔다.

 

view의 값을 모두 지우고 리스트의 각 항목을 클릭 해봤더니 앞서 본 inc_hit가 실행됐는지 /1/2/3/4 가 추가되고 hit가 증가하는걸 확인 할 수 있었다.

view에 해당 값이 없으면 inc_hit가 실행되고 있다는 점.

이렇게 url에 직접 idx값을 바꿔서 접근하는 방식은 당연히 실패...

 

다시 read함수를 마저 이어서 보자면 여기에 표의 내용을 불러오는 쿼리가 있다.

여기의 idx부분이 쿼리를 삽입하면 될걸로 보인다.

하지만 idx부분에 쿼리를 삽입한다면 해당 내용이 view에 등록되어 있지 않으므로 inc_hit에서 쿼리 오류가 발생하게 될 것이다.

 

여기서 부터 막혀서 구글링을 조금 했다.

도움이 된 링크 https://poqw.tistory.com/24

 

[MySQL] Information_schema

MySQL은 가장 많이 쓰이는 데이터베이스(Database) 중 하나입니다. (현재 이 글을 쓰는 시점 세계에서 2번째로 많이 쓰인다고 합니다) 그럼 데이터베이스란 무엇일까요? 데이터베이스는 위키백과에

poqw.tistory.com

 

view의 값을 다음과 같이 해주고 table_name을 알아냈다.

테이블명은 README 테이블명을 알아냈으니 테이블 속 컬럼을 찾으려고 했는데

5 union select column_name,1,2,3 from information_schema.columns where table_name="README"

쿼리에러가 떠버렸다.

 

또 폭풍검색...

mysql_real_escape_string($idx)

여기가 문제였다. 여기서 내가 쓴 "가 걸려버린것 그렇다면 이걸 우회할 방법은?

https://code1018.tistory.com/101

 

WebHacking - SQL Injection(우회), Blind SQL Injection

저번 글 마지막에서 SQL 인젝션을 막아보았다. 바로 magic_quotes_gpc 설정을 통해서인데 한번 어떻게 막아지나 다시한번 확인해 보겠다. 게시글 내용을 sql injection test글로 수정하는 쿼리로 조작해서

code1018.tistory.com

여기 나온것처럼 char()를 이용하는 방법이 있고

https://blog.tunz.kr/22

 

MySQL Injection에서 LIMIT, quote(따옴표) 우회법

따옴표(캐릭터) 우회 만약 따옴표(')가 필터링이 되어있는데, 캐릭터를 비교를 해야한다던가.. 하는 상황이 있다면 ascii 를 사용하시면 됩니다. ascii는 캐릭터를 숫자로 바꿔주는 방식이므로, ascii

blog.tunz.kr

여기 나온것처럼 0x를 이용하는 방법이 있다.

후자의 방법으로 시도해봤다.

README의 헥사코드는 0x524541444d45

플래그라는 컬럼이 등장!

드디어 끝!

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

Dreamhack [csrf-1]  (0) 2021.07.23
websec.fr babysteps level04  (0) 2021.07.19
[root-me] NoSQL Injection - Authentication  (0) 2021.07.02
SuNiNaTaS(써니나타스) 22번  (0) 2021.07.02
SuNiNaTaS(써니나타스) 4번  (0) 2021.07.01
myoskin