본문 바로가기

SQL Injection39

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.
lord of sql injection 18번 - nightmare 이번에는 주석문이 필터링되고 글자도 6자 이내로만 pw에 넣을 수 있다. 주석문의 경우 %00 null을 사용해서 뒤를 주석처리 해줄 수 있을것이다. 쿼리를 보니 pw=('') 이런 식으로 되어있는데 이 부분을 잘 수정한다면 pw를 참으로 만들고 뒤를 주석처리하면 될것같다. ?pw=')=0;%00 이렇게 작성하면 pw를 참으로 만들고 뒤를 주석처리 하며 6자리로 딱 끝낼 수 있다. 코드를 삽입하여 클리어 2023. 12. 22.
lord of sql injection 17번 - zombie_assassin 이번 문제도 '를 문자열화 시켜야할듯 하다. 그런데 addslashes가 있어서 글자를 넣으면 뒤에 \가 자동으로 붙게된다. 그래서 \를 넣게되면 \\이 되기때문에 전 방법으로는 어렵다. 방법이 두개 있는데 " 를 넣어서 \가 맞도록 해주거나 %00 null값을 넣어서 통과할 수 있다. %00을 넣어서 null값으로 삽입해보았다. %00&pw=||1=1--+- 구문을 넣어주었는데 위에 쿼리문을 보면 배치가 이상하게 되어있다.; 이는 strrev 함수가 배치문을 거꾸로 하기 때문이다. 그렇기 때문에 배치를 거꾸로 해서 넣어주면 정상적으로 삽입될것이다. %00&pw=-+--1=1|| 로 삽입해주니 클리어 2023. 12. 22.