ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

今日题目(下)

今日题目(下) SQL-1SQL注入原理、成因、常见分类、提交方式。SQL注入是由于过度信任用户的输入把用户的危险输入拼接进SQL语句解析的漏洞会造成数据库信息的泄露、数据被篡改、服务器被提权、甚至写入木马等等。常见分类包括字符型和数字型按注入种类可以分为联合查询注入、报错注入、布尔盲注、时间盲注、二次注入、order by 排序注入等等按数据库类型可以分为MySQL、SQLite、MongoDB注入等等按注入位置可以分为Cookie头注入、登录框注入、搜索栏注入、HTTP头Referer头等、URL注入等等。提交方式就是注入位置有Cookie、登录框、搜索栏、HTTP头Referer头等、URL等等。SQL-2如何找注入点如何判断注入点id1 怎么判断字符型还是数字型如果是白盒测试的话看有无危险函数黑盒测试看用户可以输入的地方可能有注入点。判断是否有SQL注入可以用1若报错则说明存在SQL注入。判断数字型看1 AND 11和1 AND 12若前者正常显示而后者报错就是数字型。若1 and 11 正常1 and 12 异常就是字符型。SQL-3报错注入常用哪些函数floor报错注入原理报错注入常用extractvalue()、updatexml()、floor(rand(0)*2)、exp()函数。floor报错注入原理是group by函数使rand被计算两次虚拟表主键冲突导致报错用户输入被拼接到SQL语句中伴随报错信息显示给用户。SQL-4时间盲注原理除了 sleep() 还有哪些替代sleep 被过滤怎么办和布尔盲注类似若用户输入拼接为SQL语句执行后的时间要素和所设置的相同说明输入是正确的可以用二分法来逐位猜测或者使用SQLmap得到信息。用benchmark()、get_lock()函数代替。SQL-5宽字节注入原理、利用、payload构造。宽字节编码时会在引号前面加上转义符导致引号被转义失效我们构造的SQL语句出错。为了让引号逃逸我们在 (%27)前面加上%df%df会与转义符一起被识别为汉字从而让引号逃逸。payload举例%df union select group_concat(tables),2,3 from information_schema.tables where table_columns flag --我们看一道CTF题下面是我的部分payload1%df union select group_concat(table_name),2,3 from information_schema.tables where table_schema0x776562 --(因为payload里也会被转义但是加%df也无法吃掉转义符/因此用十六进制表示万能公式admin%df or 11#SQL-6SQL注入写shell需要什么条件into outfile 和 into dumpfile 区别写入WebShell需要一定权限比如file权限secure_file_priv允许写入或者为空知道网站的绝对路径Web目录有可写权限。into outfile一般用于导出数据文本、每行后换行符into dumpfile一般用于二进制且into dumpfile只有一行。所以写 WebShell 通常用 dumpfile因为 outfile 会加换行符容易把木马搞坏。SQL-7MySQL 5.0以上和5.0以下有什么区别MySQL 5.0以上有information_schema构造payload时可以用5.0以下没有就需要用报错注入等其他方法进行注入。SQL-8SQL注入的防御方法有哪些代码层怎么防预编译能不能防所有注入防御方法预编译参数化查询、列白名单、遵循最小特权原则、部署防火墙等等。使用预编译绑定变量、对特殊字符转义、严格白名单校验预编译不能防所有注入比如二次注入。预编译只能绑定“参数值”不能绑定表名、列名、ORDER BY 字段、LIMIT 等。如果这些位置有拼接依然会注入。SQL-9sqlmap常用参数含义os-shell 原理。sqlmap 是自动化 SQL 注入检测与利用工具常用参数含义如下-u指定目标 URL--batch非交互模式自动选择默认选项--dbs枚举所有数据库--tables枚举指定数据库的所有表--columns枚举指定表的所有列--dump导出表数据--os-shell获取操作系统命令执行权限os-shell 原理sqlmap 先尝试用INTO OUTFILE往网站目录写一个 WebShell然后访问它执行系统命令如果写不进去目录不可写或secure_file_priv限制就改用 UDF 提权来执行命令。前提是数据库用户有 FILE 权限、知道网站绝对路径、目标目录可写。SQL-10SQL注入流量特征如何判断攻击是否成功流量中会出现大量特征函数如extractvalue、floor、sleep等等。有回显看数据布尔盲注看页面真假状态差异时间盲注看响应是否明显延迟外带注入看 DNSLog 有没有收到请求。DNSLog 是一个记录 DNS 解析记录的在线平台攻击者让目标服务器去解析自己控制的子域名如果 DNSLog 后台收到解析记录就说明目标确实执行了注入语句从而确认外带注入成功。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进