Building on what @Dillon Silzer said, you'll need to adjust for weekends yourself. You can do that by looking at the weekday of the end of the month. If it is 1 (Sunday) or 7 (Saturday) then step back -2 or -1 days. For the first of the month then you'd add 1 or 2 days accordingly. Perhaps something like this.
\-- Last month
DECLARE @target DATETIME = DATEADD(month, -1, GETDATE())
\-- Get start and end just to save from repeating in the expression
DECLARE @startOfMonth DATETIME = DATEFROMPARTS(YEAR(@target), MONTH(@target), 1)
DECLARE @endOfMonth DATETIME = EOMONTH(@target)
SELECT @target
, CASE DATEPART(dw, @startOfMonth)
WHEN 1 THEN DATEADD(day, 1, @startOfMonth)
WHEN 7 THEN DATEADD(day, 2, @startOfMonth)
ELSE @startOfMonth END AS StartOfMonth
, CASE DATEPART(dw, @endOfMonth)
WHEN 1 THEN DATEADD(day, -2, @endOfMonth)
WHEN 7 THEN DATEADD(day, -1, @endOfMonth)
ELSE @endOfMonth END AS EndOfMonth
Of course you could probably convert this to a function and pass in the date you care about and have it return the start and end as a table value if you wanted.