找回密码
 加入怎通
查看: 200|回复: 1

sql注入比你想象的更危险_sql注入是近年来

[复制链接]
我来看看 发表于 2023-03-23 19:03:04 | 显示全部楼层 |阅读模式
5 B: M& M, q0 Z" t$ I

专注于Java领域优质技术号,欢迎关注前一段时间安全部门测出某个程序存在sql注入漏洞,在我原来潜意识中一直认为构造危险的 sql 语句是相对较难的,所以没有绷紧神经,总认为就算存在漏洞,也很难被实际攻击,总抱有侥幸心理,但这次事件却给了我很大一个教训。

0 C8 M% R& M9 o# B8 h( I: d" ~

sql 注入如何产生的某个程序对 URL id 参数没有做严格的限制,正常的情况下,会这样执行:update table set id = {id} where name = login如果攻击者传递 id 参数是 1 and sleep(5) --,则会构成一条危险的 SQL 语句:

) J3 l7 C" Y7 l" V

update table set id = 1 and sleep(5) -- where name = login开始我倒没太在意(只能说太不敏感了),虽然注入了,但仅仅对我们不重要的一个表进行了全表替换。

- C4 g2 f0 B1 ^. `- E: q

第二个伤害我认为是 sql 执行 延迟了 5 秒而已后来发生的事情(下面会说)才让我猜测到这条语句耗时很久,假设 table 表有 10 条记录,那么整个 sql 语句会执行 50 秒,全表锁定了 table 表的 update 操作。

$ C7 L; d; l- B* _. x4 Q5 C* `

当然这个sleep 耗时如此之长是我后面发现的,怎么发现的呢?看下面全表锁定注入发生的第二天,同事说某个功能总是不成功,页面总是超时,我排查了下,发现该功能执行的一个关键 sql (在同一个库)居然超时报错

7 e$ @0 A m& Y z) Q7 ~/ N

了:update table2 set tb =2 where id=3我在 mysql 终端执行了下 show full processlist87 | db | ip:port | Query | 93724 | User sleep | update table set id = 1 and sleep(5) -- where name = login |

9 i; H# B8 _/ o

居然发现 sql 注入语句还在执行,而其他的 update 操作由于 table 表被全表锁定了,一直在等待,积累了很多的 update 操作同时执行 show global status:| Innodb_row_lock_current_waits | 77 |。

; @& S8 {) L) j9 ] f7 A

确实显示 77 个操作被锁了立刻反馈给了 DBA 同时,他们执行了 information_schema 库的相关操作:SELECT r.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,r.trx_query waiting_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread,b.trx_query blocking_query FROM innodb_lock_waits w INNER JOIN innodb_trx b ON b.trx_id = w.blocking_trx_id INNER JOIN innodb_trx r ON r.trx_id = w.requesting_trx_id ;。

1 |; Y- d. `- { n

也显示被锁定了,立刻在 mysqld 端 kill 了这条语句,服务正常运行了这个时候我才意识到 sql 注入的危害比我想象的大多了沉思对于我们开发者来说,知道 sql 注入是危险的,但如何构造危险 sql 可能是很难的,可怕的是现在居然有这样的工具(比如 sqlmap),那么危险的 sql 会产生什么后果:。

/ T# P% \. m) |7 C( K9 f8 }

偷窥:导出全表数据破坏:更新、删除记录sqlmapsqlmap 是一个渗透测试工具:sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers.

) [ E8 `, E* @

我完全不会使用该工具,总感觉什么白帽子、红帽子、黑帽子都不是啥好东西,他们带来好处的同时也带来极大的危害同事使用了下这个工具,我在旁边看了一会,感觉功能太强大了,虽然不知道它的实现原理,但很想搞明白,经过同事的测试,发现几个原理:。

: y! j' `' j9 N. m& e! V

要完整注入,被注入程序必须要打印结果,否则很多 sqlmap 功能(比如导出表结构)会失效information_schema 被极大的利用了,没有特殊需求,要关闭它的操作权限sqlmap 有 session data,比如它将整个库表结构 dump 到 session data。

6 Y& }8 C R0 ?) U; T( }' F3 z

上面几个原理都是我通过观察 mysql 日志发现的,要开启 mysql 日志,打开 my.cnf :general_log_file = /var/log/mysql/mysql.log然后一边运行 sqlmap,一边观察 general_log_file 日志。

- U% ^: i- t R2 p2 _# }

接下去讲解 sqlmap 的几个操作:sqlmap.py -u "http://localhost/test/db.php?id=1" --batch --schema sqlmap.py -u "http://localhost/test/db.php?id=1" --batch --tables

( n X6 m6 [" t6 X, ^. a3 a

其中让我惊叹它功能强大的是能执行 shell:sqlmap.py -u "http://localhost/test/db.php?id=1" --batch --sql-shell实现 shell 原理其实也不复杂,就是它内部又调用了下 db.php,然后将结果输出,本质上并没有什么区别

( W: V2 R2 T K W; w8 w

来自:https://mp.weixin.qq.com/s/89t2vW--z4ElaKklQwYuCQ

9 y! p/ E0 {! Z5 `% s 6 U" ^% M4 ?3 p: i$ J* ]+ A 1 F8 V1 ?6 z' ?) R+ }! K5 s( A0 p9 m) k2 ~/ A, P+ q- W 7 }( j% [2 O' w2 |6 c

暂时无法加载帖子列表

回复

使用道具 举报

akenzhang 发表于 2026-03-15 13:51:26 | 显示全部楼层
楼主辛苦了,整理这么多内容,必须点赞收藏
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-10-1 05:33 , Processed in 0.035846 second(s), 25 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表