CTF 해법 축적 메모

3527 단어 CTF

이것은 무엇입니까?


  • CTF의 해법을 주로 정리해 나갑니다.
  • 처음에는 하나의 기사로 만들지만 나중에 분리시킬지도
  • 대체로 스스로 보답하는 용
  • 왠지 장르적인 분류로 정리해 가고 싶다
  • 개최된 대회마다 정리하는 것은 하지 않습니다만, 표제의 뒤에 붙입니다

  • 주요 장립


    ## ジャンル
    ### 問題名 (出題元) : XSSとかSQLiとかCodeInjectionとか...
    解けたか解けなかったとか,所感とか書く
    #### 問題と試行
    ここに問題と,その試行の記録などを書く
    #### 解法
    ここに解法,まとめを書く
    #### 知見
    ここに解くことによって得た知見を書く
    

    본체



    Injection



    web_search (SECCON2019) : SQLi


  • 풀리지 않았다 (2019/10/22)
  • 기초 지식 부족 문제

  • 문제와 시도


  • 검색 창이 있고 텍스트를 입력하여 보내면 검색과 부분적으로 일치하는 결과가 반환됩니다.
  • SQLi일 것이다라는 인상이 있었으므로 우선 ';-- 라든지 해 보았다, 에러.
  • 다음에 ';# 로 해 보는, 보통의 결과가 돌아왔다 -> MySQL일까
  • 원래 SQL은 SELECT rfc, desc from rfc_table WHERE rfc LIKE 'RFC%' AND desc LIKE '%ココ%'; 가나 같은 소감
  • ' or 1;# 라든지 해본다. -> ';# 뭐야? ? ? ? ? ? << 여기서 드리겠습니다

  • 해법


  • SQLi입니다. 또한 MySQL에서 움직이고 있습니다.
  • 서버 측에서 ,, ,or 이스케이프 된

  • ORだけ再帰的にエスケープされていない.
    • これによりOORR
    • , 를 사용할 수 없는 것에 관해서는 이하의 방법으로 해결할 수 있는 것 같다,
    • なしでSQLを組み立てる必要があった.
      • スペースに関しては,/**/
      • join 하고, 목표의 개수가 될 때까지 연결한다.


      • , -> flag가 flag 테이블에 있는 것을 가르쳐 준다.
      • flag 테이블의 결과를 union으로 끌어들이기
      • RFC 번호와 그 설명이므로 ID 포함하여 3 개로 좋을까 -> 3 개 프레임을 준비해 둔다
      • SELECT * (SELECT 1)a join (SELECT 2)b join ...
      • 위의 공백을
      • まず全件表示' OR(1)로 바꿉니다.

      • 결론

      • hoge' UNION SELECT * FROM (SELECT * FROM flag)a JOIN (SELECT 1)b JOIN (SELECT 2)c;#는 공백으로 대체됩니다.
      • /**/ 와 쉼표 없이 취득
      • 우선 여러가지 시험해 본다.
        payload.sql
        'or(1);#
        hoge'/**/UNION/**/SELECT*FROM(SELECT*FROM/**/flag)a/**/join(SELECT/**/1)b/**/join(SELECT/**/2)c;#`
        

        지견

        1. /**/ 라든지 특히 움직이기 쉬운 물건을, 이스케이프만이라면 SQL이 에러에서도 알 수 있다
        2. SELECT * FROM (SELECT 1)a JOIN(SELECT 2)b JOIN... 라는 기법도 있다
  • 좋은 웹페이지 즐겨찾기