본문 바로가기

분류 전체보기257

lord of sql injection 23번 - hell_fire 이번 문제는 order by 구문을 활용하여 풀어야하는 문제다. order 값을 받아서 테이블을 정렬하는데 order by에 if문을 이용해서 참과 거짓을 가려내어서 admin의 이메일 길이를 알아내고 값을 구해야 할것같다. if문을 넣어서 길이를 검증하고 참이면 score를 반환해서 order by score가 되고 거짓이면 id를 반환해서 order by id 구문이 쿼리로 들어가도록 하였다. 이제 이메일 길이값을 찾아야 하는데 길이값에 = 를 주어서 글자수가 맞으면 score, 틀리면 99999 와 같은 숫자를 주어서 에러를 유발해 score가 아닌 기준이 되도록하였다. 그 결과 28 길이로 하였을때 올바르게 정렬되었다. 이제 전에 사용하던 블라인드 sqli 코드를 수정하여 이메일 주소를 찾으면 될.. 2023. 12. 22.
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.