遇到的注入三例

最近没有更新,因为有点忙,加上有些东西需要花费时间去整理、总结,也有部分是因为人的惰性吧。

最近跟朋友讨论了很多注入点的一些情况,对注入又有了一个更深层次的了解。简单说一下三个注入,后面还有案例再分享。

  • 0x01 Oracle注入——多参数下的注入
  • 0x02 MSSQL注入——exec中的注入,常用关键字无法使用
  • 0x03 类似MSSQL注入——非SQL注入,实为DataView注入(.net datatables注入)

0x01 Oracle注入——多参数下的注入

0x001 背景

S神发来一个注入,一起思考

遇到的注入三例

加单引号报错

遇到的注入三例

两个单引号,正常遇到的注入三例

三个单引号,报错,经典!

遇到的注入三例

0x002 初试

一开始以为这个注入很简单,直接and或者or不就行了吗?1'and'1'='或者`1’or’1’=’1

1'and'1'='

遇到的注入三例

1'or’1'='1

遇到的注入三例

这里可能是因为id=1没数据导致的,id=2的时候有数据,但是也不行

遇到的注入三例
遇到的注入三例

后面也是尝试了很多payload,都不行,闭合不了语句,也无法判断逻辑

0x003 峰回路转

后续和S神探讨的时候,我询问到有没有其他的参数之类的,他说刚好有其他参数,因为该接口来源于JS文件,直接访问接口如图:

遇到的注入三例

还有个mobile参数!

这样来说,可能这里是采用的or逻辑判断(id为2的时候可以出数据),但是由于id处无法闭合,所以我们可以尝试mobile参数处:

遇到的注入三例

直接可以成功!

猜测这里语句为select * from test_table where userid = '{可控}' or mobile = '{可控}',但是这里userid后面肯定有其他的干扰语句,导致userid无法正常注入

以为直接到此为止了,使用substr函数就可以去注出数据了,但是发现服务器不允许传入substr

遇到的注入三例

后续S神使用了其他函数instr来进行注入

遇到的注入三例

这里过滤了空格,所以替换成了%0a

然后再用intruder的模块进行依次爆破,就可以得到完整用户名了

0x004 洞外话

  • 一开始是想用时间盲注的,发现DBMS_PIPE.RECEIVE_MESSAGE函数不能用,查了下资料,可能和数据库用户的权限有关,所以用了其他的函数,类比mysql笛卡尔积的高耗时操作
遇到的注入三例

可以得到用户名的长度为6

  • 后面又想尝试oracle的外带,但是没成功,感觉可能还是权限问题,附上外带的函数
DBMS_LDAP.INIT
UTL_INADDR.GET_HOST_ADDRESS
UTL_HTTP.request
UTL_TCP.request
UTL_SMPTP.request
UTL_URL.request
HTTPURITYPE.request

0x02 MSSQL注入——exec中的注入,常用关键字无法使用

0x001 背景

原始请求如下遇到的注入三例

一开始想用and或者or来判断,但是发现报错了

遇到的注入三例
遇到的注入三例

想用逻辑运算符,发现也报错了

遇到的注入三例

0x002 成功注入

直接掏出之前的某SRC一个案例的payload,可以证明存在延时注入,payload如下

 if(substring(db_name(),1,1)='j')waitfor delay'0:0:3'
遇到的注入三例

0x003 洞外话

后面查了下资料,发现可能是exec下的注入

因为页面有报错的信息,所以我想使用报错注入进行证明

and不行,所以没用and

遇到的注入三例

后续使用if也没成功,查阅资料发现[见0x04 参考 【1】]

遇到的注入三例

遇到的注入三例可能与exec有关系

所以这些关键字、函数:and、convert、group之类的都不行

但是众所周知,MSSQL对运算符比较敏感,所以报错还是可以的,payload如下:

proc_PortalAdmin_GetRoleContent 1, 104, 13 if(1=0/user)waitfor delay'0:0:1'

用户如下遇到的注入三例

数据库如下遇到的注入三例

0x03 类似MSSQL注入——非SQL注入,实为DataView注入(.net datatables注入)

0x001 背景

碰到一个.net的注入,,确实是注入,详细如下:因为是搜索框的注入,所以后面用and'1'like'进行闭合 payload

1'and len(substring('1',1,1)>0)>0 and '1'like'
遇到的注入三例

布尔判断 True

遇到的注入三例

False

遇到的注入三例

0x002 受阻

有了布尔,注入出数据还会远吗?

巧了,还真就不行

识别不了user函数、@@version等等这些MSSQL的变量

遇到的注入三例

但是能访问字段名(表里有个字段为tin)

遇到的注入三例

而后问了董神,发现并非是数据库注入,而是dataview的注入(.net datatables注入)

遇到的注入三例

0x003 洞外话

不是所有的单双数的单引号都能确保注入的存在,比如.net的dataview,具有SQL的特性,比如substring、and、like等等,但是不支持数据库的一些环境变量如@@version、user等等 可以理解成是dataview注入(.Net DataTables注入),非SQL注入[见0x04 参考 【2】]

只能在内存中操作数据 而且表和表都是独立的,超简易版内存结构化存储库,影响面只是当前这个表,危害较小

遇到的注入三例

0x04 总结

  1. 一个参数不行的时候,可以尝试其他参数;这里userid不行,可能后续有其他sql语句干扰了语句的执行,但是mobile参数又可以正常注入
  2. 接口还是要去试试各种各样的请求的,这里报出来缺少的参数,后面问了S神,才知道这个注入是经典的未授权到注入
  3. 有些时候注入的payload要收集起来,没准下次就能用上
  4. 并不是通过布尔就可以判断注入,以前知识面限制了我的认知,至少现在看来,.net下还是存在即使可以通过布尔判断页面,但是不一定是sql注入的情况

0x05 参考

  1. https://stackoverflow.com/questions/63360697/incorrect-syntax-near-the-keyword-convert-in-stored-procedure-exec
  2. https://docs.microsoft.com/zh-cn/dotnet/api/system.data.dataview?view=net-6.0


原文始发于微信公众号(only security):遇到的注入三例

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204181.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!