今天查资料发现 sqlmap 有一个 --eval 的参数
--eval=EVALCODE Evaluate provided Python code before the request (e.g.
对应执行sqlmap 中 sqlmap-masterlibcorecommon.py 中的 evaluateCode 函数
def evaluateCode(code, variables=None):
"""
Executes given python code given in a string form
"""
try:
exec(code, variables)
except KeyboardInterrupt:
raise
except Exception, ex:
errMsg = "an error occurred while evaluating provided code ('%s') " % getSafeExString(ex)
raise SqlmapGenericException(errMsg)
我们来看一下 sqlmap 带上 --eval 的执行过程
debug 参数

在sqlmap-masterlib equestconnect.py 中设置如下断点


点debug
sqlmap 首先会把各个参数都给解析出来,cookie ua 等等

然后接着sqlmap 会进行 evaluateCode(conf.evalCode, variables) 调用 sqlmap-masterlibcorecommon.py evaluateCode 函数,运行到 exec(code, variables)
这中间sqlmap 会进行 pay.load 构造 一系列动作

流程大致是 解析输入命令-> 解析url,header -> exec(code, variables) <-> payload 构造
用法:
--eval "import base64;id=base64.b64encode(id)" // 对id参数值进行base64编码, id 参数必须存在,否则出错
--eval "id=id.replace(' ','/*****/')" // 将id参数值中的空格转换为 /*****/
--eval="_locals['auxHeaders']['Host'] = 'xxx.com'" // 如果host字段存在则将其改为 xxx.com
--eval="_locals['auxHeaders']['xxx'] = 'fdsafdsf'" // 添加xxx头为fdsafdsf