这次复习一下SQL注入,好久都没弄过这个了,拿已知的通达OA 的漏洞下手
首先下载安装一下通达OA V11.7版本
查看源码,发现都是乱码,都是经过zend加密的,需要解密。解密工具可使用SeayDzend
代码审计发现注入
首先判断$condition_cascade是否为空,如果不为空,则将其中的\\\'替换为\'
再查看exequery函数
因为是无回显机制,是盲注(盲注的核心是:substr、if等函数)
传入错误的SQL语句时,页面出错:
(id=1%20and%201=1)
union select 1,database(),user(),4
说明是有过滤的,这里要是看到源码就好绕过
这样不同结果页面返回的内容不同,这样就可以进行注入了。
那么只要构造MySQL报错即可配合if函数进行盲注了,翻看局外人师傅在补天白帽大会上的分享,发现power(9999,99)也可以使数据库报错,所以构造语句:
select if((substr(user(),1,1)='r'),1,power(9999,99))
通过和这个来猜测用户名第一个字符是否是r(猜测用户名为root)
能够查询数据之后如何getshell呢?通过/inc/conn.php
代码可以看到,过滤了大多情况的getshell的方法
添加用户
grant all privileges ON mysql.* TO 'at666'@'%' IDENTIFIED BY 'abcABC@123' WITH GRANT OPTION
注入到此结束