美文网首页
sqli-labs Less-18-19

sqli-labs Less-18-19

作者: jun123123 | 来源:发表于2019-10-16 20:11 被阅读0次
  • Less-18
    这题和Less-17有点类似,sql语句是insert语句
    刚开始尝试对uname和passwd进行注入时发现无回显,看了php代码才知道uname和passwd值都被过滤过,无法进行注入,但是代码中存在将UA头部写入数据库的行为,因为没有对UA进行过滤,可以从这里下手。(其实是看了wp才知道)
    首先判断注入类型


    1.png

    单字符注入,判断插入列数


    2.png
3.png 4.png

可知insert语句在UA头后共插入了3列
构造payload:

1','1',1 or (select 1 from (select count(*),concat((select username from users limit 0,1),floor(rand()*2))a from users group by a)b ))#
5.png
注入成功
注:
  • 因为是在http请求头中写入注入语句,因此注释符'#'不需要使用url编码,同理'--+'和'-- '也不可用。
  • payload中,右括号比左括号多一个,因为要闭合原sql语句中的括号。Less-19相同。

做Less-17的时候,看wp发现还有一种思路,但是偷懒没仔细看,就是使用updatexml()函数进行注入,在这题里同样有效。
updatexml()函数是MySQL对xml文档数据进行查询和修改的xpath函数,有三个参数,updatexml(xml_target,xpath_expr,new_xml)。
其中xml_target是目标字符串,xpath_expr是xpath语法格式的xml表达式,new_xml是替换目标字符串中xpath_expr匹配到字符串的新字符串。由于xpath_expr要求为xpath格式,若非该格式则会报错。我们利用类似双查询报错注入的思路,通过查询语句将字段写入xpath_expr,由于不符合xpath格式便会产生报错,通过回显的报错语句便可获取写入的字段信息。
构造payload:

1','1',updatexml('1',(select * from (select concat('#',username,'#',password) from users limit 1,1)a),'1'))#
6.png
注入成功
注:
  • 在选择连字符时要注意有些字符是xml的保留字符如':','-'等,这里我们使用'#'作为连字符。
  • Less-19
    和Less-18相同,只是UA头换成Referer头。首先判断注入类型和插入列数,方法相同,发现是单字符,两列。
    构造payload:
1',updatexml(1,(select * from (select concat('#',username,'#',password) from users limit 1,1)a),1))#
7.png

注入成功

相关文章

网友评论

      本文标题:sqli-labs Less-18-19

      本文链接:https://www.haomeiwen.com/subject/xmoumctx.html