본문 바로가기

[HackThis!!] [SQLi] LEVEL 1 첫 화면이다. 문제에서 어떤 계정이든 로그인하라고 한다. 로그인 폼이 보이는데, Form SQL Injection을 할 수 있을 것이다. 어떤 DBMS를 사용하는지 아직 모르므로, MySQL 버전의 공격을 실시한다. Username: ' or 1=1# Password: [아무거나] 이렇게 주면, SELECT [column] FROM [table] WHERE username = '' or 1=1#' AND password=[입력값]' 쿼리가 완성되는데, MySQL에선 #이 주석문이라 Password 쪽은 확인하지 않으며, 항상 참인 1=1과 or 연산하여 username이 무엇이든 로그인시킬 수 있다. DBMS가 MySQL이 아니라면 Syntax Error가 표시될 것이다. 작성된 쿼리를 그대로 보여준다!.. 더보기
[CodeEngn Challenges] Basic RCE 20 실행해도 빈 창만 뜬다. 그래서 우선 문제의 crackme3.key라는 key file을 만들고, 미리 CMP문에 breakpoint을 걸어 저 예시로 한번 디버깅해보았다. 저 CMP에서 문자열 개수가 12h(18)인지 검사한다. 그래서 일단 필요한 부분에 주석을 달아보았다. 이후, 길이 조건에 충족하도록 입력한 후 401311에서 어떠한 과정을 거치는지 알아보았다. 대충 주석을 달아보았다. 이를 바탕으로 python 코드를 작성해보았다. 알고리즘을 보자면, 입력한 문자열의 [0]~[13]번까지 14 문자를 0x41, 0x42, …, 0x4E로 각각 XOR 연산하여 각 자리 값을 치환, 각각의 연산 결과를 모두 더해 0x4020F9 주소에 넣는다. 아래는 0x12345678과의 XOR까지 진행한 결과이다.. 더보기