sql注入
跨库注入
当你的用户权限是root时,你就有访问所有数据库的资格了,一般来说每一个网站对应一个数据库以及对应一个数据库用户;
所以拿到了root基本上就为所欲为了😏,这是涉及到所谓的旁站注入了
举个栗子🌰:
这里查询已知用户为root,跨库注入开搞!
得到了mysql中所有的数据库名,假定userinfo是我们想进去看看😋的库;接下来的操作就和简单注入的过程就差不多了
拿到userinfo中的所有表名
拿到表loginuserinfo中的所有列名
拿到表中的数据
Over!😁😁😁(以上举的案例都是图片案例,没有直接展示出代码,就是为了大家能自己亲手敲敲代码,实战体验一下呐)
案例的靶场是来自于sqli-labs
文件读写操作
在sql注入中,不仅仅只是为了读取数据,有的时候知道了文件路径,直接写入后门岂不是更加刑了嘛😈
这就涉及到了文件读写的操作(mysql下的)
文件读取操作:load_file()
文件写入操作:into outfile()
举个栗子🌰:
读取文件操作
网页源代码查询,显示已经输出出来了
那么写入文件就更加有意思了,最刑的手段😈
案例是读和写入操作都是在本地(D盘某位置下的文件),正常来说攻击目标都是在服务器端,一句话木马写上就可以连接对方的服务器了(这就涉及到其他的知识点了,俺现在不会,等长大后再学😛)
目前为止,聪明的小伙伴就题出一个疑问了
question:我连对方项目里有什么都不知道,文件的目录结构、文件路径啥的就更不清楚了,那咋对文件进行读写操作呢?
这里就要了解路径获取的常用方法了
- 报错提示
- 遗留文件
- 漏洞报错
- 平台配置文件
防护与绕过
内置的方法防护 — magic_quotes_gpc 魔术方法 — 对引号、斜杠等符合进行转义,即在前面加一个 \
绕过这个就很简单:对你要注入的sql语句进行16进制编码即可,sql中是可以运行16进制字符串的
点对点的防护 — is_int() 判断变量是否为int值
这种就别想了,溜就完事了🏃(没办法绕的)
自定义防护 — str_replace()替换出现的关键字
结合实际情况(代码审计)进行绕过即可;
审计不了的话就试试常见的绕过方法:穿插关键字(双写)、大小写转换、对个别字母进行16进制转换、双重url编码、/**/绕空格 等等
waf防护 — 安全狗
没办法绕的)
自定义防护 — str_replace()替换出现的关键字
结合实际情况(代码审计)进行绕过即可;
审计不了的话就试试常见的绕过方法:穿插关键字(双写)、大小写转换、对个别字母进行16进制转换、双重url编码、/**/绕空格 等等
waf防护 — 安全狗
与绕过关键字思路差不多(但肯定要难很多😶)之后再专门研究介绍吧✊