查看原文
其他

遇到的注入三例

听风安全 2023-11-28

The following article is from only security Author f0ng

免责声明
由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

公众号现在只对常读和星标的公众号才展示大图推送,

建议大家把听风安全设为星标,否则可能就看不到啦!

----------------------------------------------------------------------

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

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

  • 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

不可错过的往期推荐哦


从0到1深入浅出学习SQL注入

SRC漏洞挖掘之评论区CSRF

记两次失败的域渗透

实战之巧用验证码校验接口

记一次细得不行的账户权限提升

U盘植马之基于arduino的badusb实现及思考

APT是如何杜绝软件包被篡改的

利用sqlserver agent job实现权限维持

SRC挖掘葵花宝典

点击下方名片,关注我们

觉得内容不错,就点下“”和“在看

如果不想错过新的内容推送可以设为星标
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存