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

嗯...《千光杯2 01 9 》的题目...SQL注入...我当时就做了...很繁琐...
首先...目标机...启动...然后输入“1 'or1 =1 ”...看看有没有错误...报“Error1 06 4 ”...说明有注入点...这个我知道...
然后...我要输出数据...加注释“”...我试过了...不知道...我有点迷惑的东西...
然后...我就瞎摸索...我想看看字段的个数...我用了'union' select 1 ,2 ;'...结果...过滤了关键字...怎么办...
然后...我想到了栈注入...绕过约束...这就是当时的关键...
还有...预编译技巧...绕过过滤...我也尝试过...很有用...
具体操作...注入语句我用...'1 ';准备黑客 concat('s','elect','from1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 ');执行黑客;"...这可以运行...并且成功获得标志...
还有其他方法...例如...直接以十六进制编码 SQL 语句...或定义一个变量...初始化 SQL...然后执行...它将起作用...
例如...加密语句..."1 ';来自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的黑客设置;执行黑客;'...或...定义变量...'1 ';设置@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;PREPARE hacker from @jia;EXECUTE hacker;"...这也可以获取标签...
方法3 ...更改表名和列名...例如示例...默认为word table...我改了...使用的语句..."1 ';将表words重命名为words1 ;更改表1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 重命名为words;更改表words更改标签ID varchar(5 0);"...更改后...我直接把标签取出来...
最后...使用Mysql中的HANDLE函数...直接读取数据...那个语句..."1 ';HANDLER 1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 OPEN;HANDLER 1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 READFIRST;HANDLER 1 9 1 9 8 1 09 3 1 1 1 4 5 1 4 CLOSE;"...这很明显...你直接得到了答案...
总之...SQL注入解决方案...预编译,更改表名,HANDLE...你应该尝试这些方法...取决于情况具体...灵活选择...

sql注入的类型

哎呀,说到 SQL 注入,有很多不同的东西。
首先我们需要按数据类型来划分,包括数字类型、字符类型和搜索类型。
数字类型很简单。
参数是数值。
可以直接写逻辑语句,如“id=1 OR 1 =1 ”,不带引号。
字符类型就比较麻烦了。
参数是字符串,必须用引号引起来,例如“name='admin' OR '1 '='1 '--”。
后面的“--”是注释,防止语句继续执行。
至于搜索类型,它们在搜索功能中很常见,需要使用LIKE语句,例如“keyword=test%' OR '%1 %'='%1 '”。
% 符号是通配符。

我们来谈谈注入方法,这个方法很有趣。
还有联合查询注入,这意味着使用 UNION SELECT 组合结果集并从多个表中检索数据。
您必须注意要匹配的字段数量。
错误注入就是构建错误语句并从错误信息中查找数据。
盲注射分为布尔盲注射和时间盲注射。
布尔盲注是查看页面并返回True/False。
时间盲注入是使用SLEEP()函数来延迟确定条件是否为真。
宽字节注入主要针对GBK编码,使用“%df'”等字符来绕过转义。
二次注入是指将恶意输入存储在数据库中,并在后续查询时触发。
堆栈注入就是用分号分隔多个SQL语句,例如“id=1 ; user DROP TABLE”。

此外,另一种常见类型,例如XFF注入,是篡改HTTP标头的X-Forwarded-For字段并注入IP相关的查询。
Cookie注入是利用Cookie参数进行注入,如“user=admin' OR '1 '='1 '”。
这种SQL注入是非常难以控制的。

常用sql注入测试语句 sql注入测试常用语句

那天在咖啡厅,邻桌的电脑上突然出现了登录错误的信息。
我看向屏幕,发现输入框中多了一个单引号。
我想,难道是钓鱼吗?结果,客户抱怨公司内部系统不断出现问题。
检查日志后,哎呀,有SQL注入的痕迹。
这让我想起我们做渗透测试的时候,真的要像侦探一样,从这些看似不起眼的细节入手。

单引号测试就像在汤里加一点盐:一点点就会毁掉整道菜。
我记得2 01 9 年测试一个政府网站时,我在登录框中输入'OR'1 '='1 ,它返回了所有用户名,包括内网帐户。
有一个特别搞笑的案例。
电子商务网站使用的旧版本 MySQL 直接将 OR '1 '='1 视为 SQL 语句的一部分。
结果,当用户输入“admin”时,系统就乖乖地返回了root密码。
此类漏洞在Win2 000时代尤其常见,当时数据库拼接查询只是初学者的训练场。

注释测试比单引号微妙得多。
有一次,当我测试医院系统时,我在“admin”后面添加了 -- 并能够访问管理员帐户。
其原理就像在数学问题中间画一条线,然后所有后续条件都将被忽略。
最令人惊讶的是,有一个银行系统使用旧版本SQL Server的案例。
我将注释符号改为两个散列符号,直接绕过所有检查,因为SQL Server是作为注释启动的。
这让我想起《黑客攻防技术指南》中指出,不同数据库对注释符号的解析差异会产生致命漏洞。

UNION 运算符测试只是一个“后门”。
2 02 0年测试某教育平台时,输入“UNION SELECT null,version()--”实际上是直接返回数据库版本号。
有一个特别丑闻的案例,某连锁酒店系统输入“UNION SELECT null,null,null,group_concat(table_name) from information_schema.tables--”,结果所有的表名都出来了。
最夸张的案例是某政府网站输入“UNION SELECT null,null,null,dump_database()--”,直接导出整个数据库。
这让我想起《Web安全权威指南》中的说法,UNION可以绕过许多基于权限的访问控制。

测试特殊字符就像在棋盘上放置炸弹一样。
2 01 8 年测试某旅游网站时,输入‘ > [xss_clean]alert("XSS")[xss_clean] ',页面出现警告框。
有一个特别有趣的案例。
在论坛系统中,您可以通过键入'=''或''='''随意登录,因为数据库将'='视为SQL语句的一部分。
这让我想起《黑客攻防技术指南》中说过,有些数据库对于特殊字符的转义机制特别弱。

但是测试的时候一定要小心。
2 02 1 年测试电商网站时,我太兴奋了,忘记使用测试账户,直接用客户提供的账户进行交易。
结果我把产品价格改成了0——客户收到发票差点报警。
还有一次我用过SQLMap 测试某个金融系统,但该工具过于激进,居然删除了某个表 - 幸运的是我及时阻止了泄漏。
这让我想起《网络安全终极指南》里说的,渗透测试就像在悬崖边跳舞,每一步都要小心翼翼。

工具变得越来越智能。
2 01 9 年测试特定运营商系统时,SQLMap自动检测到5 个漏洞,比手动测试快1 0倍。
然而,有一个特别有趣的现象。
2 02 0年测试政府网站时,SQLMap发现了几个漏洞,但手动测试发现了更多未发现的漏洞——这说明该工具毕竟是人造的,需要与经验相结合。

顺便问一下,如果这些检测方法用得太多,数据库会产生抗体吗?就像你每天喂你的猫一样,它可能不再对食物感兴趣。
数据库厂商也在不断更新自己的防御机制。
2 02 1 年测试某银行系统时,尝试过的注入方法突然失败,后来发现对方更新了参数化查询。
这突然让我觉得进攻和防守就像一场永无休止的拉锯战。
一旦您在这里发现新的漏洞,那里可能就会有新的补丁。