最近有个需求是写一个能直接post json数据到某个位置的bash脚本,在网上查到可以用curl实现。由于json包含双引号,只能将整个字符串用单引号包裹来取消转义,但是这么做又不方便注入数据,所以我想了一个方法来实现。
如果要发送固定内容的json是这么做的
1 2 3 4
|
curl -X POST -H "Content-Type: application/json" -d '{"user":"admin","password":"12345"}' http://192.168.1.1/login
curl -X POST -H "Content-Type: application/json" -d @./login.json http://192.168.1.1/login
|
如果要通过
./login.sh admin 12345
传入不同的用户名和密码,上面这种方式就行不通了
1 2
|
curl -X POST -H "Content-Type: application/json" -d '{"user":"$1","password":"$2"}' http://192.168.1.1/login
|
我的方法是定义一个变量代表双引号,字符串改用双引号以启用字符串注入。建议在本地写好json再全部替换双引号
1 2 3 4
|
q='"' curl -X POST -H "Content-Type: application/json" -d "{${q}user${q}:${q}$1${q},${q}password${q}:${q}$2${q}}" http://192.168.1.1/login
|