2021-09-09 · 2분
[시스템해킹] Buffer Overflow(BOF)
설정되어 있는 버퍼의 크기보다 크게 입력을 받을 수 있을 때 생기는 취약점입니다.
2021-06-06 · 1분
이 글은 작성된 지 2년이 넘었어요. 내용이 오래됐을 수 있어요.
이 LOS(Lord Of SQLInjection)은 SQLInjection를 실습할 수 있는 웹 해킹 실습 사이트입니다.
SQL Injection에 관한 건 [해킹/웹 해킹] - SQL Injection 이 글을 읽어주세요~ㅎ
[해킹/웹 해킹] - [LOS] 2번 cobolt write up <- 2번 문제

3번 문제를 보니 전과는 조금 달라 보이네요!
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
쿼리문을 보니 id값이 guest로 고정되어 있고 사용자가 입력하는 부분은 no= 이 부분 같습니다. 그리고~
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("goblin");
이 부분이 해결하는 부분인데 전 문제와 비슷하네요? id값이 admin이 되면 끝인 거 같습니다! 그렇다면 전과 똑같은 방법으로 입력해보도록 하겠습니다.
no=id=admin%20%23 이런 식으로 입력했더니

이런 식으로 특수문자가 검출되는 것 같습니다.
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
그렇다면 no값에 기본적인 1이라는 값을 넣어볼까요?

게스트라고 인사해주세요... 우리는 admin이 되고 싶으니 다른 값을 넣어보겠습니다. 2, 3, 4 넣어보겠습니다.
!> ****](https://www.easycalculation.com/ascii-hex.php)
아무것도 안 뜨네요? 거짓인 것 같네요! 그렇다면 아래와 같이 적어주겠습니다. select id from prob_goblin where id='guest' and no=23 or id='admin' ㄴ no에 거짓 값을 넣어서 거짓으로 만들어 주고 or로 id를 admin으로 만들어 주었습니다. 앗 하지만 위에서 시도했던 거처럼 특수문자는 막혀있습니다. 그렇다면 어떻게 해야 할까요? 바로 아스키코드를 사용하는 것입니다. 사용해서 다시 적어볼까요? **select id from prob_goblin — ascii-hex.php 이런 사이트에서 쉽게 아스키코드를 얻어낼 수 있습니다.
원문: tistory — 2021-06-06 발행, 이 블로그로 이전됨.
…