write-up(web)
[Webhacking.kr] Challenge old-49 write-up
문제의 화면입니다. 문제의 소스 코드입니다. select or and ( ) limit ,(콤마) / order cash 공백 \t ' " 을 필터링합니다. id가 admin이 되면 문제가 풀립니다. lv를 입력하면 각 lv에 해당하는 id값이 나옵니다. lv 1~4까지는 id가 지정되어있고 이 이후 lv에 대해선 id가 없습니다. 그래서 admin에 해당하는 lv 값은 없구나 라는 추측이 가능합니다. mysql에서 조건문인 case 문를 써줍니다. 쿼리는 아래와 같습니다. lv=0 || id=case when lv=0 then 0 else admin end 이를 필터링을 우회하도록 값을 변경해주고 url로 던져주면 문제가 풀립니다. 공백은 %0a로 바꿔주고 admin은 16진수로 바꿔서 넣어줬습니다.
[Webhacking.kr] Challenge old-21 write-up
문제 화면입니다. 힌트가 될만한 소스 코드는 따로 존재하지 않으며 문제에 적혀있듯이 blind sql injection을 활용해야 합니다. 일단 id와 pw에 guest를 넣어보면 로그인에 성공한 모습을 볼 수 있습니다. 또한 url을 통해 값을 전달하고 있음을 알 수 있습니다. 이제 첫 번째로 pw의 길이를 조사하겠습니다. url로 몇 가지 넣어보니까 조건이 true일 때는 wrong passward가 나오고 false일 때는 login fail이 나왔습니다. 이를 토대로 파이썬으로 코드를 짜서 pw를 알아내겠습니다. 먼저 id에는 임의의 값(a)를 넣어줍니다. pw에는 '로 pw 값(문자열)을 닫아주고 뒤에 임의의 쿼리를 넣습니다. 쿼리는 아래와 같습니다. ' or id='admin' and leng..
[Lord of SQLInjection] red_dragon write-up
문제의 소스 코드입니다. 정말 삽질을 많이 한 문제.. 결국 라이트업을 봤는데 제가 생각한 거랑 방향이 완전 다르더군요 우선 처음에는 id 파라미터를 통해 no의 값을 찾아보려고 별 방법을 다 써봤지만 실패하고 그 다음엔 is_numeric 함수의 취약점을 통해 무언가를 해보려했는데 16진수를 뜻하는 0x를 넣으니 그냥 1로 바뀌어 버렸습니다.. 그래서 결국 라이트업을 보니 부분 주석을 활용해서 푸는 문제더군요 (전에 했던건데..) 아무튼 id에 길이 제한(6자)이 걸려있으므로 id에 '||no< 까지 입력해줍니다. 이후 no에 개행문자 ;%0a 를 입력해주고 no 값을 찾아주면 됩니다. admin의 no는 0~1000000000 사이에 있다는 것을 알게 되었습니다. 이제 이진 탐색으로 no 값을 찾아주..
[Lord of SQLInjection] green_dragon write-up
문제의 소스 코드입니다. 이 문제는 쿼리가 2개입니다. 첫 번째 쿼리의 결과가 두 번째 쿼리의 입력으로 들어갑니다. 하지만 아무리 참인 조건을 넣어도 두 번째 쿼리가 나타나지 않습니다. 이를 통해 prob_green_dragon 테이블은 데이터가 없는 빈 테이블이라는 것을 알 수 있습니다. 그래서 union을 통해 데이터를 넣어줘야 합니다. 같은 테이블인지 모르고 참인 조건을 넣는 삽질을 하다가 같은 테이블임을 깨닫고 두 번째 쿼리를 첫 번째 쿼리와 같도록 만들어줘야 함을 알게 되었습니다. 아스키 값으로 바꿔준 후 넣어주면 이렇게 나옵니다. char() 함수의 괄호 안에 있는 admin을 아스키로 인코딩 해서 넣어줘야 합니다. char() 함수 마지막 인자에 23(#)도 넣어줘야 합니다. 값을 바꿔주고 ..
[Lord of SQLInjection] evil_wizard write-up
문제의 소스 코드입니다. 이전 문제인 hell_fire와 필터링이 다르다는 것 말고는 동일합니다. 데이터도 2개로 동일합니다. 이전 문제인 hell_fire에서 짰던 파이썬 코드를 그대로 활용해줍니다. 길이는 30문자이고 전부 아스키 값입니다. 이전 문제와 동일하게 이진 탐색 방식으로 구해줍니다. 얻어낸 pw 값을 email 파라미터로 전달해주면 문제가 풀립니다.