Hacking/Web.

column name 모를 때 sql injection

2017. 6. 10. 01:39

Lord of SQL Injection이나 뭐, 다른 워게임들을 풀 땐 칼럼명이 약간 id, pw (혹은 거기에서 더 나아가 no) 로 암묵적으로 정해진 감이 없지않아 있다. 내가 워게임에 문제를 출제할 때도 보통 그런 식으로 칼럼명을 지으니까.


근데 문제는 리얼월드나 조금 어렵게 된 워게임에서는 그런 거 없다. ㅅㄱ링~ 자신이 스스로 칼럼명을 알아내야 한다. 진심 빡치지만 해야한다.ㅎㅎ


어째뜬 이 두서가 조금 쓸데없고 길었지만, 이 문서에서 말하고 싶은 것은 칼럼명을 모를 때 SQL Injection을 하는 방법이다. 



select * from tableName where id='' union select 1,' and pw='#';


wow~! 이 쿼리는 조금 신기했다. 그냥 내 머리에서 이런 생각이 나온다는 사실이 신기했던 것 같다. 이 쿼리가 union clause를 이용해서 정상적으로 실행된다면 [ and pw= ] 라는 값이 출력된다.


여기에서 MySQL 변수를 이용해서 조금 변형할 수 있다. 

select * from tableName where id='' and (select @a:=' and pw=') union select @a,@a#';

첫 번 째에 소개했던 내용과 크게 다른 점은 없다고 생각하긴 하는데,, 그냥 때에 맞게 쓰면 될 것 같다. (참고로, 이것은 sakuya 님의 블로그에서 얻은 내용이다.) 


지금 필자가 소개하는 두 쿼리는 혼자서 발견한 거라서 조금 의미있다.ㅋㅋ



그리고 다음 내용은 칼럼명을 모를 때 어떻게 테이블 안에 있는 내용을 출력할 수 있는가에 대해서 소개하도록 하겠다. 

이걸 보게 된다면 union clause가 왜 개사기캐인줄 알게 될 것같다. 


select id,pw from users union select a,a from (select 1,2 as a union select id,pw from (select id, pw from users)a)b;

이렇게 쓸 수 있다는 것이다. 이 쿼리 역시 상황에 맞게 사용하면 될 것 같다. 


지금 큰 깨달음을 얻고 나서 흥분에 빠진 상태로 쓰는 글인데 뭐,,, 어떨지는 모르겠다. 만약 이 문서를 읽는 독자가 있다면 큰 도움이 되었으면 좋겠다.




'Hacking > Web.' 카테고리의 다른 글

http://u32.jeong.su/dog/  (0) 2017.07.01
order by cluase에서 blind sql injection  (0) 2017.06.22
about _ga cookie  (0) 2017.06.09
[wargame.kr] adm1nkyj wirte up  (0) 2017.06.08
[wargame.kr] lonely guys write up  (1) 2017.05.14