宽字节注入和Django(攻防cat) - 图1

    抓住那只猫….emmm

    命令的cat?

    宽字节注入和Django(攻防cat) - 图2

    题目的场景都一模一样……

    不会和之前攻防世界那个执行命令一样吧,先试试:127.0.0.1。

    回显:

    宽字节注入和Django(攻防cat) - 图3

    命令执行!试试127.0.0.1&&Is

    回显:

    宽字节注入和Django(攻防cat) - 图4非常尴尬的无效。

    那就得换个思路了:仔细观察

    上面?url=xxxxxx;是一个Get传值;并且符号转成了url编码。

    符号……会不会过滤了某些东西。

    试试

    这时候用字典跑一下:

    宽字节注入和Django(攻防cat) - 图5

    453

    的回显都是没有被过滤的字符…..输入到上面的url编码地区看看:

    宽字节注入和Django(攻防cat) - 图6

    在输入框里输入:

    输入@被转成了url编码的%40

    输入/被转成了url编码的%2F

    宽字节注入和Django(攻防cat) - 图7

    试一试%80这个临界值(可能存在宽字节注入)

    了解一下宽字节注入:https://www.jianshu.com/p/4fe931da9550

    宽字节注入和Django(攻防cat) - 图8

    这….算啥;出来一个html的界面……这是一星题 我太菜了

    既然是个html的代码,另存为一个html文件打开它宽字节注入和Django(攻防cat) - 图9

    打开得到:

    宽字节注入和Django(攻防cat) - 图10

    又是啥玩意哟….难受

    参考大佬WP

    宽字节注入和Django(攻防cat) - 图11

    发现python目录为:/opt/api,并且Django的gbk编码导致错误编码宽字符。

    这是啥玩意?!

    百度百度

    宽字节注入和Django(攻防cat) - 图12

    所以呢?!太菜了太菜了。

    1. ![](https://cdn.nlark.com/yuque/0/2019/png/573149/1575553758598-79e8340d-25f0-4c00-a869-b8416f2ad92c.png)

    意思是可以用@读取文件内容。结合django的报错得知了项目的绝对路径为/opt/api

    对哦,刚刚没有被过滤

    所有构造URL:@/opt/api/api/settings.py

    宽字节注入和Django(攻防cat) - 图13

    我吐了….又是html,再来一次。

    再打开:从茫茫大海中竟然能找得到(比赛时候又要做不出了)

    宽字节注入和Django(攻防cat) - 图14

    数据库的路径??

    再用@试试:URL=@/opt/api/database.sqlite3

    宽字节注入和Django(攻防cat) - 图15

    你不吐我都吐了…..

    宽字节注入和Django(攻防cat) - 图16

    我日你哥!!!

    WHCTF{yooooSuch_A_G00D@}

    参考https://www.cnblogs.com/-mo-/p/11572267.html

    https://blog.csdn.net/yisosooo/article/details/101165258