본문 바로가기

3. 웹 애플리케이션 취약점 진단137

lord of sql injection 22번 - dark_eyes 이번문제도 전 문제와 비슷한 형태입니다. 그런데 이번에는 if문의 사용이 금지되어있네요. if문을 사용하지 않고 error based SQLi를 사용해야 하기 때문에 union select만 이용해서 에러를 도출해야합니다. (select 1 union select (length(pw)>1))--+- 구문을 작성해서 넣으면 length와 비교하는 1 숫자에 따라 에러가 날 경우 에러메시지 없이 그냥 공백 화면이 출력됩니다. 공백 화면이 출력되면 에러라고 볼 수 있습니다. 그러면 이제 패스워드를 찾는 코드를 작성해야하는데 전에 했던 코드에 쿼리문만 살짝 수정하면 됩니다. darkeye.py import requests requests.packages.urllib3.disable_warnings() sess=.. 2023. 12. 22.
lord of sql injection 21번 - iron_golem 이번 문제는 hello guest 처럼 나오는 특수한 에러 메시지가 출력되지 않는다. 위처럼 기존에 하던 방법으로는 메시지가 나오질 않기때문에 비밀번호를 알 수 있는 방법이 없다. 대신 mysqli_error 코드를 보니 오류가 나면 에러 메시지를 출력해주는 것 같다. 이를 이용해서 Error Based SQLI 를 써주어야 한다. 에러를 강제로 일으키기 위해 if 함수를 사용해주었다. if(쿼리,1,2) if 문에서 쿼리가 참이면 1, 거짓이면 2가 실행되는 것은 알것이다. 이를 이용해 length(pw) 길이를 쿼리로 넣고 참이면 1, 거짓이면 select 1 union select 2가 실행되도록 해주었다. select 1 union select 2는 한 row에서 두개를 셀렉트 한다는 것인데 이로.. 2023. 12. 22.
lord of sql injection 20번 - dragon 이번 문제는 id 뒤에 #으로 주석처리가 되어있어서 뒷 구문이 모두 먹히지 않게 된다. 이처럼 평소대로 구문을 넣었는데 주석처리되다보니 뒷 구문이 막혔다. 여기서 취약점은 #의 경우 한 줄만 주석처리를 하는 특성이 있다. 그렇기 때문에 \n, 줄바꿈을 활용해 줄을 바꾸어주면 뒷 구문을 이용할 수 있을것이다. 우선 \n을 넣어보았는데 이러면 적용이 안된다. URL 인코딩 구문인 %0a를 넣어주면 \n 으로써의 동작을 하게된다. \n을 어디에 넣어주어야할까. # 뒤에 구문, 즉 and pw=' 까지는 #으로 버리고 그 뒤에 새로운 구문을 작성해야하니 pw에 바로 %0a로 줄바꿈을 해주면 된다. 그 뒤 and pw=1 or id='admin'--+- 와 같이 넣어주면 될것이다. 위 구문을 통해 and pw='.. 2023. 12. 22.
lord of sql injection 19번 - xavis 이번에도 블라인드 sqli 문제다. 그런데 이번엔 필터링 자체가 별로 없는데 우선 매일 쓰던 쿼리를 넣어보았다. 잘 된다.. 그래서 length를 찾아보았다. 12자인것으로 확인.. 그래서 ascii와 substr 함수로 찾아보려고 한다. 그런데 이상하다.. 첫번째 글자가 아스키코드 0의 값을 가리킨다. 이것은 null값을 의미하는데 뭔가 문제가 있는것 같다. 이런 경우는 pw가 영문자나 숫자가 아닐 가능성이 높기 때문에 ascii 대신 ord 함수로 대체해서 써보았다. 그랬더니 값이 50000 이상을 훌쩍 넘긴다.. 특수문자도 아니고 영문자도 아니고 숫자도 아니라면 뭘까..? 답은 하나밖에 없다. 한글이거나 다른 언어이거나.. 그래서 이 문제는 한글같은 문자와 호환하는 유니코드 범위의 숫자로 변경해서 .. 2023. 12. 22.